XCache pour accélérer WordPress (et le PHP de manière générale)

Je cherchais une manière d’améliorer les temps de réponse de ce blog. WP SuperCache est très efficace, mais il se désactive pour les utilisateurs qui ont mis un commentaire, et n’apporte rien sur la partie administration.

Et je suis tombé sur les « accélérateurs PHP« . Parmi ceux disponibles, j’ai retenu XCache.

xcache

En trois fois rien de temps, il m’a permis de faire afficher les pages presque 2 fois plus vite.

Sommaire

xcache_flowchart

(source : http://cerberusweb.com/book/latest/admin_guide/performance/xcache.html )

Installation et configuration

L’installation est enfantine :

apt-get install php5-xcache
service apache2 restart

La configuration se fait dans le fichier /etc/php5/mods-available/xcache.ini

J’ai simplement augmenté un peu la quantité de mémoire vive que je lui permets d’utiliser (64Mo au lieu de 16Mo), et lui ai indiqué qu’il pouvait utiliser les 2 cores de mon processeur

; to disable: xcache.size=0
; to enable : xcache.size=64M etc (any size > 0) and your system mmap allows
xcache.size  =                64M
; set to cpu count (cat /proc/cpuinfo |grep -c processor)
xcache.count =                 2

Test de performance

Sur l’édition d’un article, dans l’administration de WordPress :

  • Sans XCache : 3.5s
  • Avec XCache (premier accès) : 5.3s
  • Avec XCache (accès suivants) : 2s

Je mesure ici le temps de réponse de la requête HTTP qui demande la page HTML (en excluant toutes les ressources javascript, image etc), en mesurant avec l’outil Réseau des outils de développement Web de Firefox.

J’ai les mêmes ordres de grandeur sur l’affichage des articles, et toutes les applications PHP en général : une requête qui prenait 1000ms n’en prend plus que 550 à 750 (suivant le cas). Évidemment tout ça dépend de ce que fait votre PHP…

Donc oui, ça vaut clairement le coup dans mon cas de figure! On sent une amélioration notable de la navigation.

Quels inconvénients à cette solution?

D’abord une légère surconsommation mémoire à prendre en compte.

Ensuite, un ralentissement du premier accès (autour de +50% de temps de réponse). Si on ne règle pas correctement la quantité de mémoire allouée à XCache, on peut donc facilement dégrader les performances. D’où l’importance de monitorer l’utilisation mémoire de XCache :

Monitoring de XCache

Tout est dans la doc : http://xcache.lighttpd.net/wiki/InstallAdministration#HowtoInstallXCacheAdministrationPage

… mais elle semble adaptée à des versions récentes de XCache (3.x), alors qu’on a encore la version 2.x sur Debian Squeeze. J’ai trouvé mon bonheur sur http://www.tecmint.com/install-xcache-to-accelerate-and-optimize-php-performance/

Ca permet d’avoir facilement une page web qui indique les statistiques d’utilisation de XCache : nombre de hits/misses, utilisation de la mémoire, et même le détail par fichier PHP.

2 réflexions sur « XCache pour accélérer WordPress (et le PHP de manière générale) »

    1. De mon point de vue, c’est complémentaire.

      Le cache de pages statiques est beaucoup plus efficace (puisqu’on sert directement le contenu HTML sauvegardé, sans exécuter de PHP), mais ne peut être mis que sur les parties du site qui changent rarement.
      XCache (ou autre solution similaire) est intéressant pour tout ce qui tourne en PHP et qui ne génère pas une page HTML qui pourrait être mise en cache.

      Su ce blog, j’ai mis du cache sur la partie publique (via le plugin WP Super Cache, mais effectivement il y aurait d’autres méthodes type Varnish).
      Mais ça ne fonctionne pas sur la partie administration par exemple (logique). C’est là que XCache fait gagner en temps de réponse.
      D’autre part, le « WP SuperCache » que j’utilise ne sert plus les pages en cache à partir du moment où l’utilisateur a mis un commentaire (il met un cookie sur le navigateur). Probablement pour pouvoir lui indiquer que son commentaire va être modéré, par exemple. Donc ça me permet aussi d’améliorer un peu les temps de réponse pour les utilisateurs qui ont mis un commentaire.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *