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.
|