Je profite de cette tribune pour vous poser une question :
Avez-vous déjà trouvé (ou mieux, réalisé) des études de cas ou études comparatives traitant de mise en cache pour un blogue roulant sous WordPress?
Je viens d’installer WP Super Cache sur quelques sites à fort trafic, la réponse côté serveur semble très bonne, mais je ne sais pas si cette solution est la plus optimale possible. Il y a tant d’alternatives (à commencer par DB Cache qui m’intrigue, ou encore W3 Total Cache qui paraît toutefois un peu instable) que je peine à me brancher définitivement.
Aussi, ces plugins comportent nombre de configurations (mise en cache de toutes les pages, uniquement pour les visiteurs non-connectés, définition de zones dynamiques, etc.) et je voulais chercher à savoir si des configurations optimales existent pour maximiser le bien-être de la machine autant que du visiteur.
Alors?
Une idée? Un témoignage? Une référence?
Voici un petit tutoriel pour expliquer comment – très simplement – mettre une page dynamique en cache pour en accélérer l’affichage et limiter les ressources côté serveur (apache et mysql).
Premièrement, suffit de créer deux fonctions. La première – debut_cache() – testera l’existence d’un fichier cache récent pour l’affichier, ou initialisera le buffer et débutera la mise en cache du contenu. La deuxième – fin_cache() – prend le contenu mis dans le buffer et va, suivant le besoin, écrire un fichier statique avec le contenu généré par le serveur qui sera alors repris par les requêtes suivants jusqu’à son expiration.
function debut_cache() { global $cachedFile; if(CACHE > 0) { if (!isset($_POST) || count($_POST) == 0) { $hash = md5(serialize($_GET) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']); $filename = basename($_SERVER['PHP_SELF'] . '.' . $_SERVER['HTTP_HOST'] . '.' . $hash . '.html'); if (file_exists(CACHE_DIR . $filename) AND (time() - filemtime(CACHE_DIR. $filename)) < CACHE) { readfile(CACHE_DIR . $filename); exit(); } else { $cachedFile = CACHE_DIR . $filename; ob_start(); } } else $cachedFile = false; } } function fin_cache() { global $cachedFile; if((CACHE > 0) AND $cachedFile) { $hoststr= getenv("HOSTNAME"); $host = explode (".", $hoststr); $page = ob_get_contents(); $page .= '<!-- Page mise en cache @ ' . date('Y-m-d H:i:s') . ' -->'; ob_end_flush(); if ($file = fopen($cachedFile, 'w')) { fwrite($file, $page); fclose($file); } } }
Juste avant de faire l’appel, il importe de définir deux variables (des constantes globales dans cet exemple).
//temps pour le cache (secondes)... 0 pour annuler la cache define('CACHE', 60*15); //15 min //dossier de cache define('CACHE_DIR', '/www/cache/');
Ensuite, on se lance :
//lancer la mise en cache debut_cache(); //--------------------------------------------- //afficher normalement votre page ici //elle sera mise dans le buffer //--------------------------------------------- //afficher le contenu (du buffer ou du fichier mis en cache) fin_cache();
Twitter @emilegirard
Mots-clefs
Ailleurs
- 100% Hockey
- AccesOWeb
- Alsacréations
- Canadiens de Montréal
- Carl Charest
- Carl-Frédéric De Celles
- Chrystian Guy
- Debbie Rouleau
- Dominic Arpin
- Eric Baillargeon
- Famille Enfants Parents
- Goudaille
- Histoires de Geek
- Il Blogue
- Influenceur – Blogue Tendance
- Martin Petit
- Michel Dumais
- Nicolas Langelier
- Patrick Lagacé
- PhotosMax
- Samuel Parent
- Sébstien Goulet
- Sportnographe
- Stéphane Guérin
- Stéphane Jose
- Tchuvak’s Life
- Yannick Manuri
- Ze Canada
