Déchaînez la puissance de votre site WordPress avec le cache le plus rapide du monde !

Introduction : WordPress face au défi de la rapidité et constat de ses défaillances

WordPress, malgré sa popularité et sa flexibilité, affiche souvent des performances en deçà des attentes lorsqu’il s’agit de la vitesse de chargement des pages. La raison principale : il sollicite de façon excessive la base de données MySQL. Chaque fois qu’un utilisateur visite une page WordPress, un appel est fait à la base de données pour extraire les informations nécessaires à la construction de cette page. C’est particulièrement le cas lorsque le site est lourd en contenus ou bénéficie d’un trafic élevé. Ces appels répétitifs à la base de données ralentissent non seulement le temps de chargement des pages, mais ils alourdissent aussi considérablement le serveur. Ainsi, malgré ses nombreux avantages, WordPress peine à offrir une expérience utilisateur fluide et rapide, capable de répondre aux exigences du web d’aujourd’hui.

État des lieux des solutions de cache existantes pour WordPress

Plusieurs solutions de mise en cache sont actuellement disponibles sous forme de plugins pour WordPress. Celles-ci ont été conçues pour accélérer la vitesse de chargement des sites en stockant en cache les différentes pages et ressources du site. Néanmoins, leur efficacité laisse souvent à désirer. Le problème réside dans le fait que ces plugins interviennent bien après que WordPress a effectué un grand nombre d’appels à la base de données MySQL. L’information a donc déjà été traitée, retournée et stockée avant que le plugin de mise en cache puisse agir. Ceci étant fait à chaque requête, le processus freine de facto le temps de chargement, malgré la présence d’un plugin de mise en cache. De plus, l’usage de ces plugins peut générer un surcoût en termes de ressources serveur, rendant leur bénéfice net contestable dans certains cas.

La solution : Installer un cache avant toute action de WordPress

Installer un cache avant toute action de WordPress présente de nombreux avantages. Par dessus tout, cela permet d’éviter les appels MySql inutiles et répétitifs qui alourdissent le site. En procédant ainsi, on stocke en cache les pages déjà générées et on les ressert dès qu’elles sont demandées, évitant ainsi à WordPress de refaire les mêmes opérations de chargement encore et encore. Cela permet de gagner de précieuses millisecondes sur le temps de chargement, ce qui impacte directement l’expérience utilisateur, l’engagement et le référencement du site. De plus, préserver les ressources du serveur permet de repousser la nécessité d’upgrader à un hébergement plus coûteux. Enfin, cette méthode améliore la résilience du site, même en cas de pics de trafic. Bref, installer un cache en amont de WordPress offre des bénéfices mesurables pour l’optimisation de la performance du site.

Techniquement, comment mettre en place cette solution de cache ?

La première étape cruciale pour mettre en place cette solution de cache avant toute action de WordPress consiste à éditer le fichier index.php. Ce fichier, en tant que premier point de contact lors de chaque requête, est l’endroit idéal pour intégrer notre mécanisme de cache. L’objectif est de faire une vérification préalable : la page demandée est-elle déjà stockée dans le cache ou non ? Si la page est déjà en cache, nous la servons directement, bypassant tout le processus de génération de page de WordPress. Si la page n’est pas en cache, nous laissons WordPress la générer comme il le fait habituellement. Une fois générée, nous la stockons dans notre cache pour des requêtes ultérieures. En agissant ainsi, nous optimisons drastiquement le temps de chargement de nos pages et préservons les ressources de notre serveur.

Mise en place de la modification du fichier index.php

Le fichier index.php de votre WordPress devrait ressembler à ça :

/**
 * Front to the WordPress application. This file doesn't do anything, but loads
 * wp-blog-header.php which does and tells WordPress to load the theme.
 *
 * @package WordPress
 */

/**
 * Tells WordPress to load the WordPress theme and output it.
 *
 * @var bool
 */
define( 'WP_USE_THEMES', true );

/** Loads the WordPress Environment and Template */
require __DIR__ . '/wp-blog-header.php';

Étape 1 : Création d’un répertoire cache sur le root du site

Normalement, lorsque vous ouvrez votre ftp , l’arborescence devrait être sous la forme :

  • wp-admin
  • wp-content
  • wp-includes
  • Une liste de fichiers

