Performances : quel cache choisir ?

WordPress est un moteur de blog qui se base sur une base de données où est stockée le contenu, et d’une série de fichiers qui servent à mettre en page ce contenu. Par défaut, à chaque fois qu’un visiteur ouvre un article, le moteur pioche dans la base de données pour récupérer le texte, puis l’affiche en respectant les consignes données par les fichiers qui définissent la mise en page. Cette étape est assez lente, surtout si vous hébergez votre blog sur une offre mutualisé, mais il y a un moyen très simple de l’accélérer : le cache.

Vous l'avez ? (Môsieur J.)

Vous l’avez ? (Môsieur J.)

J’ai déjà évoqué dans un précédent article l’intérêt du cache, et une option pour le mettre en place sur le blog. Cela fait presque un an, et j’ai voulu vérifier si c’était la meilleure solution. Je me suis lancé dans un petit comparatif et j’ai testé une bonne dizaine de systèmes de cache.

WordPress ne manque jamais d’extensions, mais toutes ne se valent pas. C’est la même chose pour les caches et pour compliquer encore les choses, chaque extension a ses avantages et inconvénients. À défaut de dire quel est le meilleur cache, j’en ai sélectionné cinq qui sont, à mes yeux, les plus intéressants. Passage en revue…

Pourquoi un cache ?

Avant d’évoquer les différents systèmes de cache essayés, un mot sur le blog qui a servi de base pour mes tests. J’ai utilisé À voir et à manger, mon blog personnel qui a la particularité d’être assez lourd à charger avec ses images haute définition, et qui est hébergé sur un serveur mutualisé assez léger. Très lent à l’origine, j’ai appris au fil des années à l’optimiser pour obtenir un résultat assez convaincant.

Dans la configuration actuelle, les pages se chargent toutes en moins d’une seconde, même lorsqu’elles pèsent plus de 2 Mo. Et la page d’accueil se charge en 200 ou 300 ms, un excellent score. Certes, j’ai considérablement simplifié mon thème (on y reviendra dans un autre article), mais ces bonnes performances sont aussi liées au module de cache que j’ai installé sur le blog.

blog-a-voir-a-manger-cache

Pour soulager le serveur, je cherche à reposer au maximum sur des pages statiques. Contrairement à d’autres blogs, le mien est très simple : il n’y a aucun widget qui liste les derniers articles ou commentaires, il n’y a pas de modules sociaux, et je suis le seul à pouvoir créer un compte. Par ailleurs, j’ai bien des articles liés, mais ils sont chargés dynamiquement, en JavaScript. Dans cette configuration, je souhaite afficher au maximum des pages statiques qui ne changent jamais. Parmi ses objectifs, le cache doit être stocké longtemps : dans l’idéal, à moins de le vider manuellement, je devrais conserver les pages statiques indéfiniment.

J’ai été amené à tester plusieurs systèmes de cache, et j’ai découvert que tous ne se valaient pas, même si on obtenait facilement de bons résultats avec n’importe quelle extension. Au-delà des performances, c’est justement sur les options et les fonctions annexes qu’ils se distinguent, et la différence peut être sensible.

Je commencerai par recommander les deux modules qui me semblent les meilleurs dans la majorité des cas, avant d’évoquer d’autres alternatives à envisager.

WP-Rocket : le plus facile

Dans mon précédent article sur la question des caches, c’est lui qui avait retenu mon attention. Et pour cause, WP-Rocket est d’une simplicité déconcertante. Une fois installé, le plugin active son cache et optimise votre site et c’est à peu près tout.

wp-rocket

Je ne vais pas revenir en détail sur les points forts de cette extension, puisque je les avais déjà évoqués dans l’article que j’ai déjà publié à son sujet. Rappelons juste qu’il a une fonction exclusive : le préchargement intelligent du cache. Au lieu de tout charger, le module envoie un petit robot sur votre site pour charger la page d’accueil et tous les liens qui s’y trouvent. Ainsi, vos derniers articles, mais aussi les pages liées à votre menu par exemple, seront mis en cache immédiatement.

