TUTORIELS 
Les solutions d'optimisation ("caching") en Php4
Plusieurs solutions de "caching" existent pour un site Php. Utilisées conjointement ou non, elles contribuent à optimiser et préserver votre serveur web.  (6 décembre 2001)
 

Quelque soit le mode d'hébergement de votre serveur, dédié ou mutualisé, il existe des solutions de caching pour les sites en Php. Toutes ne nécessitent pas en effet une modification du php.ini avec redémarrage du serveur à la clef.
La plupart de ces solutions sont comparées entre elles dans deux études téléchargeables gratuitement, ce qui est notable compte-tenu de la qualité de celles-ci.

La première est l'oeuvre de Armel Fauveau (Globalis-Media Systems), on peut la trouver sur le site PhpIndex, édité par cette même société. Cette étude compare les performances de Php4 auquel on adjoint plusieurs solutions de caching / optimisation, citons Zend Optimizer et Zend Cache, APC et jpcache.
Le point fort de cette étude (50 pages mais très lisible) réside dans les nombreuses comparaisons effectuées tout en gardant comme référence les résultats obtenus par Php3. Il est ainsi facile de se rendre compte du gain de performances obtenu ne serait-ce que par l'utilisation de Php4, seul.

La seconde étude (téléchargeable après une création de compte) est signée par Matthieu Belge (Clever-Age), elle reprend les mêmes solutions que la première étude à l'exception toutefois de "jpcache" qu'elle remplace par "Bware-afterBurner Cache". On retrouve ici aussi des chiffres et autres graphiques synthétisant les résultats obtenus, une attention particulière est cette fois portée sur les consommations en mémoire et CPU des solutions retenues.


Il est intéressant de prendre connaissance de ces deux études, d'une part parce que les modes de tests diffèrent (mode opératoire et configuration matérielle) et d'autres part parce que l'une complète parfois l'autre (notamment sur les ressources utilisées et le test de différentes solutions).

Nous allons essayer ici de synthétiser les résultats de ces deux études. Nous vous renvoyons à la lecture de celles-ci pour prendre connaissance des résultats précis pour chacun des cas testés.

Les types de solutions existants

Vous l'avez noté, plusieurs solutions de caching sont donc disponibles pour un site conçu en Php. Celles-ci permettent, en influant plus ou moins sur la charge CPU ou la consommation de mémoire, d'obtenir pour une même configuration matérielle une disponibilité du serveur web supérieure à l'origine.

Nous nous plaçons ici dans le cas d'utilisation d'un serveur web Apache couplé à MySQL. Comme les auteurs de ces études le précisent, ces résultats sont valables pour une plate-forme donnée (en l'occurence Apache ici) et pour un type de test : simulation d'utilisation du site PhpIndex et calcul du nombre Pi pour la première étude et utilisation de PhpNuke pour la seconde.

Trois catégories sont susceptibles d'accueillir nos solutions :
- Les optimiseurs
- Les caches de code compilé (opcode)
- Les caches de page

Zend Optimizer constitue à lui seul la première catégorie. Distribué gratuitement par Zend, ce produit a deux actions principales : optimiser le code intermédiaire compilé par le "Zend Engine", et permettre l'exécution du code crypté par le "Zend Encoder" (Produit commercial permettant le cryptage du code source). A l'instar d'un compilateur classique, C/C++ par exemple, "Zend Optimizer" réorganise le fichier qu'on lui soumet afin de rendre son exécution plus rapide. Cela est particulièrement vrai pour les scripts complexes comme nous le verrons plus tard.

Seconde catégorie parmi les solutions d'optimisation disponibles, les caches de code compilé. On retrouve ici les produits "Zend Cache", "Alternative Php Cache (ou APC)", et "Bware AfterBurner Cache".
L'existence de ces produits se justifie par le fait que par défaut Php génère pour chaque page appelée un code intermédiaire (semblable au bytecode java par exemple), fruit de la compilation du script. Répétée "n" fois, cette procédure est bien évidemment coûteuse en ressources pour le serveur web.

Afin d'éviter de gaspiller ces précieuses ressources et ainsi permettre à davantage d'internautes de se connecter sur votre site tout en conservant un temps de réponse le plus acceptable possible, les solutions de caching sont recommandées. Celles-ci permettent de stocker le "bytecode" généré par Php en mémoire du serveur web, évitant d'inutiles compilations ou de coûteux accès disque. Php peut ensuite exécuter le bytecode stocké directement.

Dernière catégorie représentée, les caches de pages. Basé sur Phpcache, "jpcache" est de ceux-là. Ce type de solution est le plus contraignant à mettre en place puisqu'il faut insérer un script spécifique dans chacune des pages que l'on souhaite optimiser. Cette catégorie de produits stocke dans un fichier ou une base de données (moins performant) les "sorties" générées par les scripts Php (output buffering) et renvoie un flux compressé ou pas vers le navigateur selon que celui-ci supporte ou non la compression. "jpcache" utilise à ce titre "gzip".

Les résultats

Le tableau ci-dessous (reproduit partiellement ici) est issu de l'étude de Globalis media systems, il résume les grandes lignes des tests effectués ("Bware cache" n'apparaît pas ici), nous vous renvoyons à l'étude pour la description des procédures de test :

Les gains de performances par rapport à Php3

Chargement de la home de PhpIndex Recherche (requête SQL de type LIKE) Calcul des décimales de Pi
Php4 28% 22% 199%
Php4+ZendOptimizer 25% 21% 346%
Php4+ZendCache 51% 28% 199%
Php4+ZendCache+ZendOptimizer 53% 28% 347%
Php4 + APC SHM 36% 24% 197%
Php4+jpcache fichier/timeout 10 536% 516% 11712%
Php4+Zcache+ZOpti+jpcache 608% 568% 15326%


Ce tableau n'est qu'un maigre aperçu des résultats obtenus par ces deux études, il ne résume pas à lui seul les performances obtenues par ces solutions d'optimisation dans les différents cas.
Des nuances sont en effet à apporter. Ainsi par exemple on s'aperçoit grâce à la première étude que si le "Zend Optimizer" s'avère performant sur des scripts ou des calculs complexes, il peut s'avérer pénalisant sur d'autres scripts (légèrement).
Complémentaire encore une fois, la seconde étude nous apporte un "feedback" des clients sur cette solution, en moyenne le gain de performances par rapport à Php4 s'élève à 20%.

D'autres remarques soulignent par exemple les problèmes qu'une solution comme "jpcache" pourrait provoquer si elle est mal utilisée : attention notamment aux pages qui mettent à jour une base de données.

Ne ratez pas les différents graphiques disponibles dans ces études, au-delà des tableaux de résultats (nécessaires mais moins parlant), ils synthétisent d'un seul coup d'oeil les performances (moyennes ou non) pour chaque jeu de test.

Enfin, nous vous laissons découvrir par vous-mêmes les recommandations de Clever-Age sur les types de solutions à adopter selon vos besoins ainsi que les souhaits émis à la fin de l'étude de Globalis-Media Systems concernant une standardisation des benchmarks web.

 
[ Arnaud GadalJDNet
 
Accueil | Haut de page