Yann "Bug" Dubois

Développeur WordPress freelance à Paris
Flux RSS

Accélérer WordPress – Partie 4 – Installer des caches

26 May 2009 Par : Yann Dubois Catégorie : Français, WordPress

1063886_carnival_mask credits sxc.hu / LUIZ RENATO D. COUTINHOInstaller des systèmes de cache pour les contenus dynamiques

Nous entrons ici dans le vif du sujet des optimisation “actives” qui vont permettre de substantiellement accroître les performances d’un blog sous WordPress, et au passage de le rendre invulnérable aux fortes charges et autres pics de trafic inattendus qui sont le lot d’un site web actif.

PHP eAccelerator

La technologie eAccelarator n’est pas spécifique à WordPress, et elle a déjà un historique d’utilisation important pour des applications PHP à forte charge qui en font un outil largement éprouvé pour améliorer les performances Web en général.

Le principe d’eAccelerator consiste à pré-construire le code PHP en effectuant toutes les inclusions de scripts, puis à le compiler et à le mettre en cache local (fichier statique sur disque dur) à la première utilisation. Les utilisateurs suivants bénéficient donc d’un gain de performances dû au fait que le code est déjà interprété et qu’il n’y a plus qu’à l’exécuter. Le gain principal vient certainement de l’allègement de la charge du serveur, qui n’a plus qu’à lire un fichier statique de taille très réduite au lieu d’avoir à rassembler puis parser une multitude de fichiers éparpillés sur le disque dur ou en mémoire à chaque sollicitation d’une page web dynamique (l’architecture très modulaire de Worpress tend à multiplier les fichiers “verbeux” à inclure dynamiquement).

Il existe aujourd’hui d’autres accélérateurs / pré-compilateurs d’opcode PHP (et notamment des solutions commerciales, dont celle de Zend), mais pour des raisons d’expérience personnelle j’ai favorisé ici l’installation sous Debian GNU/Linux de la solution d’opcache eAccelerator dont je connais la solidité “industrielle” à toute épreuve, pour l’avoir déjà expérimentée sur des sites à très forte charge (du genre 200 millions de page dynamiques vues par mois).

Une fois eAccelerator installé (sous Debian, en quelques minutes comme détaillé ici en français sur le Jonathan’s Blog), configuré et testé, l’installation optionnelle du Plugin eAccelerator pour WordPress de NeoSmart Technologies ou de son alternative par “The Murmatrons” permet en théorie de mutualiser le système de cache de code eAccelerator avec les systèmes de cache internes de WordPress (ou en tout cas d’optimiser la mise en cache sérialisé des variables internes de WordPress…). Bien que je ne sois pas certain de l’intérêt en termes de performances, j’ai tenté l’expérience, qui semble concluante avec le plugin NeoSmart (peut être grâce à un principe de “factorisation” des ressources utilisées) – Je n’ai pas encore testé la version alternative qui se dit encore plus efficace (à suivre…).

WP Super Cache

Une solution encore plus élégante que la précompilation du code PHP est de ne pas avoir à l’exécuter du tout; autrement dit, partout où c’est possible, de stocker sous forme de fichiers sur le disque dur le code XML de la page qui sera générée, qui pourra être réutilisé tel-quel, sans faire appel au serveur d’application PHP, tant que les données qui la composent n’auront pas changé. C’est Apache qui se contentera d’envoyer le fichier directement depuis le disque dur, ce qui est une opération infiniment plus légère que d’avoir à exécuter du code dynamique.

Le plugin WP Super Cache met en oeuvre cette technique de façon particulièrement efficace, en proposant 2 niveaux de cache (en fonction des fonctionnalités et de la compatibilité avec d’autres plugins utilisés par ailleurs sur le site), et en mobilisant toutes les possibilités d’optimisation les plus poussées (notamment en exploitant des règles de ré-écriture spécifiques qui permettent à Apache de fonctionner en autonomie avec les pages déjà en cache, sans aucun passage par le PHP et donc par WordPress).

Une fois WP Super Cache déployé (attention de bien aller jusqu’au bout de la configuration et de l’activation de toutes les options, notamment la modification du fichier .htaccess), le gain en charge du serveur est spectaculaire : tout se passe comme si celui-ci cessait presque totalement de travailler, puisque toute la partie PHP et MySql n’est quasiment plus sollicitée. Les ressources libérées contribuent dès lors à l’accélération d’autres processus, et notamment la génération des pages (non cachées) lors des “deep crawls” de Googlebot, ou la reconstruction des fichiers eAccelerator et WP Super Cache lors de la “sortie de cache” de certaines pages, inévitable lorsque le blog est mis à jour (soit par l’ajout d’un nouveau billet, soit par l’arrivée de nouveaux commentaires) – a noter d’ailleurs qu’une modération automatique efficace des commentaires est importante (via l’activation du plugin antispam Akismet par exemple), pour éviter que le spam de commentaires ne vienne inutilement faire expirer les caches en permanence, ce qui retirerait une partie du gain de performances des solutions proposées ci-dessus.

Les technologies de cache eAccelerator et WP Super Cache nous ont permis d’optimiser au maximum la gestion des contenus dynamiques (pages de contenu textuel du blog)… Il nous reste maintenant à nous occuper de l’optimisation de la diffusion des contenus dits “statiques”, c’est-à dire principalement les images, les feuilles de style css, et les scripts JavaScript qui composent les pages du site. C’est précisément l’objet de l’étape suivante !

Lire la suite : Optimiser la livraison des images

A lire également...

WordPress › Error

There has been a critical error on your website.

Learn more about debugging in WordPress.