Autre point fort pour les plus gros sites, WP-Rocket intègre des outils d’optimisation qui allègent vraiment le poids des pages et optimisent le chargement. Les fichiers CSS et JavaScript peuvent être combinés pour diminuer le nombre de requêtes, on peut aussi réduire la taille de ces fichiers (« minification »), mais le plus spectaculaire pour un blog avec plein d’images comme le mien, c’est le lazyloading. Ce mécanisme ne charge les images que lorsqu’elles s’affichent à l’écran : sur un article de 2,5 Mo, on ne charge au début à peine 500 Ko.

wp-rocket-perfs

Le gain est énorme, mais j’ai fini par me lasser du lazyloading. Parfois, il fallait défiler rapidement pour avoir certaines images, et je trouve qu’il est pénible d’avoir des images qui se chargent encore pendant la lecture. Et puis j’ai obtenu des résultats similaires en termes de temps de chargement avec d’autres plugins de cache et la page complète, du coup l’intérêt de la fonction est limité dans mon cas.

Pour mon usage, WP-Rocket a des inconvénients, comme le fait de vider totalement le cache un petit peu trop souvent, par exemple quand on ajoute un mot-clé. Les concepteurs du module m’ont expliqué le faire pour les widgets qui peuvent se trouver sur toutes les pages, mais j’aurais aimé une option. Je dois noter toutefois qu’il y a une solution, qui implique de mettre les mains dans le cambouis, mais qui devrait bien fonctionner.

Cela dit, le vrai point fort de WP-Rocket, c’est qu’il est payant. Cela ressemble à un inconvénient, c’est vrai, mais c’est aussi un avantage pour une raison qui devient évidente à l’usage : le support technique. L’équipe derrière le module est disponible et elle a toujours répondu à mes questions, en français qui plus est. Quand on ne veut pas s’embêter avec des réglages compliqués, c’est incontestablement un avantage à considérer et si votre blog est important pour vous, vous devriez sans doute vous limiter à des extensions avec un support vraiment efficace, comme celle-ci.

WP Super Cache : le plus complet

WP Super Cache commence avec un avantage indéniable : il a été créé et il est maintenu par Automatic, l’entreprise derrière WordPress.com, derrière JetPack, bref l’entreprise qui contribue le plus au moteur de blog lui-même. C’est aussi le module le plus populaire avec plus de six millions de téléchargements : il ne peut pas être un mauvais choix.

Pour autant, ce n’est pas le plus simple et ses panneaux de configuration restent assez obscurs, d’autant qu’ils sont tous en anglais. WP Super Cache peut faire peur, incontestablement, mais vous auriez tort de vous arrêter à son interface datée et mal fichue. À condition de maîtriser l’anglais et de se documenter un minimum, on peut obtenir d’excellentes performances, tout particulièrement quand on veut, comme moi, un blog essentiellement statique.

wp-super-cache-reglages

La configuration de WP Super Cache pourrait faire l’objet d’un article dédié, mais voici rapidement la configuration que j’utilise sur mon blog :

  • Onglet avancé :
  • Utiliser le Mode Réécriture pour servir les fichiers de cache : le module modifie le fichier .htaccess pour afficher les fichiers du cache, c’est la méthode la plus rapide.
  • Dans la section « Divers », je coche les trois premières options, puis la reconstruction du cache (avant-dernière)
  • Dans la section « Avancé », je n’ai coché que l’option pour rafraîchir uniquement la page courante quand un commentaire est posté.
  • Onglet préchargement :
  • Cocher les deux premières cases.
  • Pour que le préchargement commence, bien penser à appuyer sur le bouton « Précharger le cache maintenant » pour lancer l’opération.

