Si votre site est particulièrement fréquenté,
si la base SQL de votre hébergeur est particulièrement lente, si certaines
de vos pages sont particulièrement gourmandes ou encore si votre serveur
web n'est qu'une vieille machine poussive de récupération, vous avez
probablement besoin d'un solide système de cache pour votre PHP.
Les systèmes de cache applicable au
PHP sont nombreux et répondent tous à des problématiques plus ou
moins différentes. Principalement, on distingue :
- les caches systèmes (proxy-cache inverse...) ;
- les caches d'opcode ;
- les caches côté script.
Les différents types
de caches
Les caches systèmes
Ce type de cache n'est
pas forcément lié à PHP. En effet, le cache est, dans ce cas, situé
en amont du langage de script, donc plus au niveau d'Apache que
de PHP.
Entre le client et le serveur
web, on intercale une machine avec un serveur Apache (par exemple
Squid) monté en proxy-cache inverse. Tous les visiteurs interrogeront
systématiquement cette machine et jamais le serveur web directement.
Lorsqu'une requête arrive au niveau
du proxy-cache inverse, la machine regarde en premier lieu si le
résultat de cette requête n'est pas dans son cache. S'il l'est,
le résultat est directement renvoyé au client sans du tout solliciter
le serveur web. Ainsi, PHP n'est jamais intervenu ! Par contre,
si le résultat de la requête n'est pas disponible dans le cache,
la requête est alors renvoyée au serveur web qui transmet le résultat
au proxy-cache inverse. Ce dernier sauvegarde le résultat dans son
cache et le transmet au client.
Cette méthode permet donc :
- de ne pas avoir à modifier ses pages pour bénéficier du cache
;
- des gains énormes en termes de vitesse : si la page est disponible
dans le cache, on traite en fait des pages statiques ;
- d'introduire une répartition de charge ou une haute disponibilité
en plaçant plusieurs serveurs web derrière le proxy-cache inverse.
Cependant :
- c'est une solution lourde et structurelle. Elle impose de repenser
toute l'architecture web : elle n'est donc pas accessible en hébergement
mutualisé et rarement en hébergement dédié;
- elle nécessite au moins deux machines, ce qui peut-être éliminatoire
si vous êtes votre propre hébergeur.
C'est une solution redoutable, mais elle est n'est quasiment applicable
que dans le contexte d'une entreprise qui est son propre hébergeur.
Les caches d'opcode
Les caches d'opcode se chargent de garder en mémoire l'opcode généré
par PHP. L'opcode est en fait une sorte d'intermédiaire entre le
script et l'exécutable. En effet, avant de lancer l'exécution à
proprement parler, PHP transforme votre script en opcode.
Le principe de ces systèmes de cache est de mémoriser cet opcode.
Ainsi à chaque nouvelle exécution de votre script, on économise
la coûteuse transformation du script en opcode.
Ce type de cache nécessite donc une modification interne de PHP.
Vous devrez être administrateur de la machine sur laquelle vous
l'installez.
Les avantages principaux sont les suivants :
- aucun besoin de modifier vos pages pour bénéficier de ce système
de cache ;
- une accélération notable des temps d'exécution des scripts.
D'un autre côté, les caches d'opcode nécessitent :
- une modification interne de PHP : pour certains, cela entraîne
des difficultés lors des mises à jours;
- les droits d'administrateur de la machine : cette solution n'est
donc pas envisageable sur un hébergement mutualisé ;
Les caches d'opcode sont une solution efficace mais elle n'est utilisable
que dans le contexte d'un hébergement dédié.
Sans avoir la prétention d'être exhaustif,
on peut citer :
The ionCube PHP Accelerator
Vous le trouverez à l'adresse http://www.php-accelerator.co.uk.
Il s'agit donc d'un cache d'opcode doublé d'un optimiseur de code.
Il donne d'excellents résultats, et tout particulièrement avec le
système de template Smarty (http://smarty.php.net).
De plus, ionCube PHP accelerator est gratuit. Son principal inconvénient,
c'est qu'il n'est ni libre, ni open source si bien que l'on a aucune
garantie sur la pérennité et la gratuité de ce programme .
Zend Accelerator
C'est le premier (historiquement) et le plus performant des caches
d'opcode. Edité par Zend Technologies, vous le trouverez bien sûr
sur http://www.zend.com. L'implication
de cette société dans le PHP garantit une bonne pérennité du produit
vis-à-vis des évolutions du PHP. Le seul inconvénient c'est qu'il
n'est pas gratuit. Les versions disponibles commencent à partir
de 490 dollars américains.
Turck MMCache for PHP
C'est un projet libre disponible à l'adresse http://turck-mmcache.sourceforge.net.
C'est un cache d'opcode doublé d'un optimiseur de code et d'un encodeur.
L'encodeur vous permet de diffuser un script PHP sans en donner
le source. Activement développé et maintenu, il commence à donner
d'excellents résultats (équivalents à Zend Accelerator dans certains
cas).
Les caches cotés script
C'est un peu la solution du pauvre. Pour utiliser ce type de cache,
il convient de modifier chacune des pages. On intègre quelques lignes
de PHP qui font le plus souvent appel à une classe externe. Cette
dernière vérifie si la page demandée est dans le cache, généralement
matéralisé par des fichiers. Si oui le fichier en cache est retourné
et l'exécution du script s'arrête. Si la page n'est pas dans le
cache, l'exécution de la page originale continue et son résultat
est capturé pour mise en cache.
Les avantages de ce type de solution sont les suivants :
- possibilité de mise en oeuvre simple, même sur un hébergement
mutualisé;
- les gains en vitesse peuvent être très importants ;
- on peut bénéficier d'une très grande souplesse avec certains outils
: par exemple, cacher uniquement plusieurs parties d'une page....
Cependant :
- chaque page doit être légèrement modifiée ;
- PHP est exécuté systématiquement, même si ce n'est que pour retourner
le contenu d'un fichier du cache et donc les performances ne seront
pas aussi bonnes que dans le cas d'un proxy-cache inverse.
|
Les caches coté script sont quasiment
applicables sur tout type d'hébergement. C'est une solution assez
facile à mettre en place, qui offre d'excellents résultats et une
grande souplesse. Il faut cependant légèrement modifier chaque page
pour l'utiliser.
Dans la mesure c'est la solution applicable pour le plus grand nombre
d'entre vous, nous allons approfondir ce type de cache et sa mise
en place dans la suite de cet article.
Page 1 | 2
| 3
| 4
|