PHP : utiliser un cache code pour accélérer votre serveur web

Compteur de vitesseBeaucoup de développeurs PHP considèrent que le langage PHP est un langage interprété. En réalité, il n’en est rien. Le PHP est en réalité un langage compilé dont le mécanisme de compilation est intermédiaire entre une compilation classique et une compilation JIT. Regardons de plus près ce qu’il en est.

Présentation du PHP

Le PHP est un langage informatique très répandu sur le web, souvent connu dans le quatuor LAMP. Et pour cause : il a été développé à l’origine comme langage de script pour générer dynamiquement, côté serveur, du contenu HTML. S’inspirant librement du langage C ou encore du Java, le PHP est plus simple à maîtriser que ces derniers, tout en étant un langage relativement puissant.

Exécution classique d’un script PHP

Concrètement, les scripts PHP sont stockés côté serveur comme du texte portant l’extension .php. Lors de l’accès à un fichier script PHP, le serveur web lance le module PHP qui se charge de l’exécuter. Cette exécution est la plupart du temps faite via le mécanisme suivant :

  1. Requête au script PHP au serveur web depuis Internet.
  2. Lancement du module PHP par le serveur web.
  3. Chargement par le module PHP du script PHP (code source).
  4. Compilation du script PHP en code exécutable.
  5. Exécution du code exécutable.
  6. Libération des ressources.

Ce mécanisme a pour inconvénient de nécessiter la compilation du code exécutable à partir du code source à chaque requête au script PHP, alors que le script PHP ne change pas, la plupart du temps, entre deux requêtes.

Utilisation d’un cache code PHP

L’idée d’un cache code PHP est par conséquent de stocker le résultat de la compilation du code source PHP dans un cache, mémoire ou disque, et d’aller le chercher aux prochaines requêtes au même script, gagnant ainsi du temps.

Avec un cache code PHP, l’accès au script PHP se passe donc ainsi :

  1. Requête au script PHP au serveur web depuis Internet.
  2. Lancement du module PHP par le serveur web.
  3. Chargement par le module PHP du script PHP (code source).
  4. Vérification de la présence du script PHP sous forme exécutable dans le cache : si code absent du cache, compilation du code en code exécutable, puis stockage dans le cache (le cas échéant, libération du cache du code et données les moins utiles).
  5. Exécution du code exécutable.
  6. Libération des ressources (sauf cache).

De cette manière, la compilation du script PHP en code exécutable ne se fait qu’une seule fois pour toutes (dans la limite de l’espace mémoire alloué au cache) au lieu de se faire à chaque requête au script, accélérant ainsi sensiblement le processus.

En général, l’utilisation d’un cache code permet d’accélérer par un facteur 2 à 4 le temps d’exécution d’un script PHP. Cependant, notez bien que le code exécutable produit, lui, n’est en rien accéléré. Seul le temps de compilation disparaît. D’où le gain de vitesse final. La plupart du temps, ce temps de compilation dure de l’ordre de 50 à 100 ms par requête. Aussi, si votre script nécessitant 150 ms à s’exécuter, il ne mettra que 50 à 100 ms à s’exécuter une fois le cache code installé. S’il mettait 30 secondes à s’exécuter, le gain obtenu sera négligeable.

Caches code PHP disponibles

Actuellement, il existe plusieurs caches code PHP sur le marché, dont plusieurs solutions open source :

ainsi que des solutions propriétaires, dont :

ou encore d’autres solutions moins connues.

Conclusion

Un cache code PHP permet d’accélérer la plupart des scripts PHP gérés par un serveur web. Cependant, dans le cadre d’une optimisation d’un site web, il convient de noter que cette voie n’est pas la seule à explorer, ni même celle qui permet d’obtenir les meilleurs gains de performances.

En effet, dans le cadre d’une optimisation globale, il convient de s’intéresser à la configuration du serveur web lui-même, qu’il s’agisse de la partie logicielle (configuration spécifique à l’application) ou matérielle (prendre un serveur plus puissant revient souvent moins cher que d’en optimiser la configuration logicielle), ou les deux (mettre en place un cluster de serveurs).

L’un des mécanismes les plus efficaces pour améliorer le temps de chargement de pages web est de réduire la quantité de requêtes au serveur par page chargée. Par exemple, une unique feuille de style par page et pour l’ensemble du site suffit amplement la plupart du temps, et bien souvent, plusieurs images distinctes peuvent être rassemblées en une seule, les paramètres de la feuille de style permettant de gérer leur affichage correct.

Un autre mécanisme vise à séparer le serveur de contenu dynamique (PHP, MySQL) du serveur de contenu statique (images, feuilles de style, etc.), sans oublier les mécanismes de cache côté client (ETag, Cache-Expires, etc.)

Comments