Avec cette configuration, le module va charger à l’avance tous les articles et toutes les pages d’archive du blog, pour ne servir que du cache aux visiteurs. Le chargement initial est assez long, mais il ne bloque pas le site, même sur un serveur aussi lent que le mien. En revanche, alors qu’il a très bien fonctionné pendant tous mes essais, le processus de préchargement se bloque systématiquement, peut-être une conséquence malheureuse de WordPress 4.0 qui vient de sortir.

super-cache-files

Ainsi réglé, WP Super Cache n’est intéressant que pour les blogs qui évoluent peu. Si vous avez du contenu qui doit se mettre à jour sur toutes les pages, il ne faut pas précharger le cache ou vous aurez à le refaire en permanence, ce qui risque de peser plus lourd sur le serveur.

Dans mon cas en revanche, c’est sans doute le meilleur choix, car le cache reste vraiment en place une fois généré. Le processus est loin d’être optimal, malheureusement : l’extension charge tous les articles, dans l’ordre de publication, du plus ancien au plus récent. Pour un blog qui a plusieurs années et plusieurs centaines d’articles, ce n’est pas le plus logique. Je préférerais un chargement dans l’autre sens (du plus récent au plus ancien) pour retrouver ce que fait déjà WP-Rocket avec son module de préchargement.

Pour le reste, une fois la configuration austère effectuée, on n’a plus vraiment à se soucier du module. WP Super Cache est particulièrement solide et fiable, ce qui est logique étant donné son importance. Le fait que les responsables de WordPress participent à son développement est vraiment un point fort à ne pas négliger au moment du choix. Ajoutons, pour les blogs qui visent l’international, l’intégration simplifiée à un CDN que je n’utilise pas du tout, mais qui peut servir.

Autres options

J’ai testé la plupart des modules de cache que j’ai pu trouver, et voici mon avis sur quelques-uns. WordPress ne manque pas de plugins et le cache ne fait pas exception, on s’y perd un peu parmi toutes les options. À noter que je n’ai pas intégré Hyper Cache, puisqu’il me donnait de très mauvais résultats. C’est étrange, puisqu’il est censé être parfait pour mon blog — son auteur indique qu’il est optimisé pour les hébergements mutualisés un peu légers —, mais je n’ai jamais réussi à passer sous la seconde au chargement de n’importe quelle page.

Pour la même raison, le célèbre W3 Total Cache ne se trouve finalement pas dans la sélection. C’est une référence, mais soit je n’ai pas réussi à le configurer correctement, soit il est trop lourd pour mon hébergement. Dans un cas comme dans l’autre, je ne pourrais pas le recommander l’esprit tranquille.

Quick Cache : le pédagogique

quick-cache

Quick Cache a fait le choix de la pédagogie, ainsi que de la simplicité. Il n’est pas loin d’être aussi complet qu’un WP Super Cache, mais ses options sont toutes très bien présentées et surtout, bien expliquées. Pour chaque réglage, on a plusieurs lignes d’explications détaillant ce qui se passera si on l’active, avec même quelques conseils pour savoir si on doit l’activer ou non.

quick-cache-reglages

La pédagogie va plus loin : Quick Cache explique ce qu’il fait et quand tout ou partie du cache est supprimé, on le sait : dans l’interface d’administration, on a une explication dans l’interface d’administration. Une transparence bienvenue, alors que tous les autres plugins testés ici sont opaques. En général, on ne sait pas ce qui se passe et de pouvoir l’apprendre est une bonne chose.

Quick Cache se veut le plus transparent possible : il affiche ce qu'il fait, y compris quand il travaille à l'arrière-plan.

Pour le reste, Quick Cache est un module de cache dans la norme côté vitesse, même si ce n’est pas le plus rapide du lot. Il est gratuit, mais la version professionnelle est intéressante : on peut précharger le cache, mieux gérer la vidange des fichiers (la version gratuite détruit un peu trop souvent la totalité des fichiers) et ajoute quelques fonctions, comme l’optimisation des fichiers de cache.

