[Blog] Optimisez simplement les performances de WordPress

[Blog] Optimisez simplement les performances de WordPress

A force d’efforts et d’investissement personnel, votre blog commence à avoir du trafic. C’est la juste récompense de votre travail et c’est normal.
Cependant le succès ne vient généralement pas tout le temps tout seul. C’est à ce moment là que les problèmes de performance commencent à apparaître. Il suffit de faire la une d’un Digg-like est c’est la fin de votre serveur (à moins d’avoir un hébergement dédié très puissant).

Il faut absolument réagir car c’est l’image de marque de votre site qui est en jeu. Votre situation est fragile car si la situation perdure, cela peut très rapidement faire fuir une audience naissante.

En effet, de nombreuses études ont montré que la patience d’un internaute face à un site non essentiel pour lui, se limite à 7 secondes, ce qui est très court. Dans ce temps il faut inclure le temps de transport sur le réseau de la requête, le traitement coté serveur de celle-ci et le renvoi sur le réseau. Je mets de coté le temps de rendering par le navigateur.

Heureusement il existe de nombreuses solutions, dont certaines sont très simple à mettre en œuvre.
Dans la suite de ce billet je vais vous présenter 3 outils ou techniques permettant de soulager votre moteur de blog WordPress. C’est votre hébergeur qui va être content. Et l’internaute aussi …

1 – Le plugin WP-Super-Cache de Donncha O Caoimh [niveau:moyen, efficacité:excellente]
Ce plugin est sans doute le plus connu pour l’optimisation d’un blog sous WordPress. Il est aussi le plus radical.
En effet, sa technique est simple: il génère des fichiers HTML statiques depuis les pages dynamiques PHP. Ensuite, à chaque nouvelle requête d’une page cachée, le serveur Web retournera directement la page statique, sans faire appel ni à la base de données ni à l’interpréteur PHP. Ceci va énormément soulager votre système.

Tout ceci est très bon, mais vient avec un problème de taille. Tout le contenu dynamique appelé à changer souvent, comme les derniers commentaires, les articles récents, les tags, … ne seront pas affichés en temps réel, mais uniquement lors du prochain rafraichissement du cache.

Toutefois, ce cas reste limité car 99% des visiteurs lisent l’article avant tout. Les trois quarts ne commentent pas. De plus il est possible de régler la fréquence de rafraichissement du cache de manière à limité cet effet. Ici tout est affaire de compromis entre performance et pertinence.

WP-Super-Cache se trouve sur WordPress.org et le détail de son fonctionnement sur le site de l’auteur.

2 – WP-Widget-Cache [niveau:facile, efficacité:moyenne]
Ce plugin est sans doute l’un des plus méconnu dans la catégorie « performance » et pourtant il gagnerait à l’être.

Comme son nom l’indique, il va s’occuper de mettre en cache le contenu des widgets comme le nuage de tags, les catégories, les articles récents, les derniers commentaires, … au final pas mal de choses qui sont récurrentes sur les pages d’un blog. Après tout, puisque l’affichage est le même de page en page, pourquoi surcharger la machine avec des traitements redondants?

WP-Widget-Cache agit surtout au niveau de la base de données et évite bon nombre de requêtes courantes mais aussi pas mal de mise en page PHP. Le nuage de tags en est un exemple parfait. Le traitement est assez long et couteux.

L’efficacité n’est pas aussi bonne que WP-Super-Cache mais son fonctionnement est en revanche plus équilibré. En effet, il est possible de mettre en place des triggers (déclencheurs?) lors du changement du contenu du blog. Par exemple, vous ajoutez un nouveau billet. Dès lors votre widget « Articles récents » doit être mis à jour. Et bien c’est faisable avec WP-Widget-Cache. Sinon, il continuera à servir le résultat précédent.

Chaque widget est contrôlable indépendamment ce qui rends la solution très souple. Si pour certains widgets qui doivent s’adapter en permanence au contenu, vous ne souhaitez pas mettre de caching en place, indiquez simplement la valeur 0. Le widget ne sera pas du tout caché.

De plus, le contenu reste pertinent à tout moment. Pour moi c’est le meilleur compromis.
Sur les pages d’articles, je suis passé de plus de 50 requêtes à 24.

WP-Widget-Cache est téléchargeable sur WordPress.org et les explications sont sur le site des auteurs.

3 – Suppression des requêtes inutiles [niveau:initié, efficacité:moyenne]
La structure d’un blog est rarement très décalée avec une mise en page classique. il y a quasi-systématiquement un entête, un pied de page, au moins une colonne latérale, un lien vers le flux RSS, …

Il se trouve que dans WordPress, presque tous ces éléments se contrôlent depuis l’interface d’administration. Nous définissons le titre du blog et sa description, le chemin par défaut de stockage des images…

Pour les insérer dans les pages du blog, WordPress utilise un petit bout de code PHP. il s’agit généralement d’appel à une fonction proposée par l’API.

Par exemple pour le titre du blog, sa description et l’url de base, il faut utiliser:

< ?php bloginfo('name'); ?>
< ?php bloginfo('description'); ?>
< ?php bloginfo('url'); ?>

Mais au final, le nom de votre blog change-t-il souvent ? Personnellement non. Websourcing s’appelle Websourcing et ne changera pas de si tôt.

Alors pourquoi récupérer ces informations dynamiquement ? Effectivement c’est un non-sens.

L’optimisation ici va consister à remplacer les appels dynamiques par du texte 100% statique.
Par exemple:

<div class="blogtitle">
   <a href="<?php echo get_option('home'); ?>">< ?php bloginfo('name'); ?></a>
</div>
<div class="description">
   < ?php bloginfo('description'); ?>
</div>

sera avantageusement remplacé par:

<div class="blogtitle">
   <a href="http://www.monsite.com">Mon Site</a>
</div>
<div class="description">
   Mon site est super bien, c'est le meilleur du monde et il consomme peu.
</div>

Il en va de même pour des dizaines de requêtes. Et croyez moi, on sent la différence. Je l’ai fais sur d’autres sites et je suis en train de le faire pour Websourcing.

Si votre blog est stable, c’est une très bonne chose de passer à du statique. En plus cette technique est combinable (avec WP-Widget-Cache par exemple).

Une bonne technique serait de créer votre thème dans les règles de l’art, puis d’en faire une copie et de rendre un maximum de chose statique.

Voila j’espère que cet article vous permettra de gagner en performance et d’aller vers des sommets de trafic.
N’hésitez pas à faire des essais pour trouver le bon réglage et à le revoir en fonction de votre courbe d’audience.

Gardez WP-Super-Cache dans un coin mais pourquoi pas désactivé. Et si un jour vous faites la une d’un Digg-like, activez le. Pour les autres jours, WP-Widget-Cache et un bon nettoyage des appels récurrents suffiront.

Pour information je suis en train d’écrire un plugin pour faciliter le caching des appels récurrents. Le but est de pouvoir enregistrer certaines requêtes (comme < ?php bloginfo(‘description’); ?>) comme devant être cachées. Le tout depuis l’interface d’administration. Comme je manque de temps, cela ne devrait pas arriver tout de suite.

N’hésitez pas à réagir, à proposer des améliorations et à poser vos questions dans les commentaires.