mirror of
https://github.com/macintoshplus/doc-fr.git
synced 2026-03-24 08:52:09 +01:00
126 lines
6.3 KiB
XML
126 lines
6.3 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!-- EN-Revision: 28529d3539b850e870e3aa97570f4db0e53daa03 Maintainer: Fan2Shrek Status: ready -->
|
|
<!-- Reviewed: yes -->
|
|
<chapter xml:id="opcache.preloading" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
<title>Preloading</title>
|
|
|
|
<para>
|
|
A partir de PHP 7.4.0, PHP peut être configuré pour précharger des scripts dans l'opcache lorsque le moteur
|
|
démarre. Toutes les fonctions, classes, interfaces ou traits (mais pas les constantes) de ces fichiers deviendront
|
|
alors disponibles globalement pour toutes les requêtes sans avoir besoin d'être explicitement incluses. Cela échange
|
|
la commodité et les performances (car le code est toujours disponible) contre l'utilisation de la mémoire de base. Cela
|
|
nécessite également de redémarrer le processus PHP pour effacer les scripts préchargés, ce qui signifie que cette fonctionnalité
|
|
n'est pratique qu'en production, pas dans un environnement de développement.
|
|
</para>
|
|
|
|
<para>
|
|
Notez que le compromis optimal entre les performances et la mémoire peut varier en fonction de l'application.
|
|
"Tout précharger" peut être la stratégie la plus simple, mais pas nécessairement la meilleure. De plus,
|
|
le préchargement n'est utile que lorsqu'il y a un processus persistant d'une requête à une autre. Cela signifie
|
|
que bien que cela puisse fonctionner dans un script CLI si l'opcache est activé, c'est généralement inutile. L'exception
|
|
est lors de l'utilisation du préchargement sur les <link linkend="ffi.examples-complete">bibliothèques FFI</link>.
|
|
</para>
|
|
|
|
<note>
|
|
<para>
|
|
Le préchargement n'est pas supporté sur Windows.
|
|
</para>
|
|
</note>
|
|
|
|
<para>
|
|
La configuration du préchargement implique deux étapes, et nécessite que l'opcache soit activé.
|
|
Tout d'abord, définissez la valeur <link linkend="ini.opcache.preload">opcache.preload</link>
|
|
dans &php.ini; :
|
|
</para>
|
|
|
|
<informalexample>
|
|
<programlisting role="ini">
|
|
<![CDATA[
|
|
opcache.preload=preload.php
|
|
]]>
|
|
</programlisting>
|
|
</informalexample>
|
|
|
|
<para>
|
|
<filename>preload.php</filename> est un fichier arbitraire qui sera exécuté une fois au démarrage du serveur
|
|
(PHP-FPM, mod_php, etc.) et chargera du code en mémoire persistante. Dans les serveurs qui démarrent en tant que
|
|
root avant de passer à un utilisateur système non privilégié, ou si PHP est exécuté en tant que root
|
|
(non recommandé), la valeur <link linkend="ini.opcache.preload-user">opcache.preload_user</link>
|
|
peut spécifier l'utilisateur système pour exécuter le préchargement. L'exécution du préchargement en tant que root n'est pas autorisée
|
|
par défaut. Définissez <literal>opcache.preload_user=root</literal> pour l'autoriser explicitement.
|
|
</para>
|
|
|
|
<para>
|
|
Dans le script <filename>preload.php</filename>, tout fichier référencé par <function>include</function>,
|
|
<function>include_once</function>, <function>require</function>, <function>require_once</function>, ou
|
|
<function>opcache_compile_file</function> vont être parsés dans la mémoire persistante. Dans l'exemple suivant,
|
|
tous les fichiers <filename>.php</filename> du répertoire <filename>src</filename> seront préchargés, sauf s'ils
|
|
sont un fichier <literal>Test</literal>.
|
|
</para>
|
|
|
|
<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>
|
|
<function>include</function> et <function>opcache_compile_file</function> fonctionneront tous les deux, mais ont des
|
|
implications différentes pour la façon dont le code est géré.
|
|
|
|
<itemizedlist>
|
|
<listitem><simpara><function>include</function> va exécuter le code du fichier,
|
|
tandis que <function>opcache_compile_file</function> ne le fera pas. Cela signifie que seul le premier supporte
|
|
la déclaration conditionnelle (les fonctions déclarées à l'intérieur d'un bloc if).</simpara></listitem>
|
|
<listitem><simpara>Parce que <function>include</function> va exécuter le code, les fichiers inclus de manière
|
|
imbriquée seront également analysés et leurs déclarations préchargées.</simpara></listitem>
|
|
<listitem><simpara><function>opcache_compile_file</function> peut charger des fichiers dans n'importe quel ordre. C'est-à-dire que si
|
|
<filename>a.php</filename> définit la classe <literal>A</literal> et <filename>b.php</filename> définit la classe
|
|
<literal>B</literal> qui étend <literal>A</literal>, alors <function>opcache_compile_file</function> peut
|
|
charger ces deux fichiers dans n'importe quel ordre. Lors de l'utilisation de <function>include</function>, cependant,
|
|
<filename>a.php</filename> <emphasis>doit</emphasis> être inclus en premier.</simpara></listitem>
|
|
<listitem><simpara>Dans les deux cas, si un script ultérieur inclut un fichier qui a déjà été préchargé, alors
|
|
son contenu sera toujours exécuté, mais les symboles qu'il définit ne seront pas redéfinis. L'utilisation de
|
|
<function>include_once</function> n'empêchera pas le fichier d'être inclus une seconde fois. Il peut être nécessaire
|
|
de charger un fichier à nouveau pour inclure les constantes globales définies en lui, car elles ne sont pas
|
|
gérées par le préchargement.</simpara></listitem>
|
|
</itemizedlist>
|
|
|
|
Quelles approche est la meilleur dépend donc du comportement souhaité. Avec du code qui utiliserait autrement un
|
|
chargement automatique, <function>opcache_compile_file</function> permet une plus grande flexibilité. Avec du code qui serait
|
|
autrement chargé manuellement, <function>include</function> sera plus robuste.
|
|
</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
|
|
-->
|