quick-cache-perfs

À noter que Quick Cache ne modifie pas le fichier .htaccess qui est la méthode utilisée par tous les autres modules de cache. C’est peut-être un argument en sa faveur, mais peut-être aussi l’explication de la vitesse légèrement moins bonne. Autre chose, on peut mettre en cache les URL avec une requête spécifique (par exemple les URL de recherche), ce qui est pratique dans certains cas (la recherche notamment), mais pas dans d’autres. Le spam exploite souvent ces URL et le cache perd un peu la tête… c’est celui qui a généré le plus de fichiers et de dossiers dans mon expérience.

quick-cache-fichiers

Je ne l’ai pas conservé pour cette raison, mais Quick Cache est assurément un module de cache à suivre. La version payante est la plus complète et à 15 $, elle n’est vraiment pas chère. Attention, le module n’est proposé qu’en anglais.

WP Fastest Cache : le rapide

wp-fastest-cache

WP Fastest Cache est censé être le plus rapide, comme son nom l’indique. Dans les faits, il est rapide, incontestablement, mais ce n’est pas forcément le plus rapide dans mes essais. S’il a sa place ici, c’est plutôt parce qu’il est traduit en français, qu’il sait rester simple et qu’il propose des fonctions assez avancées pour optimiser le site améliorer encore les performances.

fastest-perfs

En effet, on peut optimiser le HTML du cache généré en retirant tous les espaces vides pour gagner encore quelques millisecondes au chargement. On peut aussi combiner les feuilles de style et les fichiers JavaScript, mais comme je l’évoquais précédemment, ce n’est pas forcément la meilleure idée quand on en a peu, comme c’est le cas sur mon blog. Reste que toutes les options peuvent être utiles et qu’à l’exception du Lazyloading, il est aussi complet que WP-Rocket.

wp-fastest-cache-reglages

Par rapport à mon cahier des charges, ce module a le défaut de supprimer beaucoup trop fréquemment le cache. Il suffit de mettre à jour un article, pour que la totalité des fichiers soit supprimée. Il y a peu de d’options, ce qui est plutôt positif en soi, mais dans ce cas me gêne : je ne peux pas le configurer différemment.

Wordfence : l’original

wordfence

Wordfence n’est pas un plugin de cache, mais un système très complet de protection pour votre blog contre les attaques. Depuis la version 5 sortie il y a quelques mois, il intègre toutefois un module de cache. Que vient faire un système de cache dans un plugin de protection ? L’argument de ses concepteurs est qu’un blog mis en cache est beaucoup moins susceptible de tomber en cas d’attaque de type DDOS.

Peu importe l’argument, le moteur Falcon qui gère le cache est intéressant, car il adopte une stratégie différente de tous les autres modules. En tout cas, ses concepteurs mettent en avant une technologie censée être plus rapide que tous les autres. D’après mon expérience, ce n’est pas vraiment le cas, j’avais de très bons résultats sur mon blog, mais des résultats similaires aux autres.

wordfence-perfs

C’est assez logique, au fond : l’argument des créateurs de Wordfence, c’est que tout le cache est stocké dans le moins de sous-dossiers possibles. D’après eux, c’est ça qui explique les meilleures performances que l’on peut obtenir. Dans mon cas, cela ne change rien, puisque mes permaliens étant très simples (uniquement le nom de domaine suivi de l’identifiant de l’article), tous les autres caches stockent aussi mes articles sur un seul niveau.

Si vous utilisez des permaliens avec la date, vous aurez peut-être de meilleurs résultats, mais j’en doute un peu. D’ailleurs, Jean-Baptiste, l’un des développeurs de WP-Rocket, a fait quelques essais et n’a vu aucune différence significative. Peut-être que sur les plus gros blogs, la différence se fait sentir ?

wordfences-files