Ajoutons maintenant un nouveau répertoire que nous nommerons cache ( vous pouvez pour des raisons de sécurité en choisir un autre cachemachin555 par exemple, mais dans ce cas , retenez le bien car vous devrez l’indiquer ci-dessous dans la modification du fichier index.php

Etape 2 : Modifier le fichier index.php

En tout début et avant toute autre ligne, nous ajoutons ce code :

//
// MOD CACHE BEGIN
//
// Récupérer l'url

$uri=$_SERVER['REQUEST_URI'];
$repertoirecache="cache";
$urit="./$repertoirecache/".str_replace("/","_",$uri).".html";

// l'index et category ne sont pas mise en cache 
if ((strpos($uri,'category')<=0) && (strlen($uri)>3)) {
	
	// le cache exite ? Si oui on le sert et terminé
	if(file_exists($urit)) {
	include($urit);	
	exit; } 
	// sinon on crée le cache
	else {
		ob_start();
	}
}

//
// FIN DU MOD CACHE BEGIN
//

Explications :

  • Ligne 1 : On récupère l’url qui est appelé par le client.
  • Ligne 2 : Le nom du dossier de cache, si vous avez crée par exemple cachemachin555 , remplacez le à la place de cache.
  • Ligne 3 : On déduit le fichier qui contient le cache
  • Ligne 4 : On exclus la production de la version cache pour les pages category et index. Pourquoi ? Parce que ces pages ne sont pas statiques, vous allez rajouter des articles, il faut donc les mettre à jour. Si vous avez des tags, il faudra aussi les exclure en ajoutant la condition.
  • Ligne 5 à 7 : Si le fichier cache existe, on le sort en html et c’est tout. Aucun autre appel via wordpress ne sera effectué.
  • Ligne 8 : Le cache n’est pas présent, on ouvre donc l’instance ob_start qui va au lieu de générer la page , la mettre en tampon. C’est une fonction méconnue de php.

Modifions aussi la fin du fichier index.php en ajoutant ce code mais cette fois çi après le code déjà présent de WordPress

//
// MOD CACHE END
//

// on sauvegarde le tampon et on affiche
$tampon = ob_get_contents();
$urit="./$repertoirecache/".str_replace("/","_",$uri).".html";
file_put_contents($urit, $tampon) ;
ob_end_clean();
echo $tampon ;

//
// FIN DU MODE CACHE END
//

Explications :

  • Ligne 9 : Le tampon crée à la place de la sortie directe est mis dans une variable.
  • Ligne 10 à 12 : On écrit le fichier cache pour les futures sorties qui elles seront directes html.
  • Ligne 13 : On affiche le tampon html parce que évidement même si y’a pas de mise en cache , faut quand même bien l’afficher la première fois à l’internaute ou le moteur.

Votre fichier index.php devrait donc ressembler à ça , au final:

<?php

//
// MOD CACHE BEGIN
//
// Récupérer l'url

$uri=$_SERVER['REQUEST_URI'];
$repertoirecache="cache";
$urit="./$repertoirecache/".str_replace("/","_",$uri).".html";

// l'index et category ne sont pas mise en cache 
if ((strpos($uri,'category')<=0) && (strlen($uri)>3)) {
	
	// le cache exite ? Si oui on le sert et terminé
	if(file_exists($urit)) {
	include($urit);	
	exit; } 
	// sinon on crée le cache
	else {
		ob_start();
	}
}

//
// FIN DU MOD CACHE BEGIN
//



/**
 * Front to the WordPress application. This file doesn't do anything, but loads
 * wp-blog-header.php which does and tells WordPress to load the theme.
 *
 * @package WordPress
 */

/**
 * Tells WordPress to load the WordPress theme and output it.
 *
 * @var bool
 */
define( 'WP_USE_THEMES', true );

/** Loads the WordPress Environment and Template */
require __DIR__ . '/wp-blog-header.php';

//
// MOD CACHE END
//

// on sauvegarde le tampon et on affiche
$tampon = ob_get_contents();
	$urit="./$repertoirecache/".str_replace("/","_",$uri).".html";
	file_put_contents($urit, $tampon) ; 
	ob_end_clean();
	echo $tampon ;

//
// FIN DU MODE CACHE END
//

Étape 3 : Mise en place

Rien de compliqué à ce stade, vous avez juste à uploader ce nouveau index.php sur votre ftp en remplacement de l’ancien

Résultats attendus une fois la modification en place

Avec cette modification apportée au fichier index.php, notre processus de mise en cache trouve tout son sens. Désormais, si une version d’un article est déjà stockée dans le cache, elle est directement et instantanément servie à l’internaute. Il n’y a donc aucun appel fait à la base de données MySQL. Cette démarche allège significativement le processus de chargement de la page, lui permettant d’apparaître plus rapidement sur l’écran de l’internaute. En déchargeant MySQL de requêtes systématiques et redondantes, on optimise considérablement les performances globales du site, tout en préservant les précieuses ressources de notre serveur. Cette simplicité apparente cache un réel gain en terme de performances et assure une meilleure résilience face à des pics de trafic.

Pistes d’améliorations pour une gestion optimale du cache

Je me limiterai , dans cet article à cette technique, simple à mettre en place, mais évidement elle est perfectible :

  • Les pages index , category et tags ne sont pas traités , quoi que rien ne vous empêche de mettre un plugin de cache pour ces pages. Elles sont plus rarement appelés logiquement, donc c’est déjà un gain significatif de traiter les pages articles.
  • Ainsi fait le cache d’une page article est définitif, je vous ferais un jour , un article pour comment purger le cache à intervalles réguliers, car évidement il peut y’avoir des mises à jour sur vos pages articles de temps en temps. Mais vous pouvez déjà de temps juste vider le répertoire de cache.
  • Cette solution n’est pas la panacée mais répond à des sites wordpress à très fort trafic sur les pages articles de façon simple et efficace.

Conclusion : Enjoy !

J’espère que cet article, vous sera d’une utilité et évidement si vous voulez apporter des suggestions de vos propres modifications du script ou si vous avez des questions, n’hésitez pas à mettre un commentaire. Et évidement partagez sur les réseaux sociaux business si vous aimez.

Laurent Prévost

Rédactrice spécialisée en édition de site. Formation de journaliste et passionnée par les nouvelles technologies, l'intelligence artificielle et la rédaction web.

Rédactrice spécialisée en édition de site. Formation de journaliste et passionnée par les nouvelles technologies, l’intelligence artificielle et la rédaction web.

2 réflexions au sujet de “Déchaînez la puissance de votre site WordPress avec le cache le plus rapide du monde !”

Laisser un commentaire