Un système de cache est très pratique pour améliorer les performances générales de votre site, pour autant, il est parfois utile d’avoir des informations « fraiches », capables de passer outre le cache, comme un compteur de clics. Le fragment caching est là pour ça, et W3 Total Cache sait le gérer.
Le fragment caching n’est pas forcément quelque chose dont on a besoin sur son site. Dans le cas de 4h18, je n’ai pas d’informations qui nécessitent l’utilisation de cette technique.
Afficher une information en temps réel
J’ai dû y avoir recours pour l’un de mes clients, dont le trafic dépasse les 16.000 visiteurs unique par jour, avec un nombre de pages vues par jour qui fait tout péter : 600 milles !
Forcément, dans ces conditions assez extrêmes, il est impératif de booster WordPress. Je ne vais pas revenir sur l’éventail de technique à mettre en œuvre pour optimiser WordPress. Nous allons nous concentrer sur le fragment caching.
Dans le cas de mon client, ses pages affichent un compteur de pages vues, visibles pour tous les visiteurs. Le soucis, c’est qu’avec un plugin de cache, ce compteur n’est plus rafraichis en temps réel. Et l’internaute aura une information faussée.
C’est là que le fragment caching intervient. En faisant sortir la fonction du compteur du cache, nous avons la possibilité d’afficher un compteur qui se rafraichis à chaque rechargement de page, ce qui est son comportement normal.
Le découpage de la page
Dans le schéma ci-après, imaginons que je souhaite sortir du cache les blocs en vert.

Template d'utilisation du fragment caching
Partons du principe que j’ai des compteurs divers et variés qui doivent s’afficher dans le header et le footer de l’article. Avec système de cache, ces compteurs n’afficheront pas les information sen temps réel.
Nous allons donc cacher l’intégralité de la page puis sortir du cache notre header et notre footer. Ce que vous visualisez en gris sur le template représente les blocs qui vont être cachés.
Le code avec W3 Total Cache
Pour sortir une portion de code ou une page, W3 Total Cache met plusieurs options à notre disposition.
Exemple 1 :
<!-- mfunc any PHP code --><!-- /mfunc -->
Exemple 2 :
<!-- mfunc -->any PHP code<!-- /mfunc -->
Exemple 3 :
<!--MFUNC --> echo rand(); <!--/mfunc -->
Exemple 4 :
<!-- mclude path/to/file.php --><!-- /mclude -->
Exemple 5 :
<!-- mclude -->path/to/file.php<!-- /mclude -->
Dans mon cas, j’ai réussis à faire fonctionner ces 4 exemples uniquement sur Firefox. Avec Chrome et Internet Explorer 9, j’ai eu le droit à une belle erreur 500.
La seconde solution
W3 Total Cache met à notre disposition une série de fonctions, qui dans le cas présent ont parfaitement fonctionnées avec n’importe quel navigateur.
define('DONOTCACHEPAGE', true); Sortir une page donnée du cache.
define('DONOTCACHEDB', true); Désactiver le cache de base de données pour une page.
define('DONOTMINIFY', true); Désactiver la minification pour une page donné.
define('DONOTCDN', true); Désactiver le C.D.N pour une page donnée.
define('DONOTCACHCEOBJECT', true); Désactiver le cache d'objet pour une page donnée.
Par l’exemple
Dans mon fichier principal, j’utilise la fonction get_template_part de wordpress (qui est en fait la fonction include de php).
<?php get_template_part('templatecount')?>
Ensuite, dans mon fichier templatecount.php, je place ce code.
<?php
define('DONOTCACHEPAGE', true); //permet de passer outre les caches
hitcount_increasehit(); //fonction d'un plugin X
$hits = hitcount_gethits(); // fonction lié au plugin
echo $hits; //affichage du compteur
?>
J’avoue avoir une préférence pour cette solution, qui permet d’avoir un code plus lisible. De plus, le fait de déporter dans un autre fichier le code à devoir faire passer au travers du cache me semble être plus cohérent.
Ainsi, nous pouvons donc désormais afficher des informations en temps réel, tout en ayant un site avec un système de cache performant.
Ayez la partigitude, la cool attidude, c'est ça la bloguitude !