Quoi qu’il en soit, je n’ai pas retenu ce module de cache, principalement pour deux raisons :

  • Puisqu’il s’agit d’un plugin dédié à la sécurité du blog, il ajoute des dizaines de fonctions qui me sont inutiles et qui alourdissent par ailleurs l’installation. Ce module fait partie de ceux qui peuvent peser lourd sur un blog, surtout sur un hébergement mutualité, et je préfère rester léger. Par ailleurs, il ajoute une dizaine de tables à la base de données, ce qui n’est pas très utile quand on ne veut qu’un cache.
  • L’autre problème, dans mon cas, c’est que le cache est intégralement vidé beaucoup trop souvent. Même quand on ajoute un article, tout disparaît. Et puisqu’il n’est pas chargé à l’avance, il faut attendre un long moment avant de le constituer à nouveau : on perd l’intérêt même du cache.

Bilan

J’ai commencé cet article avec une idée en tête : après dix mois passés sans problèmes avec WP-Rocket, je voulais savoir où WordPress en était du côté des systèmes de cache. J’ai donc testé, pendant plusieurs jours, tous les modules de cache que je trouvais et qui était compatibles avec mon hébergement mutualisé — BatCache, utilisé par WordPress.com sur les plus gros blogs notamment, était ainsi hors jeu.

À l’heure des bilans, WP-Rocket est encore celui qui s’en tire le mieux dans la majorité des cas. Certes, il est payant, mais c’est aussi sa plus grande force : le support est réactif et disponible. Si vous ne voulez pas payer, ou si vous voulez un blog le plus statique possible, WP Super Cache est un meilleur choix, à condition de prendre le temps de le configurer correctement.

Dans mon cas, la situation idéale serait un site purement statique et il y a aussi une extension qui fait ça. Hélas, Really Static n’est pas seulement complexe à mettre en place, il n’a aussi aucun support et je n’ai jamais réussi à le mettre en place correctement. C’est peut-être une idée à creuser toutefois, d’autant qu’il a un intérêt évident côté sécurité : l’installation de WordPress est totalement masquée aux visiteurs.

really-static

Cette comparaison et ce bilan valent pour un blog comme À voir et à manger, c’est-à-dire un site surtout statique, avec relativement peu de mises à jour et aucun contenu dynamique. Selon vos besoins, il faudra peut-être opter pour une solution différente, mais WP-Rocket et WP Super Cache peuvent très bien s’en sortir dans ce cas, à condition de bien les configurer.

Dans tous les cas, installer un cache sur un blog WordPress est facile et tout le monde devrait le faire, tant le gain est intéressant.

Publicités

3 commentaires sur “Performances : quel cache choisir ?

  1. Hello,
    Je découvre ton blog avec beaucoup d’intérêt car j’ai moi-même dû travailler sur l’optimisation de quelques sites wordpress.
    J’ai découvert il y a quelques temps « Autoptimize » qui me semble être un bon compromis entre simplicité et efficacité. As-tu pu le tester ?
    Il m’a semblé très performant sur une installation simple. Je l’ai testé sur un site un peu plus complexe sur lequel j’ai dû faire quelques réglages dans la partie Javascript mais j’obtenais aussi d’assez bons résultats. Le seul problème que j’ai rencontré était au niveau du cache en lui même qui devenait assez lourd sur le site le plus complexe.

    J'aime

    1. Bonjour,

      Je le connais de nom, mais je n’ai jamais testé. Je préfère en rester à un module comme WP-Rocket, qui permet aussi d’optimiser les fichiers.

      Dans mon expérience, tous les modules de cache se valent plus ou moins. Par contre, la différence se creuse si on peut totalement court-circuiter WordPress. Avec WP-Rocket et Nginx, j’ai utilisé cette configuration et cela fonctionne parfaitement ! https://github.com/maximejobin/rocket-nginx

      J'aime

Répondre

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l'aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s