mirror of
https://github.com/php/doc-pt_br.git
synced 2026-03-23 22:52:12 +01:00
124 lines
6.1 KiB
XML
124 lines
6.1 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!-- EN-Revision: 87d6bb1bbd5f118f5b0cf0160438f06c0f91ea45 Maintainer: fernandowobeto Status: ready --><!-- CREDITS: marcosmarcolin,fernandowobeto,leonardolara -->
|
|
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="opcache.preloading">
|
|
<title>Preloading</title>
|
|
|
|
<simpara>
|
|
A partir do PHP 7.4.0, o PHP pode ser configurado para pré-carregar scripts no opcache quando o mecanismo
|
|
é iniciado. Quaisquer funções, classes, interfaces ou traits (mas não constantes) nestes arquivos ficarão
|
|
globalmente disponíveis para todas as solicitações sem precisar ser incluídas explicitamente. Isso troca conveniência
|
|
e desempenho (porque o código está sempre disponível) para uso de memória de linha de base. Também requer
|
|
a reinicialização do processo PHP para limpar os scripts pré-carregados, o que significa que esse recurso
|
|
é prático apenas para uso em produção, não em um ambiente de desenvolvimento.
|
|
</simpara>
|
|
|
|
<simpara>
|
|
Observe que a compensação ideal entre desempenho e memória pode variar de acordo com o aplicativo.
|
|
"Pré-carregar tudo" pode ser a estratégia mais fácil, mas não necessariamente a melhor estratégia. Além disso,
|
|
o pré-carregamento só é útil quando há um processo persistente de uma solicitação para outra. Isso significa que,
|
|
embora possa funcionar em um script CLI se o opcache estiver ativado, geralmente é inútil. A exceção
|
|
é ao usar o pré-carregamento em <link linkend="ffi.examples-complete">bibliotecas FFI</link>.
|
|
</simpara>
|
|
|
|
<note>
|
|
<simpara>
|
|
O pré-carregamento não é suportado no Windows.
|
|
</simpara>
|
|
</note>
|
|
|
|
<simpara>
|
|
A configuração do pré-carregamento envolve duas etapas e requer que o opcache esteja ativado.
|
|
Primeiro, defina o valor <link linkend="ini.opcache.preload">opcache.preload</link>
|
|
em &php.ini;:
|
|
</simpara>
|
|
|
|
<informalexample>
|
|
<programlisting role="ini">
|
|
<![CDATA[
|
|
opcache.preload=preload.php
|
|
]]>
|
|
</programlisting>
|
|
</informalexample>
|
|
|
|
<simpara>
|
|
<filename>preload.php</filename> é um arquivo arbitrário que será executado uma vez na inicialização do servidor
|
|
(PHP-FPM, mod_php, etc.) e carregará o código na memória persistente. Em servidores que iniciam como
|
|
root antes de alternar para um usuário de sistema sem privilégios, ou se o PHP for executado como root
|
|
(não recomendado), o valor <link linkend="ini.opcache.preload-user">opcache.preload_user</link>
|
|
pode especificar o usuário do sistema para executar o pré-carregamento. A execução do pré-carregamento como root
|
|
não é permitida por padrão. Configure <literal>opcache.preload_user=root</literal> para permiti-lo explicitamente.
|
|
</simpara>
|
|
|
|
<simpara>
|
|
No script <filename>preload.php</filename>, qualquer arquivo referenciado por <function>include</function>,
|
|
<function>include_once</function>, <function>require</function>, <function>require_once</function> ou
|
|
<function>opcache_compile_file</function> será analisado na memória persistente. No exemplo a seguir,
|
|
todos os arquivos <filename class="extension">.php</filename> no diretório <filename>src</filename> serão pré-carregados, a menos que
|
|
sejam um arquivo <literal>Test</literal>.
|
|
</simpara>
|
|
|
|
<informalexample>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
$directory = new RecursiveDirectoryIterator(__DIR__ . '/src');
|
|
$fullTree = new RecursiveIteratorIterator($directory);
|
|
$phpFiles = new RegexIterator($fullTree, '/.+((?<!Test)+\.php$)/i', RecursiveRegexIterator::GET_MATCH);
|
|
|
|
foreach ($phpFiles as $key => $file) {
|
|
require_once $file[0];
|
|
}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</informalexample>
|
|
|
|
<para>
|
|
Ambos <function>include</function> e <function>opcache_compile_file</function>> funcionarão, mas têm implicações
|
|
diferentes sobre como o código é tratado.
|
|
|
|
<itemizedlist>
|
|
<listitem><simpara><function>include</function> executará o código no arquivo,
|
|
enquanto <function>opcache_compile_file</function> não. Isso significa que apenas o primeiro suporta
|
|
declaração condicional (funções declaradas dentro de um bloco if).</simpara></listitem>
|
|
<listitem><simpara>Como <function>include</function>executará o código, os arquivos <function>include</function>s
|
|
aninhados também serão analisados e suas declarações pré-carregadas.</simpara></listitem>
|
|
<listitem><simpara><function>opcache_compile_file</function> pode carregar arquivos em qualquer ordem. Ou seja, se
|
|
<filename>a.php</filename> define a classe <literal>A</literal> e <filename>b.php</filename> define a classe
|
|
<literal>B</literal> que estende <literal>A</literal>, então <function>opcache_compile_file</function> pode
|
|
carregar esses dois arquivos em qualquer ordem. Ao usar <function>include</function>, no entanto, <filename>a.php</filename>
|
|
<emphasis>deve</emphasis> ser incluído primeiro.</simpara></listitem>
|
|
<listitem><simpara>Em ambos os casos, se um script posterior incluir um arquivo que já foi pré-carregado,
|
|
seu conteúdo ainda será executado, mas quaisquer símbolos que ele definir não serão redefinidos. O uso de
|
|
<function>include_once</function> não impedirá que o arquivo seja incluído uma segunda vez. Pode
|
|
ser necessário carregar um arquivo novamente para incluir as constantes globais definidas nele, pois elas não são
|
|
tratadas pelo pré-carregamento.</simpara></listitem>
|
|
</itemizedlist>
|
|
|
|
Qual abordagem é melhor, portanto, depende do comportamento desejado. Com código que, de outra forma, usaria um
|
|
autoloader, <function>opcache_compile_file</function> permite maior flexibilidade. Com o código que seria
|
|
carregado manualmente, <function>include</function> será mais robusta.
|
|
</para>
|
|
|
|
</chapter>
|
|
<!-- Keep this comment at the end of the file
|
|
Local variables:
|
|
mode: sgml
|
|
sgml-omittag:t
|
|
sgml-shorttag:t
|
|
sgml-minimize-attributes:nil
|
|
sgml-always-quote-attributes:t
|
|
sgml-indent-step:1
|
|
sgml-indent-data:t
|
|
indent-tabs-mode:nil
|
|
sgml-parent-document:nil
|
|
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
|
sgml-exposed-tags:nil
|
|
sgml-local-catalogs:nil
|
|
sgml-local-ecat-files:nil
|
|
End:
|
|
vim600: syn=xml fen fdm=syntax fdl=2 si
|
|
vim: et tw=78 syn=sgml
|
|
vi: ts=1 sw=1
|
|
-->
|