Béni sois-tu, c’est exactement ce que je cherchais à faire !!! (pas à cause du nombre de visites, mais parce que le cache empêche un plugin de bien fonctionner).
Merci !
Tiens moi au courant pour savoir si cela fonctionne bien.
Et bien c’est officiel : ça ne marche pas
En fait, le code s’affiche au lieu de s’exécuter
Excellent !!!!
Question : sur mon blog, je désire n’afficher les ADSense que pour les visiteurs venant des moteurs de recherche.
Mon idée est donc de détecter le referer, et d’afficher (ou pas) les ADSense en conséquence.
J’avais essayé les mfunc et compagnie, sans succès (la fameuse erreur 500, vu que je teste sous Chrome en général)
Du coup je vais p’têt refaire des essais
Question subsidiaire : si certains ADsense sont appelés via un shortcode, puis-je faire appel au fichier de template dans ce shortcode, sachant que ce dernier fait parti du contenu (caché) ?
Je sais pas si je suis clair ^_^
Quoi qu’il en soit, ça va déjà servir pour les pubs non liées aux articles
Ce que je ferais :
Je copie mes codes adsense dans des fichiers genre AD768.php AD350.php et ainsi de suite.
Puis, en utilisant la seconde solution, je les appels dans mes fichiers.
Vais regarder ça.
Par contre ça m’embête, car le couple WP Super Cache + DB Cache Reloaded Fix fonctionne super bien (meilleures mesures que W3 Total Cache)
Faut que j’y réfléchisse !
W3 total intègre un cache de Base lui aussi, et sur le quel tu peux également utiliser le fragment caching.
Tsss !!!
Utilises http://adserver.affiz.com/ c’est gratuit et méchamment efficace !
Idéal pour gérer des publicités en déporté, et pour avoir travaillé dans une régie publicitaire online c’est d’une qualité tout à fait comparable avec des tenors du marché
Je ne connaissais pas !
Comme quoi on a toujours des choses à apprendre
Pingback: Sites à connaitre | Pearltrees
Je n’arrive pas à supprimer le sitemap.xml de Total cache du coup il ne ce met plus a jour lorsque un nouvelle article est fraichement posté …Une idée à me donner s’il vous plait ?
Normalement, le cache se met à jour, ce qui inclus la maj du sitemap. Sinon, il faut voir sur le support du plugin.
Bonsoir Steph,
Tout d’abord bravo pour le blog, une source d’infos très riche et complète.
Je me permets d’écrire sur ce post pour demander de l’aide au sujet justement de W3 Total Cache.
Je possède un compteur sur mon site, mais depuis l’activation de W3TC, ce dernier ne se met plus à jour.
J’ai compris que l’on pouvait exclure des éléments du caching, par contre je n’y arrive pas avec mon compteur.
Pourrais-tu m’aider ?
Je t’en remercie d’avance.
Bonjour,
Non, je suis désolé, il faut te tourner vers le concepteur du plugin et son forum dédié.
Je ne suis plus en mesure d’assurer le support des extensions que je teste.
Bon courage, bonne continuation.
Bonsoir,
Superbe article, c’est bien expliqué et je comprends mieux le fragment caching,
Cependant dans mon cas je manque un peu de connaissances pour traiter mon problème que je vous expose rapidement
J’utilise dans mon header un login avec ajax (plugin « simple modal login » et un widget contenant le module « login with ajax » présent uniquement celui ci au milieu de ma page d’accueil (a la demande de mon client)
Les deux fonctionnent sans conflits quand on se trouve sur la page d’accueil.
Cependant avec w3 total cache, je me retrouve avec un login défaillant, je rentre les identifiants et me connecte mais normal je ne vois pas mon header changer ( mon compte etc…).
J’ai appris qu’avec le fragment caching je pouvais faire cela et est atterri sur votre site, mais je ne trouve pas la fonction nécessaire pour utiliser la technique que vous préconisez dans la solution 2.
Auriez vous une piste svp?
Merci infiniment
Rix