Si Wordpress est de loin la solution de publication de contenus la plus répandue, c’est à cause de son excellente conception de départ.
La méthodologie de sa conception et la souplesse de son framework en font une solution performante « out of the box ».
Ceci étant dit, on peut considérablement (mais alors considérablement) améliorer ses performances grâce à quelques trucs et plugins que je vais vous présenter ici.
Bien sûr, tout dépend de vos besoins effectifs… Tout le monde n’a pas des pics à 10 000 utilisateurs simultanés, qui commentent tous en même temps…
Mais la plupart de ces améliorations sont assez simples à paramétrer et apportent un réel gain de performance, ne serait ce que sur le temps de chargement des pages.
L’arme absolue : WP Supercache
A tout seigneur, tout honneur, commençons par le plugin qui va booster de manière la plus évidente l’affichage de vos pages et soulager votre serveur.
Le principe du cache est vieux comme le web : ne pas resservir un contenu déjà disponible, si celui ci ne change pas.
Le principe de WP Supercache est simple : vous permettre de servir des versions HTML statiques de vos pages dynamiques.
En effet, pour construire une page Wordpress fait un appel massif au php : recherche des informations dans la base de données, exécution des plugins, etc… Générer une page Wordpress, c’est faire appel au processeur de votre serveur.
Or vos pages ne changent pas si souvent, voire jamais (à l’exception des ajouts de commentaires). C’est encore plus vrai pour des pages statiques, de plus en plus fréquemment utilisées, Worpress ne cessant d’évoluer en CMS.
WP Supercache va vous permettre de servir votre contenu beaucoup plus vite. Le principe :
- L’utilisateur appelle une page non-cachée sur votre site.
- Wordpress construit la page avec son moteur PHP.
- WP Supercache la stocke sous forme statique (dans wp-content/cache)
- Un autre utilisateur demande la même page, WP SC lui sert la version statique
- Au bout du délai que vous avez fixé dans les préférences, la page statique est régénérée par le visiteur suivant.
- Et c’est reparti pour un tour…
Comme tout plugin Worpress, WP Supercache est ultra simple à déployer. Téléchargez le zip, décompressez et uploadez dans votre répertoire wp-content/plugins. Il ne vous reste plus qu’à l’activer dans votre interface d’administration.
Cependant, WP Supercache va vous demander quelques manips qui nécessitent des droits d’administration sur votre machine.
D’abord, il va vous falloir ajouter quelques lignes dans le fichier .htaccess à la racine de votre blog, ainsi que dans l’htaccess du répertoire wp-content/cache, créé par le plugin.
Ensuite, pour pouvoir créer ce dossier cache, WP Supercache va vous demander de régler les droits d’écriture de wp-content sur CHMOD 777 lors de la première exécution des préférences du plugin. Pensez bien à revenir à 755 après.
WP Supercache nécessite les modules Apache suivants : mod_mime, mod_headers et mod_expires. Pensez à les activer.
Si votre blog reçoit beaucoup de commentaires dans un délai court, activez l’option « cache rebuild » qui regénère une page statique à chaque consultation (l’utilisateur se voit servir une page statique, en arrière plan WP Supercache reconstruit une nouvelle page statique). Cette option diminue la performance de WP Supercache, mais permet d’avoir un blog toujours à jour.
Enfin, choisissez soigneusement la durée d’expiration du cache. Rien ne sert de la mettre trop loin dans le temps. 12h (43 200 secondes) semble un bon réglage pour débuter. De même, pensez à activer la compression gzip, qui va compresser vos pages (un peu comme mod_deflate, voir ci-dessous).
Les préférences de WP Supercache permettent bien d’autres réglages. N’hésitez pas à en parler dans les commentaires si vous avez des questions.
Apache (mod_deflate et mod_expires)
Ce paragraphe n’est valable que si vous utilisez Apache pour servir vos pages. Cependant, des modules équivalent existent pour tous les autres serveurs web du marché (IIS, lighttpd, etc…).
Apache donc, comme les autres serveurs web, peut se voir ajouter des fonctionnalités via des modules (un peu comme les plugins de Wordpress). Si certains sont forcement installés pour Wordpress comme php ou mysql, d’autres sont optionnels et s’avèrent utiles dans le cadre d’une recherche de performance.
Nous allons aborder deux modules qui vont vous aider à optimiser le fonctionnement de votre plateforme Wordpress.
Si vous utilisez Apache 2 sur Debian, rappellons la procédure pour activer un module :
- entrez la commande (en root) : a2enmod nom_du_module (par ex : a2enmode deflate)
- relancez le serveur Apache avec : /etc/init.d/apache2 restart
1 – mod_deflate : compression des données
La taille des fichiers envoyés par votre serveur peut être considérablement réduite grâce à la compression gzip proposée par mod_deflate.
Le principe est simple : les données sont compressées à la source par Apache (en gzip) puis le navigateur client les décompresse avant de les afficher.
L’avantage tient à la diminution du volume de données transitant par le réseau. Tous les navigateurs modernes gèrent la compression. Si le navigateur n’est pas compatible (cas rare), Apache servira la version non compressée.
Par defaut, mod_deflate va compresser tout ce qui sort de votre serveur, sans distinction.
Comme la compression consomme un peu de ressources, il n’est pas nécessaire de « re-compresser » des fichiers qui le sont déjà (fichiers zip, PDF, images jpeg…). Il vaut mieux limiter cette fonction aux fichiers textes, qui vont fortement en bénéficier (html, css, js, etc…).
Pour ce faire, ajouter ces lignes à votre fichier de configuration Apache (apache2.conf) (ou dans la configuration d’un vhost spécifique si nécessaire) :
SetOutputFilter DEFLATE
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ \
no-gzip dont-vary
SetEnvIfNoCase Request_URI \
\.(?:exe|t?gz|zip|bz2|sit|rar)$ \
no-gzip dont-vary
SetEnvIfNoCase Request_URI \.pdf$ no-gzip dont-vary
2 – mod_expires : gestion du cache navigateur
Toujours sur le principe de ne resservir que ce qui est nécessaire, tous les navigateurs modernes proposent une gestion de cache en local. Le fonctionnement est simple : votre serveur envoie, par exemple, une image au navigateur client. Celui ci la stocke et ne la retélécharge qu’au bout d’un temps donné.
Enfin tout ceci n’est possible que si votre serveur est équipé du module « expires », qui va permettre à Appache d’indiquer au navigateur de votre visiteur quels fichiers il doit stocker et pour combien de temps.
Une fois le module activé, il vous suffit d’ajouter cette déclaration dans votre .htaccess (à la racine de votre installation Wordpress) :
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 1 seconds"
ExpiresByType text/html "access plus 1 seconds"
ExpiresByType image/gif "access plus 1 weeks"
ExpiresByType image/jpeg "access plus 1 weeks"
ExpiresByType image/png "access plus 1 weeks"
ExpiresByType text/css "access plus 1 weeks"
ExpiresByType text/javascript "access plus 1 weeks"
ExpiresByType application/x-javascript "access plus 1 weeks"
ExpiresByType text/xml "access plus 1 weeks"
ExpiresByType text/.js "access plus 1 weeks"
</IfModule>
Comme vous l’aurez compris, vous pouvez régler une date d’expiration par type de fichier. Vous pouvez spécifier des délais en seconds, hours, days, weeks…
Comme vous le voyez je met une valeur minimale pour les fichiers HTML, puisque WP Supercache assure ce boulot en arrière plan.
Maîtriser le périmètre d’action de vos plugins
Wordpress dispose avec ses plugins d’une formidable capacité d’extension. Cependant ceux-ci peuvent s’avérer gourmands en ressources, ou ralentir vos pages par des appels extérieurs (type Twitter ou facebook).
Le plus souvent les plugins sont lancés sur l’ensemble de votre site. Or quel intérêt de charger un plugin de re-tweet, s’il n’y a aucun bouton re-tweet présent sur la page ?
Pour limiter le chargement des plugins sur certaines pages voici une fonction bien pratique, à ajouter au fichier functions.php de votre thème (exemple avec le plugin Retweet Anywhere) :
add_action( 'wp_print_scripts', 'my_deregister_javascript', 100 );
function my_deregister_javascript() {
if ( !(is_home() || is_single())) {
wp_deregister_script( 'retweet-anywhere' );
}
}
A noter que ce code peut s’adapter avec les marqueurs conditionnels de Wordpress (is_page, is_front_page, etc…) et marche pour tous les plugins qui utilisent la méthode wp_enqueue (tous les plugins bien développés quoi).
Pour connaître le nom de la (les) méthode(s) wp_enqueue du plugin concerné, ouvrez son fichier principal (généralement nom_du_plugin.php dans le dossier du plugin) et faites une recherche sur « wp_enqueue ».
Notez également que vous pouvez adapter cette méthode pour les styles chargés par les plugins. Changez simplement wp_print_scripts par wp_print_styles, et wp_deregister_script par wp_deregister_style, en utilisant les marqueurs wp_enqueue_style.
Minifier vos styles et votre javascript
Le principe de la minification est encore une fois assez simple : il s’agit de réduire la taille de vos fichiers de styles (css) et de vos scripts en supprimant les espaces et les retours à la ligne.
Généralement, le gain est de l’ordre de 25/30%. Bien sûr, cela dépend de votre façon d’agencer votre code, mais je connais peu de développeurs qui travaillent sur une seule ligne sans espaces
Encore une fois, un plugin bien pratique va s’occuper de ça pour nous : WP Minify.
Son installation n’appelle pas de commentaires particuliers.
Cependant, certains scripts externes (plugins notamment ou effets jQuery) ne supportent pas la minification (ou sont déjà minifiés).
Pour les exclure, il suffit d’ajouter le nom du fichier dans la liste d’exclusion de la page de préférences du plugin.
Pour être honnête, la minification ne vous apportera pas un gain de performance dément, mais c’est chic de le faire
Voilà pour les grandes mesures à prendre pour optimiser le moteur de votre Wordpress.
Pour aller plus loin, n’hésitez pas à benchmarker vos pages avec le module Page Speed pour Firebug, proposé par Google.
Ce module, intégré dans l’interface de Firebug, vous permet de mesurer le temps de chargement de vos pages et vous donne moult conseils d’optimisation. De plus il vous permet de vérifier que vos réglages fonctionnent bien.
Si vous avez appliqué les conseils ci-dessus, il ne devrait vous rester que des conseils triviaux (indiquer les tailles des images par exemple).
Voilà, j’espère que ces pistes vous aideront à améliorer les performances de votre installation Wordpress. N’hésitez pas à suggérer d’autres solutions ou à poser des questions dans les commentaires.