Optimisation du démarrage PHP OPcache

Pour les sites Web basés sur WordPress , Joomla ou Laravel et n'ayant pas de contenu spécifique à l'utilisateur, il est conseillé de conserver toutes les pages dans un cache HTML statique et de ne régénérer le cache que manuellement (ou automatiquement) lorsque des modifications sont apportées dans le backend. Cependant, si la page contient un contenu dynamique qui dépend des sessions et des cookies ou également de la langue et de l'emplacement, OPcache convient .


Le temps de démarrage pour les trois systèmes mentionnés est de plus de 100 ms avec un serveur CentOS7 fraîchement installé (avec SSD et PHP 7.1). Chaque fois qu'un script PHP est exécuté, il doit être compilé en bytecode au moment de l'exécution. OPcache implémente maintenant un cache pour ce bytecode - si le même script PHP est exécuté avec la requête suivante, il n'a pas besoin d'être recompilé. Après avoir activé OPcache, nous définissons les paramètres suivants:

9006cec6c5d3d2498ee26c5bfd91590a

Le temps d'exécution (en moyenne sur 10 exécutions) a maintenant été considérablement réduit:

WordPress 4.7.4 Joomla 3.7 Laravel 5.4
sans OPcache 295 ms 201 ms 110 ms
avec OPcache 54 ms 59 ms 13 ms
Facteur 5,5 3,5 8,5

Puisque nous définissons validate_timestamps sur 0 et en même temps revalidate_freq sur une durée d'un jour, le cache n'est presque jamais reconstruit automatiquement (nous le faisons consciemment manuellement). Avec un petit hook git , un script PHP est exécuté à chaque "pull". Comment activer le crochet:

a1678610c8b4c7db5997375944183830

a1678610c8b4c7db5997375944183830

La fonction d'assistance suivante est également utile pour mesurer des parties de code individuelles (ou tout le temps d'exécution):

085f4291bbcc4e8a64bbea951ff49ab9

Si vous souhaitez obtenir des informations utiles telles que l'état, la mémoire utilisée ou le nombre de fichiers mis en cache, vous utilisez cette fonction PHP:

3f6309d04bc7e48dd909859321b96209

Afin de bénéficier d'OPcache dans un environnement de développement local (ce qui n'est généralement pas recommandé), nous utilisons une astuce.

OPcache est actif sur tous les serveurs sur lesquels le module OPcache est installé et sur lesquels le paramètre opcache.enable n'est pas défini explicitement. Nous laissons les choses de cette façon. Nous définissons uniquement opcache.validate_timestamps = 1 dans php.ini, ce qui signifie que opcache.revalidate_freq = 2. Cela signifie qu'OPcache est revalidé presque en continu pour chaque projet. Pour les projets dans lesquels nous voulons activer OPcache de manière permanente, nous utilisons dans le .htaccess le paramètre suivant:

1dd64a3f2fe4425b29b1409410fe3fc0

Ensuite, nous redémarrons le serveur Web et créons le script suivant:

91fb5289160e410607c9ea89112a575b

Ce script efface le cache et le reconstruit en même temps. Maintenant, nous définissons une commande RunOnSave liée à l'espace de travail dans notre éditeur préféré VSCode:

91fb5289160e410607c9ea89112a575b

Retour