Dans ce tutoriel je vous propose de découvrir comment mettre en place OPcache, un système de cache de l'OPCode de PHP.
L'OPCode ?
Pour faire fonctionner vos scripts PHP le moteur Zend transforme votre code afin de l'exécuter plus facilement.
<?php
$variable = 'Salut les gens';
echo $variable;
?>
Pour exécuter le code suivant l'OPCode qui sera généré ressemblera à ça :
ASSIGN !0, 'Salut les gens'
ECHO $0
Le problème est que cette conversion se fait à chaque chargement de vos scripts PHP, ce qui peut s'avérer relativement épuisant pour le serveur. Un système de cache de l'OPCode va permettre de stocker en mémoire l'OPCode généré ce qui permettra de gagner en performance sans effort (comprendre par là qu'on active un truc et hop ça va plus vite sans modifier notre code PHP).
OPcache
Jusqu'à maintenant on avait l'habitude d'utiliser APC pour effectuer le cache de l'OPCode. Mais, depuis PHP 5.5, une nouvelle extension a été embarquée : OPcache. Pour l'activer il suffit donc de modifier la configuration de PHP.
zend_extension=opcache.so
opcache.enable=1
opcache.memory_consumption=512
opcache.max_accelerated_files=5000
opcache.validate_timestamps=1
opcache.revalidate_freq=60
Pour gérer l'invalidation du cache, OPcache peut se baser sur le timestamp de vos fichiers PHP en les vérifiant toutes les XX secondes (où XX est la valeur de revalidate_freq
). On peut aussi choisir de désactiver cette méthodes en passant validate_timestamp
à 0. Dans ce cas là il faudra utiliser la fonction opcache_reset()
pour invalider le cache de manière générale, ou la fonction opcache_invalidate()
pour invalider le cache d'un fichier en particulier.
OPcache GUI
Si vous souhaitez obtenir des informations concernant l'état de votre cache OPCache vous pouvez utiliser des interfaces qui génèrent des petits rapports sur l'utilisation du cache. Il en existe plusieurs mais personnellement je vous conseille d'utiliser opcache-gui qui fonctionne assez simplement et qui vous permet de gérer le reset du cache et l'invalidation des fichiers individuellement.