Tout savoir sur WordPress

Créer un système de cache sur WordPress

Apprenez à créer un système de cache statique pour optimiser le temps de chargements des pages, le référencement naturel et l’expérience utilisateur d’un site Internet.

Tout le monde le sait, le temps de chargement d’un site Internet peut considérablement améliorer son expérience utilisateur et son référencement naturel.

L’une des recommandations les plus utilisées pour optimiser la vitesse d’un site consiste à mettre en place un système de cache de fichiers statiques. Cela signifie que l’on fournit aux visiteurs un fichier préalablement généré au lieu d’exécuter les traitements PHP et les requêtes SQL à chaque chargement d’une page.

Pour cela, on utilise généralement des plugins WordPress tels que WP Super Cache ou W3 Total Cache. Ces usines à gaz sont très efficaces, mais on rencontre parfois quelques problèmes de purge des fichiers qui sont assez agaçants à la longue…

Pour éviter d’avoir des soucis de purge et obtenir des performances inégalables, il suffit d’intervenir avant le chargement de WordPress et de toutes ses API. En effet, en servant un fichier statique avant de lancer WordPress, on évite de nombreux traitements PHP et on diminue de manière importante le temps de chargement d’une page.

Dans ce tutoriel vidéo, nous allons apprendre à créer les bases d’un système de cache léger et performant. Après avoir généré un fichier HTML dont le contenu sera compressé via gzip, on servira aux prochains visiteurs le fichier optimisé avant même de faire appel à WordPress. Enfin, on purgera les fichiers de cache lors de la publication d’un nouvel article ou d’un nouveau commentaire.

Les fichiers sources du tuto contiennent l’intégralité du système de cache nommé WP Cache Machine. Il permet de gérer l’emsemble des cas de purge des fichiers statiques :

  • ajout/édition/suppression d’un article
  • ajout/édition/suppression d’un commentaire
  • ajout/édition/suppression d’un menu personnalisé
  • édition de l’ordre des widgets
  • ajout/édition/suppression d’un widget
  • mise à jour des permaliens
  • changement de thème

Pour vous démontrer la qualité et l’optimisation apportée par le script disponible en téléchargement, voici quelques sites utilisant WP Cache Machine :

Cet article a été mis à jour il y a 1220 jours - Il n'est peut être plus à jour !

Article écrit par Jonathan B.

Jonathan est le co-fondateur de WP Media, startup connue pour être l’auteur de WP Rocket et Imagify. Il est aussi co-organisateur du WordCamp Lyon et Paris.

272 Commentaires

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

  1. J’ai testé les trois liens …. punaise se sont des sites fusé, on à presque l’impression qu’ils vont sortir de l’écran ** rire **
    Cette astuce à l’air réellement bluffante. Petites questions, l’astuce remplace les plugin de cache ou ça peu être complémentaire?
    Même question pour des extensions serveur type memcached?
    Dernière question, dans quels cas l’utilisation de W3 Total cache (ou autre plugin de cache) est meilleur que cette astuce, et vice versa?

    Cordialement,
    Yannick

  2. Propre, léger, facile à mettre en oeuvre et tient toutes ses promesses.
    Un grand bravo pour cette vidéo !

    Cela dit, j’attends toujours ma métabox pour pouvoir manipuler le cache depuis l’admin ;)

  3. @Julio Potier : Ah non Julio, ce n’est pas un fake. Il y a quelques avantages de travailler à 1m50 de Jonathan (et d’avoir servi de cobaye d’ailleurs…) :)

  4. @shakup : fake, l’article est en ligne depuis 15h, tu as pas regardé ! XD
    Et pour la metabox, je reprendrais la phrase phare de Jo « à adapter » hahaha
    J’en suis à 1h moi, je fini ce soir et je commenterais ;)

  5. @Zetura : De rien.

    J’aurai aimé en faire un peu plus au niveau de la purge sur la vidéo, mais je n’avais plus la force après 2h de « tournage ».

    Pour les version mobiles, Sébastien a eu une très bonne idée : un dossier de cache par domaine !

  6. Un grand merci pour le partage de ton code, je mate le tuto ce soir dans le bain comme à mon habitude (je suis barge je sais) et met en pratique si j’en ai le niveau.

    J’ai pu constater les effets en avant première sur un de ces sites de demo, je suis sur le cul quand je vois que même avec plugin et serveur (quoi que par défaut) je n’arrive même pas à ça !

    Le temps de chargement est ma priorité en ce moment, mais j’ai encore rien mis en pratique, surtout depuis le teaser de Jonathan ;)

  7. @Yannick : L’astuce remplace les plugins tels que WP Super Cache et autres.

    Pour memcached, aucun problème non plus. On gère uniquement un cache statique :)

    Pour l’utilisation de W3 Total cache, c’est à faire quand il y a des bouts de page à ne pas mettre en cache. C’est la seule fonctionnalité qu’on ne peut pas faire avec notre système de cache.

  8. Sacré travail, merci !!! :)
    En revanche il est possible de configurer WP super Cache pour rafraîchir les pages de temps à autre ou ne pas mettre en cache tout simplement d’ailleurs c’est vraiment pas celui que j’aurais choisi pour parler des mauvais plugins de cache. Tout dépend de la manière de le configurer.

    Mais toutes les installations n’ont pas besoin de ce genre de plugins mastodontes, surtout si on ne sait pas les régler. Donc ton système est vraiment bien vu. J’ai testé en conditions réelles et ça roxx pas mal Chapeau !

  9. Je n’ai regardé que 30min pour l’instant, je trouve ça très bien simplement car le format vidéo permet d’expliquer plus en détail. L’inconvénient c’est que pour retrouver une phrase précise on s’éclate sur 1h30 mais c’est pas grave :p

    Je testerai ça dès que possible, c’est tout ce que j’aime, on rentre dans le technique et on a du code propre !

    Tu parles de changer de serveur si je ne sais plus quelle directive n’est pas activé, qu’en est – il d’un hebergeur qui ne veut pas activer pdo et qui refuse de base la fonction mail ? ^^

  10. @TweetPress: Merci pour le compliment ^^

    WP Super Cache est un bon plugin qui permet d’obtenir des bonnes perfs. C’est celui que j’utilisais avant de faire ce script. Par contre, son défaut est qu’il purge assez mal les Custom Post Types :/

    @Etienne : PDO c’est la vie ! Tout est dit =D

  11. Bon… retour d’expérience, juste après le passage de HTML 1.0 en 1.1 les dossiers se sont générés, et même très vite, comme tu as pu constater Jonathan dans le screen que je t’ai envoyé.

    Comme je le dis sur twitter, Cree1site viens de prendre un jet ^^ c’est simplement génial, et une fois le fichier en place, tout est fonctionnel.

    Juste merci Jonathan

  12. Et bien, je n’ai entendu que du bien de ton article.
    Je vais regarder ça ce soir et l’appliquer pour voir ça de plus près.
    Je me penche justement sur le temps de chargement de mes sites mais je n’ai jamais été convaincu des plugins de cache.

  13. Je confirme que : « ceci est une révolution ». J’ai juste une petite précision pour les adeptes du multisite PAR SOUS DOSSIERS comme moi, ne rajoutez pas les codes du htaccess qui se trouvent entre # BEGIN WordPress et # END WordPress ou vous aurez un conflit.

    Sinon c parfaitement compatible :)

  14. @NoeSting : Je n’ai pas testé avec un serveur qui utilise Varnish, mais j’ai envie d’anticipé la réponse et de dire que ça ne pose pas de problème.

    C’est un peu le même fonctionnement que Redis qui intervient avant de taper dans WP avec son système No SQL.

    Et là par contre, j’ai un retour d’expérience puisque GeekPress tourne sur Nginx + Varnish + Redis :)

  15. Super tuto bien expliqué, ça m’a fait du bien de remettre la main dans le php. Je n’ai pas encore essayé toutefois. Mais, je me pose quelques questions. Dans quelle mesure ce script est utile, si on utilise déjà un système de cache comme varnish ? Ça fonctionne avec ou ça crée des interférences ? Varnish remettra à son tour en cache les fichiers créés, non ?

  16. @Michaela : C’est compatible, aucun problème par rapport à un site responsive. Le fichier mis en cache est le même pour une version bureau ou mobile :)

  17. @Aurélien : Si tu as déjà le Gzip, ça ne fait rien puisque ce n’est pas le même type de compression. Je pense que tu parles de la compression gzip du navigateur et nous on utilise la compression gzip de PHP pour compresser les données. Ce sont deux choses différentes totalement compatibles :)

    Pour les thèmes en AJAX, je n’ai pas testé, mais dans la logique il ne doit pas avoir de problème. Pour les plugins, tu parles desquels ? S’il s’agit d’autres plugins de cache, il faut les supprimer :)

  18. Ca m’a l’air plus qu’intéressant mais j’ai des questions (forcément) :

    – si j’ai déjà le GZIP sur mon serveur, souci ou pas ?
    – peut-il y avoir des problèmes de compatibilité avec des thèmes utilisant Ajax ou des plugins ?

    Merci !

  19. Je vais me faire jeter mais je peux pas m’empêcher pardon à l’avance…

    @NoeSting : Je pense que tu peux y aller, car avec Varnish, les Caches s’évanouissent

  20. @Rodrogue Julio me l’a déjà faite avant, pas plus tard qu’il y a deux ou trois jours lorsque je lui disais que depuis que mon serveur est sous varnish, son plugin pour compter le nombre de lecture semble beaucoup moins efficace. Sinon, avec ce genre de cache, c’est sûr qu’il ne servirait du coup plus à rien :D D’ailleurs Quid des plugins dynamiques de WordPress ?

  21. @Jonathan Bien, justement les plugins qui ont besoin de calculer et de restituer des variables à chaque fois qu’il y a lecture de l’article, par exemple, comme un compteur (incrémentation, compte à rebours), un afficheur de news externe/flux RSS (si le cache à 6 mois, les news sont plus très fraîches…)

  22. @neosting : Je suis en traain de dev le refresh du cache toutes les X minutes/heures mais aussi la possibilité de refresh que des morceaux comme justement un widget, une phrase, en ajax forcément.
    Démo en cours ici : http://demo.boiteaweb.fr/bonjour-tout-le-monde-1.html : sidebar, l’heure est celle du cache puis elle est refresh par la vraie valeur actuelle du widget, je peux faire idem sur les commentaires pour m’eviter de purger le cache à chaque com ;p

  23. Ce débat est passionnant, c’est comme rentrée dans une boutique de vin, écouter attentivement le vendeur vanter son produit et se demander s’il parle d’un livre lorsqu’il nous parle de cépage ….
    perso vos interrogations et investigations sur l’AJAX et le dynamisme d’un site m’intéresse au plus haut point.
    Sur mon site web, j’ai un script qui géolocalise le visiteurs, et change le design du site en fonction de sa localisation, la météo d’ou il se trouve, la saison etc ce qui me pose des soucis lorsque je veux mettre en cache mon site (qui en à bien besoin).
    D’ou ma question, je pense que pour mon affaire le mieux c’est d’utiliser des transient (pas encore touché mais faut que je m’y mette), avec le script de cache, quid des transient?

    ps : Rodrigue
    citation : « Je vais me faire jeter mais je peux pas m’empêcher pardon à l’avance…
    @NoeSting : Je pense que tu peux y aller, car avec Varnish, les Caches s’évanouissent »
    Tu es un warrior.

  24. Très bonne nouvelle, très beau boulot.
    Avant de me fendre d’une nuit de codage, ou de 4,5euros, quelqu’un pourrait il préciser si cela fonctionne sur un mutualisé infomaniak? Car j’ai lu qu’il y avait quelques prérequis, comme PDO (je ne sais pas ce que c’est…) par exemple.

    Merci bien.

  25. @Tuiyo : PDO est installé par défaut sur tous les hébergeurs. Aucune raison pour que ça ne soit pas le cas chez infomaniak puisque c’est plus sécurisé pour tous les traitements MySQL :)

  26. @Jnceweb: C’est une version qui peut être mis en production :) Et s’il y a des modifications, j’envoi la version à jour aux personnes qui ont achetés les fichiers sources.

    @creation: Il y a un fichier de plugin et il faut aussi modifier le fichier htaccess + index.php (voir la vidéo pour plus d’informations à ce sujet ^^).

    Il y a un fichier readme.pdf qui indique l’installation à mettre en place ;)

    Et en cas de problème, je reste dispo !

  27. Tout fonctionne à merveille ! En effet ça booste l’index !
    D’ailleurs cela ne concerne que l’index du site ? j’ai bien le fichier index.html.gz qui s’est créé mais qu’en est-il des autres pages ?

    Merci
    Jonathan

  28. @Jnceweb : C’est toutes les pages qui sont concernées. Par contre, il ne faut pas être connecter à l’admin, sinon les fichiers ne sont pas générés. C’est le 1er visiteur d’une page en non connecté qui va générer le version cache.

  29. Salut,
    trés intéressant, je vais l’installer ce weekend :)
    Par contre tu parles de Redis (en com’), c’est plus efficace que le cache en fichier ?
    J’ai Mongo sur mon serveur… j’y pensais…

    Pour un site sans commentaire, à la limite on peu faire en local avec WP.. et mettre que des fichiers statiques sur le serveur non ? Avec synchro serveurlocal…

  30. @lipaonline: On peut obtenir quelque chose de plus puissant que rédis si on met le dossier dans la RAM du serveur. L’avantage de redis et qu’il génère lui même la génération des fichiers dans une base no SQL clé/valeur et que tout est stocké en RAM.

    Par contre, Redis sur un serveur mutualisé, il faut l’oublier ^^ Ca demande obligatoirement d’avoir un serveur dédié. Et la configuration d’un serveur dédié n’est pas donnée à tout le monde.

  31. Salut,

    voila c’est téléchargé :)

    – ici même j’ai remarqué (hier ce n’est plus le cas) un problème pour le nombre de commentaires indiqué ici et sur la page d’accueil (ou la page tuto.. je me souviens plus exactement..).

    – je viens de l’installer sur http://wpastuces.com/ , toutes les pages se « cachent » sauf la home :(

    suggestions :

    – lors de la purge, pourquoi ne pas en profiter pour générer les fichiers cache ? (genre home, article et categories)
    – créer un bouton « tout purger » , « tout générer » sur la home de l’admin (voir une page admin pour configurer les pages à générer/purger)
    – toutes les manipulations (htacces, index, http 1.0/1.1) pourrait être fait par le plugin non ?

  32. Après investigation :

    – j’avais renommé l’index.php en index-cache.php (et modifié le htaccess en conséquence) , pour la home je n’allais jamais sur cette index-cache.php.. mais directement sur index.php (de WP) , pour toutes les autres pages.. aucun soucis.. une idée ?

  33. @lipaonline: Tout d’abord, merci pour le téléchargement ^^

    Je vais te répondre point par point :)

    – Le problème des commentaires sur GeekPress est due à mauvaise purge de Redis. Je n’utilise pas ce script sur mon blog, j’ai une configuration un peu spécial. Je suis sur un serveur dédié qui tourne avec nginx (à la place d’Apache), varnish, redis et cloudflare.

    – La home semble bien en cache vu la rapidité à laquelle elle se charge :)

    – Pour toutes suggestions, cela fera certainement l’objet d’un nouveau script. Avec ce tuto et ses fichiers, je vous donne une base solide pour déjà mettre en place une solution simple et efficace sur votre site pour obtenir un résultat quasi inégalable avec les plugins de cache que l’on connait.

    – Aucune par rapport à ton problème sur la home.

  34. @jonathan : non non je parlais de la compression GZIP côté serveur (même si j’ai activé cela aussi côté navigateur de mémoire). ;)

    Faudra que je trouve le temps de tester alors.

    P.S : je reçois pas les commentaires par mail… suis-je le seul ?

  35. Bonjour,
    Je viens de suivre le tuto et de télécharger les fichiers.
    Pour l’instant je fais les tests sur un serveur Synology en interne.
    Tout semble parfait. Bravo pour ce travail.
    Deux questions.
    1 – Avant de le mettre sur mon site j’ai une crainte par rapport à mon formulaire de contact. J’ai dû bricoler 2 jours avec WP Super Cache. Mon formulaire ne marchait plus. J’ai essayé plein de réglages sans succès et comme WP Super Cache est une usine à gaz, j’ai laissé tomber et désinstallé cette extension.
    Donc je voudrais savoir si j’ai des précautions à prendre sur cette page de contact; ne pas la mettre en cache ou la laisser en cache? Je n’ose pas essayer en direct. Pour info j’utilise Contact Form 7 + Contact Form DB.
    2 – Je suis en multilingue avec WPML. Cela pose -t-il un problème ? Je ne pense pas, mais je préfère vous demander.
    Merci d’avance
    Pierre Schneider

  36. Je n’utilise pas WP mais pour ma culture générale j’ai tout regardé :)

    Pour index.php, si j’ai bien pigé : est-ce qu’un « echo $data » au lieu du premier require() (celui de if( $response 200 ) … else …) ne ferait pas économiser un paquet de requêtes ?

  37. Re ça à l’air d’aller mieux, j’ai vidé mon cache en local avec ccleaner, en relançant le site je pense avoir gagné 30% de vitesse.
    five-seasons.fr (si il y a moyen d’aller plus vite je suis preneur)

    Thanks

  38. Shit!! je pensais que tout était bon mais l’index s’affiche et pas les autres pages de chaque catégorie. s’affiche en Not Found. :(
    je remets à l’origine car je dois sortir, si on peut m’aider sur les pages en Not Found

    Merci

  39. @Creation: les pages not found ne sont pas créer par le script. Il faudrait m’indiquer l’adresse du site pour que je puisse voir l’erreur :)

    @Amaury : Qu’est-ce que tu entends par philosophie de WP ? (à part la modification du index.php, qui peut d’ailleurs être éviter).

    Pour devblog, c’est normal car le site est tenu par Benoit Mercusot qui est la personne avec qui je travaille sur un futur projet et qui a lancé l’idée.

  40. Je n’ai pas dit de zapper la vérif, juste de réutiliser ce qu’on a déjà.
    Mais en effet, un echo renvoie 200 à tous les coups. Donc (version presque longue) :

    $data = file_get_contents( ... ) ;
    $response = $http_response_header[0] ;
    
    if( $response 200 ) {
      ...
    }
    else {
      header( $response ) ;   // au moins ; ou boucle sur $http_response_header
      echo $data ;
      exit ;
    }

    Nan ?
    (Je me suis fait un test basique, ça marche pas mal. Pas de favicon.ico parasite en testant le 200 avec un strpos.)

  41. Hello,

    Je reviens pour faire un retour d’expèrience.

    J’ai donc téléchargé les fichiers, suivis la procédure pour mon site http://www.web-geek.fr et tout marche très bien, après une première visite sur une page, elle s’affiche très rapidement ensuite.

    Par contre, Google Analytics me sort un temps de chargement de 30 secondes !
    Une explication ?
    Quelqu’un à remarqué la même chose ?

  42. Bonsoir Jonathan,
    Je tiens à te féliciter pour cette astuce. Très bien vue !
    De mon point de vue, c’est la plus efficace des technique de mise en cache que j’ai rencontré sur le web.
    Jusque maintenant (pour tous sites confondus) le seul efficace que j’avais trouvé, c’était le cache brut. Mais l’idée de créer le cache sous forme de répertoire avec des index.html.gz me plait beaucoup ! Et est encore plus efficace.

    Au passage, ça fait plaisir aussi de découvrir un codeur sur Mac qui utilise Coda. ;)

    Tu dois très probablement avant tout, être du domaine du graphisme / webdesign j’imagine ?
    Enfin bravo pour tes compétences très riches que tu partages.

    Bonne continuation
    – iLuc –

  43. @Claire: J’ai testé la méthode et ça ne fonctionne pas chez moi. Quand je suis sur une page 404, je n’ai rien qui s’affiche :/

    @Arnaud: Perso, le temps de chargement sur GA m’a toujours donné des temps de merde et incohérent par rapport aux autres outils…

    @Limonads: Merci beaucoup pour les compliments ;)

    Et non, je ne suis pas graphiste d’origine, mais un 100% dév qui trouve plus son bonheur son mac que sur windaube windows.

  44. super article
    pour infos les images en « CSS background » sont mis en cache d’origine sans l’utilisation supplémentaire d’un plugins car les systèmes de cache tels que WP SuperCache stockent la page html une fois qu’elle a été complètement calculée côté serveur (avec les traitements PHP et autres).

    Cependant, je précise que ce genre de manipulation n’est utile que pour les Geeks et les personnes à gros traffic, genre presse-citron, et encore…

  45. « Cependant, je précise que ce genre de manipulation n’est utile que pour les Geeks et les personnes à gros traffic, genre presse-citron, et encore… »

    non.

  46. Bonjour,

    Quand un plugin est de qualité, cela ne me gène pas de payer.

    Mais avant, j’ai juste une question, est-ce qu’il y aura un suivi, mises à jour, comptabilité des futures WordPress 3,6, etc..

    Merci

  47. echo $data, la suite ^^
    Cette fois j’ai fait les choses bien, avec une install toute neuve.
    Ça, ça marche en cas de 200 et 404 (au moins chez moi) :

    if( ! file_exists( 'cache'  ) ) {
    
    	$data = file_get_contents( ... ) ;
    	$response = ... ;
    
    	if( $data !== false ) {
    		
    		if( $response 200 ) {
    			@mkdir( ... ) ;
    			file_put_contents( ... ) ;
    		}
    
    		echo $data ;
    		exit ;
    
    	}
    
    }
    
    else {
    
    	readgzfile( ... ) ;
    	exit ;
    
    }
    

    Par contre, ce sont peut-être mes paramétrages qui sont en cause, mais : en cas de redir 301, typiquement de « sans www » vers « avec www » ou l’inverse, ça peut mal finir. À vérifier.

  48. Télécharger et installé sur un petit blog (gooplus.fr)
    Par la même occasion, je me suis inspiré de ta méthode, pour améliorer le cache de Limonads.com -> ce n’est pas du wordpress. ;)

    Résultat -> 97 / 100 dans Google Insight. ^^

    J’ai procédé différemment, voici ce que j’ai fait.
    précédemment j’utilise une méthode de cache en dur, j’enregistrai dans un fichier le code « Minyfié » qui fonctionné très bien.
    Sur Gooplus, j’ai rencontré quelques bug ( code .gz qui s’affiche.. )

    Voici ce que j’ai fait pour Limonads.
    je minyfie le code, et ensuite je fait la compression gz ^

    Tout en haut en début des pages:

    if (isset($cache_plus))
    {	
    	$cachefile = 'cache/cache-'.basename($_SERVER['REQUEST_URI']).'.php';
    	$cachetime = (24 * 60 * 60 * 7);
    	
    	if (file_exists($cachefile) && time() - $cachetime < filemtime($cachefile)) {
        	// $contenu_string = file_get_contents($cachefile);
        	header( "Content-Encoding: gzip" );
    		include $cachefile;
    		exit;
    	}
    }
    
    ob_start();
    
    

    Et à la fin des pages, dans le footer,
    je n’ai pas utilisé l’extention .gz je me suis rendu compte que apparement ce n’est pas fiable, certaines pages sont mal enregistré = ERREUR 300
    Avec l’extention .php je n’ai pas de souci..

    Je crawl toutes les pages du site pour les mettre en cache avec -> integrity (Pour Mac) Lors du crawl, ça affiche le status, ce qui me permet de contrôler si ça Bug pour certaine page. Et donc là avec la méthode que j’utilise (.php) pas de bug. Et pour enregitsré le fichier le code est légérement différent.

    J’utilise -> ob_start();

    if($cachefile!=''){
    	
    		// CACHE PAGES
    		$cached = fopen($cachefile, 'w');
    		$html = compress(ob_get_contents());
    		fwrite($cached, gzencode($html, 9));
    		fclose($cached);
    		ob_end_flush(); // Send the output to the browser
    
    }

    J’ai vérifié de long en large,
    et maintenant ça semble très bien fonctionner. :)

    Ce qui m’a permis pour Limonads.com
    De passer de 93/100 à 97/100 dans Google Page Speed Insight

    Encore merci pour l’astuce !!… ;)
    Luc

  49. Excellente vidéo, je vais m’empresser de tester ça. C’est vrai que W3 Total Cache est pire qu’une usine à gaze quand on y réfléchi et malgré son intérêt certain, obtenir le même type de résultats via une solution « light » ça ne peu que donner l’eau à la bouche. Après voila, tout dépend du trafic…

  50. Bonjour, pas eu le temps de regarder la vidéo en entier, mais sur le point de tester. je vais d’abord faire toutes les évaluations « Avant » de long en large pour voir le « Après » :) Merci Jonathan de mettre toutes ces compétences au service de la communauté WordPress !

  51. @Claire : Comme je dis toujours : à tester ^^

    @Limonads: Je ne connaissait pas du tout l’application integrity, merci pour la découverte ! Moi qui cherchait un équivalement à Xenu sur mac depuis un bon moment :/

    @vtcreative: Même avec un fort traffic, la solution apportée par le script vaut le coup. Ici, on ne dépend pas du nombre de visiteurs. Il y a que le 1er qui fait le boulot pour les autres.

    @Simpliweb: De rien !

  52. @Jonathan: Intégrity, c’est un très bon petit logiciel, ( je ne connais pas xenu ) je l’utilise pour vérifier les liens de mon annuaire Limonads. Vérifier si il y a des liens cassés. Mais aussi, si je vide le cache, j’envoie un crawl Integrity pour remettre rapidement toutes les pages en cache. ^^ Pour éviter que Google tombe sur des pages longues à afficher. ^^ Puis dans le cas comme ici, où j’ai modifié le système de cache, ça m’a permis de faire les mises au point, et de repérer les pages mal enregistrées dans le cache, puis d’essayer de voir pourquoi.

  53. @eslovenie: Pour avoir testé sur un iPhone 3, je n’ai pas eu de problème. D’un point de général sur les mobiles, je ne sais pas si cela pose un problème ou non.

  54. @eslovenie et Jonathan: j’ai effectué un essai il y a quelques jours, avec une version mobile d’un site. Mais visiblement, le .gz n’est pas apprécié par le test validator w3c mobile.
    http://validator.w3.org/mobile/ ( on y trouve de bons conseilles )

    Par doute, je ne l’utilise pas.
    je ne sais pas si ça passe sur tout les navigateurs mobile. ( pas fait de recherche approfondis )

  55. Merci pour votre réponse j’ai encore quelques questions avant de sortir ma CB.
    J’utilise trois plugins pour optimiser mon site, est-ce qu’ils seront comptables ?
    Jetpack, pour la partie CDN des images
    WP Deferred Javascript, cela charge de façon asynchrone les scripts.
    Advanced lazy load, cela ne charge que les images visibles.
    Dernière question, comme je ne vais plus utiliser W3 Total Cache, vous me conseillez quoi comme plugin pour gérer memecached.
    Merci d’avance pour les réponses.

  56. @Limonads: Il me semble avoir lu quelque part qu’il ne fallait pas mettre en cache les versions mobiles. Ceci reste à confirmer, je suis loin d’être un expert en optimisation mobile.

    @comeback: Je n’ai pas fait de test avec vos différents plugins, je ne peux pas vous dire à 100% si cela est compatible ou non. Mais dans la logique, le script et vos plugins sont totalement indépendants et il ne doit pas avoir de problème entre eux. Donc je peux vous dire que c’est compatible à 99%, il reste toujours 1% de risques/doutes ^^

    Pour memcached, je ne sais pas quoi vous conseiller, j’utilise APC à la place de memcached.

  57. Hello

    Moi j’ai acheté le plugin de jonathan et tout va bien, aucun conflit avec les plug installé, j’ai gagné 25% de plus en vitesse.
    Pour répondre à comeback il ne faut pas tomber dans la paranoïa de tous les tests, autrement on ne s’en sort plus. regarde du coté des gros sites de vente par exemple, j’ai testé sur rueducommerce ton lien w3c mobile il tombe à 5% de compatibilité sur 40% pour mon site et ce n’est pas pour ça qu’ils sont mal placé en naturel sur pas mal de page.
    moi je le fais pour le confort des internautes d’optimiser mes pages, je ne fais pas tout pour Google. il faut savoir qu’aucun site ne sera placé 100% de toutes ses pages en 1ere page Google.
    il faut juste faire un compromis entre certaines pages de votre site bien remonté par Google et de l’autre de donner un maximum d’information claire et rapide à l’internaute qui viendra soit par google, facebook, twitter, annuaire, lien direct etc…

    a tt!

  58. Pour le cache mobile, ce qui cause visiblement problème c’est le gzip.
    Ce que j’ai fait pour une version mobile:
    – j’enregistre le code minyfié dans un fichier .php
    – je fais un include

    Par contre c’est pour version mobile indépendante: m.monsite.com
    la version bureau, elle je peux faire la compression gz

    J’ai vérifié et je surveille dans GG Analytics, cette méthode ne semble pas causer de problème.
    Les utilisateurs ont le même comportement. ( Il n’y en a pas qui quitte le site dès les premières secondes. ) Au juste ce n’est pas vraiment de la compression, c’est juste de la minyfication du code, et enregistrement dans un fichier séparé.

    Pour le gz, aillant vu le résultat négatif dans w3c mobile ( ERREUR CRITICAL )
    Je n’ai pas tenté l’expérience plus loin. ^^
    Il est fort probable que ça cause des soucis sur les mobiles.

  59. Bonjour,

    Merci beaucoup pour votre partage de cette solution de cache !

    C’est un système vraiment bien fichu et ultra rapide ! Comme quoi, on a pas toujours besoin de plugin pour avoir un résultat d’enfer ^^

    J’ai également pu découvrir les « mu-plugins » que je ne connaissait pas :)

    Un grand merci ! Super tuto

  60. Beau boulot ! Même si je dois reconnaître que cela semble un peu complexe. Cependant le système est vraiment bien fait et puis si je peu éviter les plugins c’est toujours mieux ! ;)

  61. J’ai religieusement suivi tes 2 heures de vidéo et j’avais tout fonctionnel, puis j’ai merdé parce que j’avais plusieurs clients ftp lancés puis j’ai tout perdu lol. Je t’ai acheté le script pour le tester en prod.
    Merci Jo

  62. @Jonathan: Pour limonads, comme indiqué plus au, je n’utilise pas ton script, + il est construit sur un annuaire maison.
    j’ai dans un premier temps essayé ta méthode, avec le: gzencode( $data, 9 )
    que je trouve très intéressante. Mais je me suis rendu compte que pour l’annuaire ça n’allait pas.
    J’ai donc cherché à faire différemment pour voir, c’est-à-dire en utilisant la méthode que j’utilise précédemment, + mythification, mais le gz je ne le mets pas directement dans le fichier, je fais la méthode traditionnelle:
    + j’utilise ob_star()
    + je ne fais pas /index.html.gz
    -> j’enregistre en md5() et dans le fichier ce n’est que du code minyfier. ( pas de gz )

    Si ça t’intéresse, que tu souhaites y regarder, tester, voir si c’est plus performant, et éventuellement l’adapter pour WP pour partager.
    je peux t’envoyer ça, te montrer le code.

    Pousser plus loin => parce qu’en m’inspirant de ce que tu as fait, je me suis rapproché de 97 dans un premier temps, ce qui m’a motivé à essayer de faire mieux, en effectuant des test, je me suis rendu compte que c’était possible de faire mieux.
    Puis hier 99, je me suis dit pour le Fun, mais « surtout pour voir si ça a un impact » sur le référencement, je vais tenter le 100. Mais là, pour le 99 – 100 j’ai joué sur le reste. ( Réduit les requêtes extérieures, compression css, js.. ect… )

    Honnêtement, je pense que cet overclock est inutile, d’atteindre 99/100 – 100/100
    Pour mois, dès lors que l’on a atteint 90, au-dessus de 90 ça n’a plus d’impact.
    c’est donc ce que je veux voir. Et je crois bien même, étant donné que je n’ai que la home qui est pied au planché, que Google considère ça comme de la suroptimisation, pour que la home ce positionne mieux. Donc je vais voir ça, comment le site ce comporte. Il est très probable que c’est inutile de chercher à atteindre un trop bon score. Qu’il vos mieux un 90 régulier sur l’ensemble du site, qu’un 99 que sur la home, et 94 sur les autres pages.

  63. Fonctionne bien comme tu as pu le voir.
    Il y a juste le fait d’installer un module qui ne flush pas le cache. En général, un module influe sur les fichiers chargés dans le front office donc j’ai du tout supprimer à la main via ftp pour ma part.

    Petite parenthèse, as-tu déjà testé memcached ? Mieux ? Pareil ? Complémentaire ?

  64. Bonjour,

    Si mon site fait des appels à une API pour mettre à jour le contenu quotidiennement (et donc dynamiquement), j’en déduis donc que le plugin ne me sera pas utile ?

    Existe-t-il un moyen quelconque pour ne pas mettre en cache une certaine partie du site ? Par exemple la sidebar (dont un bloc se met à jour de façon RANDOM, etc.), ou le footer.

    Merci d’avance.

  65. Bonjour Chris,

    Il y a des fonctions disponibles pour supprimer certains fichiers de cache (ou la totalité) dans les fichiers en téléchargement (wp-cache-machine.php). Il faut donc ajouter la fonction de votre choix au moment où vous faîte un appel à l’API.

    Pour le cache partiel, le script ne permet pas de gérer ce genre de cas.

  66. Merci pour l’info ! D’autant plus qu’il semblerait clairement que Google filtre et déclasse de plus en plus les sites lents et qui prennent une plombe à charger. Merci pour cette technique de mise en cache ;)

  67. Bonjour,
    Alors la je suis très heureux de mon premier achat et je n’en suis pas déçu, car j’ai supprimé deux extensions qui me permettai d’accélère mon site.
    Je me disais ce n’est pas possible et si grâce à votre script je tourne encore plus rapidement qu’avec mes deux extensions.

    Merci à vous

  68. @GeekPress J’utilisai db cache reloaded ainsi que hyper cache depuis longtemp j’ai refait un test de rapidité pour comparer et voici le résultat:

    Avant l’ajout de votre script:

    Temps total de chargement :5.496 secondes
    Nombre total d’éléments : 145 fichiers
    Taille totale des fichiers : 6590 Ko
    Nombre d’erreurs détectées : 0

    Après l’ajout de votre script :

    Temps total de chargement : 2.713 secondes
    Nombre total d’éléments : 88 fichiers
    Taille totale des fichier : 1323 Ko
    Nombre d’erreurs détectées : 0

    donc voila il n’y a pas photo le résultat et la

  69. Après avoir galéré pour installé memcache sur un serveur dédié ovh (non, je n’ai pas réussi), et oh vue des performances, je crois honnêtement que j’vais en parler à mon boss de ce petit script ^^.

  70. Bonjour,

    tout d’abord, je tiens à vous tirer mon chapeau pour le superbe travail que vous nous avez proposé
    c’était clair et très bien expliqué
    rien à redire

    seulement, avec gtmetric, je me retrouve avec une note de C système de cache activé et une note de A

    je trouve cela bizarre

    autre petit point embêtant : wp-touch et le système de vues/lecture ne fonctionnent plus! c’est dommage!

    Je vous présente une nouvelle fois mes compliments pour votre maîtrise de wordpress

  71. @davidin80 : Le script n’est pas compatible avec WP Touch et il ne permet pas d’avoir des parties dynamiques.

    Sinon, merci beaucoup pour les compliments, ils font plaisir ;)

  72. Salut Jonathan,

    j’essai de mettre le cache sur un CDN, mais je ne suis pas un expert de rewrite :(

    j’ai changé :

    RewriteRule ^(.*) /cache%{REQUEST_URI}index.html.gz [L]

    en

    RewriteRule ^(.*) http://cdn.domaine.com/cache%{REQUEST_URI}index.html.gz [L]

    ça marche pas, (le navigateur télécharge le gz..)

    une idée ?

  73. cad ? il y a déjà toutes les images, js, css.. je voulais y mettre aussi le gz… pourquoi cela ne sert à rien ?

    le navigateur a besoin de ce fichier en premier, plus il arrive vite mieux c’est non ?

  74. @lipaonline: Je parle du fichier .htaccess, il ne va chercher qu’un seul .gz, donc ça ne sert à rien de mettre les fichiers de cache dans un sous-domaine. Ca ne fera pas économiser une connexion DNS ou une requête HTTP. On sentira aucune différence !

  75. je parle d’un vrai CDN ( genre maxcdn ou OVH CDN), pas d’un simple sous domaine pour //iser les chargements… ça sert à rien non plus ?

  76. sur GTMetrix, quand je change de Londres -> Sao Paulo, je passe de 0.14s pour le chargement HTML à 0.50s… (le gz fait 6ko) ce qui fait une sacré augmentation…

    et sinon faut changer quoi à cette ligne pour tester ?

  77. @ lipaonli: Euh, le résultat vous étonne tant que ça ? Il me semble que le voyage France => Londres est plus court que France => Sao Paulo ;)

  78. oui justement.. si je mets le fichier sur un CDN, il va se rapprocher du visiteur.. c’est le but de celui-ci…

    je peut avoir le cache le + tip top du monde.. si j’ai un hébergeur pourri… ça changera pas grand chose… après avoir optimiser le site sur le serveur.. je passe à l’optimisation entre le visiteur et ce serveur…

  79. @lipaonline: Votre site est multi-lingue ? Si non, le CDN ne servira à rien. Un visiteur en france qui reçoit les fichiers d’un serveur français convient très bien.

    Maintenant, si vous n’êtes vraiment pas d’accord, libre à vous de mettre ça dans un CDN ;)

  80. oui mon site est bilingue, mais c’est surtout pour un autre que je dev actuellement que je teste sur celui la… bon je vais essayer de trouver comment modifier mon htaccess…

  81. Bonsoir,

    j’ai installer votre méthode de cache, ça marche du tonnerre !

    Par contre, lorsqu’une personne laisse un commentaire, elle ne sera plus desservie par les fichiers de cache en raison de la présence du cookie.
    Quelle est la durée de vie de ce cookie ? Il n’y aurait pas un moyen d’éviter ce problème, car sur un blog, comme celui-ci, on est souvent amener à commenter un article, donc au final on utilise que rarement les fichiers de cache…

  82. @Romain: De mémoire, la durée de vie du cookie est de 30 millions de secondes =D Mais comme pour Apple, il existe un hook pour ça. Lequel ? Là, je n’ai plus le nom en tête ;)

  83. Bonjour Jonathan,

    Au risque de par-être un peu bête, pourrais-tu m’expliquer brièvement le preg_match de l’index.php ? Je m’emmêle un peu les pinceaux :S

    (Par exemple, j’ai un site communautaire, faut-t-il que je met le wordpress_logged_in dans le preg_match ? C’est assez étrange car quand je le met il n’y a aucun fichier qui se crée dans le cache, et quand je l’enlève ça marche bien, je crois que je n’ai pas trop compris le sens de cet variable)

    Sinon bravo, bon tutoriel, continue comme ça ;-)

    Bonne journée,
    Tom.

  84. @TiDj: Si vous laissez wordpress_logged_in et que vous êtes connecté, cela est normal si le cache n’est pas généré. Le cookie wordpress_logged_in permet de définir si on doit fournir une version du site en cache ou non pour un membre connecté à votre site.

    Si vous laissez le cookie, cela signifie qu’un membre connecté ne bénéficiera pas de la version en cache du site et il ne pourra pas générer un fichier de cache.

  85. @Yoav: Non, il n’y a pas de mises à jour automatique. Il ne s’agit pas d’un plugin déposé sur le répertoire de WordPress, mais d’un script que je mets à disposition ^^

  86. Acheter le plugin et en cours de test sur un petit site. Je vous tiens au courant avant de passer en production :)

    Au passage, les mises à jour sont-elles automatiques ? Je veux dire, les reçoit-on comme avec les autres plugins de …

  87. Rebonjour, j’ai une petite question pratique : puis-je ajouter dans mon htaccess des paramètres pour le « leverage browser caching » des fichiers images ? Cela ne rentrera pas en conflit avec le WP Cache Machine ?

  88. Oui, c’est totalement indépendant. Le script permet de mettre en place un cache static qui est totalement indépendant du cache des navigateurs.

  89. Bonjour,

    Tout d’abord félicitations pour ton système ;) dont j’apprécie la simplicité et l’efficacité.
    Je l’ai déployé sur un serveur de dev sur un site client Fr/Uk dont le multilingue est géré par WPML sur 2 domaines distincts.
    J’observe selon la navigation que je fais et le basculement du site entre les 2 langues des problèmes au niveau de la mise en cache.
    Le serveur sert parfois des morceaux de page dans une langue et le reste dans l’autre (ex : menu version Uk, logo en version uk et le contenu de page en Fr)
    Vois tu une solution simple à m’apporter qui me permettrait de déployer ton script en production ?

    Merci.

  90. Bonjour Jonathan,

    J’ai acheté ton code source. Il fonctionne bien sur mon blog perso, nickel !

    Juste quelques questions :
    – Pourquoi avoir bloqué le cache des personnes identifiées ? Et comment l’enlever ?
    – Le code fonctionne-t-il sur des customs post-type ?
    – Si on a développé un plugin, peut-on mettre en cache les pages (souvent des customs post-type), les requête spéciales lors d’appel de pages spéciales

    Merci

  91. Hello !

    Je t’ai envoyé un mail suite aux problèmes que j’ai pour la mise en place de ce fameux système de cache. Apparemment je suis le seul qui a un problème, j’espère que tu auras peut-être quelques minutes à m’accorder ;)

  92. Merci Jonathan pour le kit (et pour le contact).
    Franchement il mérite bien les 4.5€, le tuto à l’intérieur de l’archive est on ne plus simple.

    Bilan: Mon site charge en 704ms (avant c’était 1.58s).

    J’ai hâte de découvrir WP Rocket.

    @Florent : Pour moi, ça fonctionne pour les customs type (produits Jigoshop).

  93. @Florent: On ne met pas en cache les utilisateurs connectés pour diverses raisons. Par exemple, si votre site propose un formulaire de connexion et que la personne se connecte, la page sera mis en cache et elle ne sera pas à jour avec les données de l’utilisateur. En général, une fois connecté, on affiche un « Bonjour Machin » avec des liens « Mon compte », etc. jJespère que mon exemple est clair.

    Le script fonctionne avec les CPT. Pas de problème de ce côté là.

    @Ady: On continue la conversation par mail :)

    @Twf: Merci, on a aussi hâte de vous faire découvrir WP Rocket ^^

  94. @Vincent: Il faut cliquer sur le bouton « Acheter les fichiers sources » qui est situé tout en haut de la sidebar (un gros bouton bleu ).

  95. Salut,
    votre script marche impec’ , sauf dans le GWT dans la rubrique « Temps de téléchargement d’une page (en millisecondes) » , il a doublé :(

    étrange non ?

  96. Bonjour Jonathan,

    Ce script utilise-t-il un .htaccess (qui n’est pas géré par un server IIS) ? Si oui, peux-t-on se passer du htaccess ?

    Cordialement.

  97. @lipaonline: Aucune idée. Google doit certainement se prendre une version non cache du site.

    @Alain: Ce script nécessite la modification du htaccess par défaut de WordPress dont on ne peut pas se passer.

    PS: la prochaine fois, merci d’utiliser KeywordLuv pour mettre une ancre optimisée…

  98. @pitav: Par défaut, le script ne prend pas en compte la compatibilité woocommerce. Pour cela, il faut modifier le code en ajoutant dans le check des cookies l’un des cookies ajoutés par woocommerce lorqu’un produit est inséré dans le panier.

  99. Beau tuto, impeccable.
    Je suis à la recherche des différents hooks pour pouvoir générer des actions appropriées à mon propre blog. Avez-vous un site/lien de référence ?
    D’avance merci.
    Eric.

  100. Bonjour,

    Je n’ai pas pris le temps de noter l’adresse email de contact après l’achat (c’est mal, je sais). Du coup, j’ai écrit à Jonathan Buttigieg via l’adresse disponible sur le site perso mais pas de réponse.
    Quel est le meilleur moyen de poser une question un peu détaillé sur ce plugin ? Via ces commentaires ? Un email particulier ?

    Merci.

  101. @Thomas: Bonjour,

    J’ai bien reçu vos messages. Je n’ai pas énormément de temps en ce moment pour répondre à tous mes mails. J’ai pris compte de votre problématique pour WP Rocket.

  102. @Jonathan :
    OK. Je désinstalle en attendant d’en savoir plus, dommage.

    Pour les lecteurs de ces commentaires (peut être l’un de vous sera inspiré ?), j’ai l’impression que le plugin (actuellement) pose souci avec la redirection du sous-domaine (vers www) quand celle-ci est gérée par WordPress. Du coup, il y a doublon entre le site en www et sans www.

  103. Bonjour Jonathan
    Voila mon site est responsive, si après ajout de ton système de cache la première personne qui visite mon site le fait avec un téléphone portable, est ce que les visiteurs suivant avec leur ordinateur vont voir la version portable ?

    Merci.

  104. @Bailly: Pour importe, le principe du Responsive Design est d’avoir la même structure HTML pour toutes les plateformes. Donc aucun problème de cache à prévoir ;)

  105. Bonjour jonathan,
    merci et bravo pour cet excellent tuto. j’ai quand même un gros souci:

    $data = file_get_contents('http://' . $_SERVER['HTTP_HOST']. $_SERVER['REQUEST_URI']);

    me renvoie toujours une erreur 500 (fichier inexistant).
    Par contre ça marche si je lui fournis une url externe :

    $data = file_get_contents('http://www.geekpress.fr/wordpress/tutoriel/systeme-cache-1851/');

    Aurais-tu une idée car là je sèche ;)
    Merci gille

  106. Jonathan, merci pour votre réponse. En effet j’ai téléchargé les sources et je n’ai plus cette erreur^^ Par contre, sur certaines pages j’ai un message Warning: Cannot modify header information – headers already sent by (output started at … ). J’utilise les plugins woo-commerce et e-member.
    Amicalement, gilles

  107. @gretiere: Je n’ai pas fait de test avec d’autres plugins comme WooCommerce ou WPML, donc je ne peux pas garantir la compatibilité.

  108. Salut Jonathan Buttigieg , j’ai acheté ton script que je trouve géant, j’ai certainement zappé un truc, le fichier index est bien placé à la racine, le htaccess modifié, wp-cache-machine.php, le dossier cache aussi, mais ce même dossier reste vide, le dossier mu-plugins est bien placé dans wp-content. Hébergement OVH. :( Si tu pourrais m’aiguiller cela saurait sympa. Bien à toi.

  109. @Pascal Gibert: Le dossier mu-plugins doit uniquement contenir le fichier wp-cache-machine.php (ou un autre si vous en avez déjà, mais de dossier de cache). Le dossier de cache doit etre à la racine de votre FTP en 755 ou 775.

    • @Pascal: Vous avez certainement oublié quelque chose dans le fichier .htaccess ou un problème de droit d’écriture. Si vous conseille de suivre la sortie de WP Rocket qui la version plugin de ce script. Cela vous évitera une perte de cheveux inutile :)

      http://wp-rocket.me

  110. @Jonathan : non maintenant c’est ok, il s’agissait d’un ancien dossier cache qui faisait conflit avec ton script! donc précautions d’usages avant d’installer ta petite bombe il est fortement conseillé, de désactiver l’ancien plugin de cache et surtout le supprimer :) Cordialement.

  111. Ahhhhhh… Ca me rend dingue! J’ai suivi pas à pas ton readme.pdf, mais le cache ne se génère pas. J’ai tenté l’installation sur plusieurs de mes sites WordPress et c’est toujours la même chose: aucun cache généré.

    J’imagine bien que le problème provient d’une chose que je n’aurais pas correctement suivie, mais laquelle.

    Questions à tout hasard:
    – Le dossier cache est à placer à la racine du site, ou la racine du FTP (j’ai tenté les 2), ou ailleurs?
    – Quand tu parles d’une modification du fichier .htaccess, c’est bien de celui du site en question dont tu parles? J’ai un autre .htaccess à la racine de mon serveur… je l’ai supprimé, puis remis pour y placer ton code (histoire de tester). Toujours rien.
    – Dans le readme, tu expliques bien que si le cache ne se génère pas il faudra changer « http 1.0 » pour placer « http 1.1 » dans index.php. Tu parles bien de cette ligne: if( $response == ‘HTTP/1.1 200 OK’ )? Je n’en vois pas d’autres de toute façon.

    Arfffff… C’est pas mon jour de chance, tout le monde réussi facilement et moi je suis bloqué. Je n’ai pas voulu attendre la sortie du plugin, n’étant pas sûr d’être parmi les 20 chanceux. Apparemment, ça ne me réussi pas :(

    Ps: Au delà de toute flatterie inutile, je pense que ton futur plugin mérite un super accueil de la part des sites d’actu même les plus lambdas. WordPress est utilisé à large échelle et tu apportes, tout simplement -et en toute décontraction ;)-, un gros power up pour l’expérience utilisateur sur internet… rien que ça. Mes sites n’abordent jamais la question de wordpress, mais là, je me suis senti obligé de parler ton WP Rocket et crois moi j’en reparlerai.

    Ps 2: J’ai bien reçu le mail indiquant 20 sites choisis pour la bêta. Une suggestion: pourquoi ne pas offrir (en plus) une licence aux gros sites utilisant WP? Je pense que les utilisateurs, autant que les éditeurs apprécieraient. Ce qui t’offrirait, je pense une bonne couverture de lancement. (Journaldugeek.com, frandroid.com, Korben, j’en passe…)

    Ps 3: Merci pour tout ce taf qui nous aide beaucoup.

  112. @Franck: Est-ce que tu as visité les sites en étant déconnecté ?

    Le dossier de cache est à placé à la racine du FTP. Après le script ne gère pas la condition où l’adresse du site est différente de l’adresse où se trouve le WordPress.

    Pour le fichier .htaccess, ça se passe aussi à la racine du FTP. C’est celui où on retrouve le code ajouté par WordPress pour la réécriture d’URL.

    PS: Merci pour les compliments et pour l’article sur ton blog :)

  113. Salut @Jonathan : c’est pas mon genre de cirer des pompes… Mais franchement tu as codé un truc simple, de fou, efficace et abordable en terme de prix, donc le cas échéant je te remercie chaleureusement et aussi pour la communauté des webmasters, j’écrirais cette semaine un billet sur mon agence presse, ce script et ton initiative en valent la peine! Voilà c’est dit. Bien à toi.

  114. Ok, je vois. Donc en gros, si mon ftp s’organise de la sorte: Racine>Site1>Wordpress etc. pour tous les sites… ça ne sera pas géré?

    Pour résumer, le .htaccess à la racine contient ton code et le fichier cache est placé à la racine… toujours rien. :(

    Sinon, oui, je suis passé en déconnecté, mais il y a déjà des milliers de personnes qui passent de manière déconnectées… j’ai tenté la manip sur 7 sites à fort trafic.

    Le top, pour un bourrin comme moi, serait d’avoir le plugin ;) lol

  115. @Pascal Gilbert: Merci beaucoup, ton commentaire fait très plaisir :)

    @Franck: Le script ne gère pas ce cas là. C’est pour cela que le plugin a été créé, afin de pouvoir gérer toutes les situations :)

  116. Merci Jonhatan pour les précisions. J’ai quand même installé le cache sur un site vitrine que j’ai créé (site en lien dans le com’). Le cache se charge bien :).

    Globalement, le site a pris 2,4 secondes de rapidité selon GT Metrix. Le site est en mutu chez 1&1… ce qui donne un temps de chargement de page de 5,6 secondes (c’est moins dégueu déjà). Ca reste énorme et je me demande si cela provient du thème en lui-même ou de 1&1 (ou des deux…).

    Pour le plugin, j’ai une question. Pour la licence illimitée, va t-on devoir prendre une licence supplémentaire pour chaque client (typiquement du site vitrine)?

  117. bonjour,

    merci pour toutes ces infos, pour quelqu’un comme moi qui commence à mettre les mains dans le code, c’est hyper utile et j’apprends plus en le faisant moi même qu’en installant un plugin.
    par contre je ne sais pas ou je dois faire les modif sur le fichier htaccess.
    j’ai mon installation WordPress dans un sous-répertoire et j’affiche le site en depuis la racine de mon ftp, j’ai donc deux fichiers htaccess (racine et sous-repertoire) et je ne sais pas dans lequel faire les modif pour installer le cache…

    voilà, la réponse doit être évidente, mais je suis novice … et j’aimerai bien accélérer le temps d’affichage de mon site. (avec wpsupercache je suis à 75% sur gtmetrix… peut surement mieux faire !!)
    merci pour la réponse.
    bonne journée !

  118. Bonsoir @mariez : concernant tes fichiers HTACCESS pour ton domaine principal suis juste la procédure indiqué, pour ton sous-répertoire n’oublies pas d’indiquer RewriteBase /tonrepertoire/ si tu veux un cache aussi dans ton sous-répertoire de devras aussi remplacer l’index.php, créer un dossier mu-plugins dans wp-content.

  119. HaHa super ! Ca marche du tonnerre ! Merci pour ce script !

    Par contre, j’ai réduit la durée de vie des cookies des commentateurs à 72h pour qu’ils puissent aussi profiter du cache.

    Voici le hook pour ceux que ça intéressent :

    /* Code pour réduire la durée de vie du cookie des commentateurs (cache)**/
    	add_filter('comment_cookie_lifetime', 'my_comment_cookie_lifetime'); 
    	function my_comment_cookie_lifetime($lifetime) { return 259200; }	
    /** FIN Code pour durée de vie du cookie des commentateurs (cache) **/
    
  120. Bonjour,

    J’ai suivi le readme : uploader le fichier .htaccess à la racine,
    créer un dossier cache, mis le fichier wp-cache-machine dans
    /wp-content/mu-plugins puis j’ai activé le plugin dans l’administration
    de mon blog wordpress mais j’ai l’impression que c’est pire qu’avant.

    Mon blog met beaucoup de temps à se charger.

    Une idée ?

  121. Bonjour, merci beaucoup pour ce tuto, j’ai acheté vos sources, mais comme j’ai une installation multisites, j’aimerais beaucoup svp savoir quelles modifications apportées pour prendre en compte les sous-domaines, il ne devrait pas y avoir un gros changement à faire ? Merci beaucoup !

  122. @ Kalil : est-ce que les fichiers de cache ont bien été créés ?

    @ FrEtienne: Non, pas de gestion multisite pour ce script. Pour cela, je vous conseille de suivre la sortie WP Rocket sera compatible multisite.

    • Vous visitez bien le site en étant déconnecté ? Car en étant connecté à l’administration, les fichiers de cache ne sont pas générés.

    • Si les fichiers de cache ne sont pas générés, c’est que vous avez un problème de droit.

  123. Bonjour Jonathan, j’ai réussi en 20 minutes à modifier votre système de cache pour prendre en compte le multisites avec différents noms de domaine ou sous-domaines : il suffit simplement de créer dynamiquement un sous-dossier à la racine du dossier cache, du nom du domaine de l’url, à l’aide de $_SERVER["HTTP_HOST"]. C’est tout bête, tout simple, ensuite, il suffit de changer dans le code tous les emplacements de création, de lecture ou de suppression des fichiers de cache en ajoutant le dossier du nom de domaine. Et dans le fichier .htaccess, pour ceux que ça intéresse il suffit de modifier ces 2 lignes pour ceci:

    RewriteCond %{DOCUMENT_ROOT}/cache/%{HTTP_HOST}%{REQUEST_URI}index.html.gz -f
    RewriteRule ^(.*) /cache/%{HTTP_HOST}%{REQUEST_URI}index.html.gz [L]
    
  124. Rebonjour, votre plugin de cache a fonctionné superbement pendant quelques heures, mais là pour une raison inconnu j’ai une erreur 418 : HTTP/1.1 418 I’m a teapot, donc les fichiers de cache ne s’écrivent plus… Avez-vous une idée de la source de ce problème ?

  125. Bonjour FrEtienne,

    Je suis intéressé par la solution que tu proposes pour gérer le multisite mais je bloque sur le premier point. Comment fait on pour « créer dynamiquement un sous-dossier à la racine du dossier cache, du nom du domaine de l’url, à l’aide de $_SERVER["HTTP_HOST"] ?
    La question est sans doute stupide mais je ne sais pas me servir du code $_SERVER["HTTP_HOST"].
    Si tu passes par là ou si quelqu’un peut éclairer ma lanterne, merci

  126. Je ne peux pas utiliser ce système que j’avais déjà imaginé parce que je viens de convertir tous mes sites au retina/HiDPI par un système reposant sur les cookies. Seuls les src changent… Donc je n’ai pas pu tester mais il me semble que dezipper les fichiers à chaque requête est une perte de performance également (peut-être pire que de lire 18ko au lieu de 3). À tester individuellement sur chaque serveur.
    La solution me semble plutôt du côté des navigateurs qui gèrent tous le dezippage à la volé. En gros on sert directement index.html.gz aux visiteurs.
    http://stackoverflow.com/questions/75482/how-can-i-pre-compress-files-with-mod-deflate-in-apache-2-x

  127. Bonjour ohan, la variable $_SERVER["HTTP_HOST"] sert à avoir le nom de domaine de l’url, donc on récupère le domaine et on l’ajoute dans tous les chemins pour écrire ou lire les fichiers de cache. Par exemple, pour raccourcir, je mets le domaine dans une variable comme ceci :
    $domaine=$_SERVER["HTTP_HOST"];
    Puis je rajoute la variable $domaine partout où c’est nécessaire, par exemple comme ceci :

     // Checking the existence of the cache file
        if( !file_exists( 'cache/' . $domaine .''. $_SERVER['REQUEST_URI'] . 'index.html.gz' ) ) { ...
    
  128. @Anthony: la réponse est dans votre question :)

    La différence est que Cache Machine est un « script » sans mis à jour et que WP Rocket est un plugin avec des mises à jour.

    Le script ne gère que le cache tandis que WP Rocket à plusieurs fonctionnalités (voir sur le site).

    De plus, lors d’une mise à jour de WordPress, Cache Machine sera écrasé car on modifie directement le fichier index.php de WP et il faudra donc remettre le contenu à chaque MAJ.

  129. J’ai un petit souci concernant l’ajout du plugin WP Super Cache ou W3 Total Cache. Est-il plus efficace d’ajouter un bout de code pour améliorer le temps de chargement? Ou l’ajout d’un plugin a le même effet que l’ajout d’un code?

  130. Bonjour, ce tutoriel est exactement ce que je recherche étant donné que je m’occupe d’un petit site internet et que je ne souhaite pas m’allourdir avec les plugins de cache. Seul problème je suis pas une pointe en développement/intégration et je stagne déjà. Quelle est l’utilité d’un vhost pour ce tutoriel ? Pouvez-vous me conseiller un bon tutoriel pour en créer un ?

    Merci en tout cas pour cette vidéo !

  131. Bonjour,
    Je viens d’installer votre script et après contrôle par outil comme gmetrix,j’ai l’impression que les images ne sont pas mises en cache!Pouvez-vous confirmer SVP.
    Et si c’est bien le cas,la procédure pour y parvenir
    merci
    cordialement.

  132. Bonjour,

    Entrain de refaire mon site internet sur WordPress, je m’interroge sur votre système de cache. Si j’ai bien compris on peut associer cache-machine et rocket pour son site.

    Premièrement je n’ai pas encore regarder la vidéo (pas eu le temps encore).

    N’étant pas du tout développeur, je me demande si c’est facile d’utiliser votre système cache machine ? et rocket ?
    Demande t-il de grosses compétences ?
    Est-ce que tout se gère à partir de WordPress où me faudra t-il d’autres soft ?
    Est-ce que le système de cache agit lorsqu’on est sur smartphone ?

    C’est tout pour mes interrogations.
    En tout cas félicitations pour les sites montrés en exemple, j’ai l’impression que votre système est top.

    Merci de vos réponses
    Bien cordialement

  133. @Laurent: Non, le script de WP Cache Machine ne peut pas être associé à WP Rocket ou tout autre système de cache. C’est soit l’un, soit l’autre :)

    Si vous n’êtes pas développeur, je vous recommande d’utiliser WP Rocket qui ne demande pas d’entrer le code source. Toute la configuration se fait à partir de l’administration en quelques secondes.

    L’avantage de WP Rocket est qu’il vous proposera une solution tout en un sans devoir installer d’autres plugins d’optimisation.

  134. Donc suite à ta réponse Jonathan, je viens d’acheter WP Rocket, c’est bluffant.

    Comme je disais je ne suis pas développeur, mais votre interface est simple, les vidéos d’explications impeccable. En plus c’est en français.

    En résultat, c’est environ 4 secondes de gagner pour le chargement de mon site (de 5,6 à 1,5 sec).

    Donc si vous souhaitez optimiser les performances de votre site, n’hésitez pas. Je recommande 1000 fois.

  135. Je viens de mettre en place WP Cache Machine suite à l’achat des fichiers sources. Le gain est impressionnant en terme de réactivité. Je ne sais plus si j’ai lu le message ici ou sur un autre post, mais effectivement le score Google Pagespeed est moins important, mais plus homogène sur l’ensemble des pages qu’avec W3tc. En revanche le ressenti lui est plus rapide.

    Avec Wp-Rocket, je vais encore améliorer cette effet en remplacement de Wp Cache Machine? Wp-Rocket utilise-t-il une méthode similaire de cache en plus des autres fonctionnalités comme le minify? C’est l’aspect tout en un qui m’attire (différer le javascript, robot pour créer le cache, et la possible future optimisation du poids d’image intégré à rocket).

  136. @nenesse: WP Rocket est en tout point différent de ce « script ». WP Cache Machine n’est pas un plugin, mais un script PHP qu’on installe soit même dans les différents fichiers.

    Pour les avantages de WP Rocket, je vous laisse le soin de lire toutes les fonctionnalités présentes sur le site officiel.

    Le seul point commun entre le script WP Cache Machin et le plugin WP Rocket est qu’ils permettent d’avoir un système de cache statique, et encore… En effet, la partie de gestion de cache de WP Rocket est beaucoup plus poussé.

    Ce script est juste les prémices du plugin :)

  137. Bonjour Jonathan,

    Le script est compatible avec WP 3.8 ? Depuis la mise à jour de mon site vers la dernière version, le cache ne semble plus fonctionner (j’ai bien entendu remis index.php et .htaccess du script).

    Une idée ?

    Merci

  138. @Florent: Le script est compatible quelque soit la version de WP. L’inconvénient est qu’à chaque mise à jour de WP, le fichier index.php sera écrasé.

  139. Oui, je pense avoir tout fait correctement. Je vais encore vérifier.

    C’est bien que me dise que c’est compatible toute version. Au moins je ne cherche pas de bug du côté du script.

    Je donnerais des nouvelles dès que j’aurais trouvé mon erreur;

  140. Ok… j’ai trouvé !

    J’ai changé le HTTP/1.0 200 OK en HTTP/1.1 200 OK ….. Plopp

    Mais, ce qui est chelou c’est que j’avais garder mon index.php de côté pour être sûr que cela fonctionne…

    A bientôt

  141. Bonjour

    Avant de tester le plugin de cache en ayant télécharger les sources, j’aimerais savoir s’il y a une action particulière à faire (à part l’installer via installation extension. J’ai lu plus haut qu’il n’y a pas à attendre de bons chiffres sur GTmetrics, ok ? Est-ce compatible avec autre plugin comme W3 cache ou redondant ?
    Merci

  142. @dcaba: Toute la démarche est indiqué dans le fichier readme. Ce script n’est pas compatible avec un plugin de cache. Double emploi = double problème :)

  143. Bonjour Jonathan, j’ai installé ton script hier, c’est une bonne idée.

    Pour les mises à jours, pourquoi ne pas utiliser systématiquement index-cache-machine.php comme tu le suggère ?
    Pourquoi ne pas mettre une condition « if( $response == ‘HTTP/1.0 200 OK’ || $response == ‘HTTP/1.1 200 OK’ ) » Pour vérifier directement les 2 ?

    J’ai testé sur du woocommerce, ça pause quelques soucis sans surprise avec le panier.
    Si tu as un début de réflexion à ce niveau ça m’intéresse, si non tempi, va falloir que je m’y mette :D
    Vu que c’est pour mon site c’est pas prêt d’être développé, mais si je le fait, je te ferais passer ça.

    Quoi qu’il en soit le résultat est très bon alors pour les indécis, n’hésitez pas à acheter les sources, ça revient à payer une bière à Jonathan et il la mérite je trouve.

  144. @raphy1401: J’ai apporté la réponse dans mon commentaire du 7 décembre 2013 à 19 h 26 min.

    @Michel: Bonne remarque pour la condition sur le protocol.

  145. Bonsoir, alors pour un woocommerce, je propose de tester les cookies : woocommerce_cart_hash et woocommerce_items_in_cart qui sont les deux cas de figure que j’ai trouvé où un client peut avoir besoin qu’une page ne soit pas en cache, sans pour autant être loggé => par exemple si on rempli le panier avant de s’être identifié.

    Donc dans le htaccess on rajoute :
    RewriteCond %{HTTP:Cookie} !^.*(woocommerce_cart_hash|woocommerce_items_in_cart).*$

    et dans index.php on rajoute la même chose :
    && !preg_match( ‘/(woocommerce_cart_hash|woocommerce_items_in_cart)/’, var_export( $_COOKIE , true ) )

    Bonne soirée.

  146. Salut,

    Tout d’abord un très grand bravo pour ce tuto. J’ai acheté les fichiers et BIM !
    La classe.
    Sauf…bah oui y’a toujours un sauf (ou un mais ça dépend ;-) )
    J’ai créé une page avec 3 colonnes renvoyant vers la page contact et son formulaire : pas moyen d’afficher cette dernière, je reste bloqué sur la page et sont rajoutés dans l’url des : PHPSESSID= …….

    Une idée ?

    @+

  147. Bonjour,
    J’ai suivit avec attention votre tuto et je bloque à un moment. Je suis dans le fichier .htaccess et j’ai bien mis le code comme le votre mais j’ai l’impression qui ne rentre pas dans les conditions car il ne propose pas de téléchargement de fichier au format de gz. Il charge la page simplement, qui d’ailleurs n’est pas optimisé.

    Du coup voici ce que j’ai écrit :

    RewriteEngine On
    RewriteBase /blog/
    RewriteCond %{REQUEST_METHOD} !=POST
    RewriteCond %{QUERY_STRING} !.*=.*
    RewriteCond %{HTTP:Cookie} !^.*(comment_author_|wordpress_logged_in|wp-postpass_).*$
    RewriteCond %{HTTP:Accept-Encoding} gzip
    RewriteCond %{HTTPS} !=on
    RewriteCond %{DOCUMENT_ROOT}/cache%{REQUEST_URI}index.html.gz -f
    RewriteRule ^(.*) /cache%{REQUEST_URI}index.html.gz [L]
    

    une chose importante à noter l’adresse url du blog est http://www.monsite.fr/blog car l’url http://www.monsite.fr tombe sur mon site principal (qui n’est pas un wordress)

    Une idée pour corriger ce problème.
    Merci par avance

  148. @Jonathan Buttigieg: Ça fait maintenant 7 mois que je me sers de ton système de cache et je dois dire que j’en suis vraiment très content.
    Depuis qu’il est en place, je n’ai plus eu besoin de toucher au code. Mon site web est toujours aussi performant et sincèrement, je ne regrette pas mon achat.

    Bravo à toi et merci !

  149. Bonjour,

    Peut on utiliser le code :

    && isset( $_SERVER['HTTP_USER_AGENT'], 'iPhone') === false // Dont' cache iPhone !
    && isset( $_SERVER['HTTP_USER_AGENT'], 'Android') === false // Dont' cache Android !
    

    Pour empêcher le cache pour les les thèmes reponsive

  150. bonjour,

    merci pour ce tutoriel.

    Est-ce que la création d’un cache pour wordpress est utile pour les sites à faible trafic ? Parce que j’imagine que c’est pour économiser des ressources serveur. Comment peut-on estimer les ressources estimées par un blog wordpress pour savoir s’il est utile de faire la manipulation ci-dessus ?

    Merci par avance
    Julie

  151. « Est-ce que la création d’un cache pour wordpress est utile pour les sites à faible trafic ?  »

    C’est utile pour n’importe quel site quelque soit le trafic. On améliore l’expérience utilisateur, donc oui c’est toujours important et utile.

  152. Hello Jonathan.

    Je viens de télécharger ton fichier de cache pour WP et je n’arrive pas à le faire fonctionner.
    WP fonctionne toujours bien, mais rien dans le rep « cache ».
    J’ai contrôlé l’en tête et c’est bien en HTTP 1.0.
    La version de WP et la dernière (3.9).
    Je suis derrière un proxy (NGINX)

    Aurait tu une piste ?

    Amicalement,

  153. @Grincheux: Je n’ai pas testé ce script avec un proxy comme NGINX ou Varnish. Il y a de fortes chances pour que ça ne fonctionne pas.

  154. Merci Jonathan pour ta réponse.
    Je viens justement de faire un test sur un autre domaine sans NGINX et ça ne fonctionne pas non plus :(
    Rien dans les logs qui indiquerait un problème.
    WP quand à lui fonctionne bien…

  155. Sacré travail, merci !!! :)
    En revanche il est possible de configurer WP super Cache pour rafraîchir les pages de temps à autre ou ne pas mettre en cache tout simplement d’ailleurs c’est vraiment pas celui que j’aurais choisi pour parler des mauvais plugins de cache. Tout dépend de la manière de le configurer.

    Mais toutes les installations n’ont pas besoin de ce genre de plugins mastodontes, surtout si on ne sait pas les régler. Donc ton système est vraiment bien vu. J’ai testé en conditions réelles et ça roxx pas mal Chapeau !

  156. Bonjour, ce tutoriel est exactement ce que je recherche étant donné que je m’occupe d’un petit site internet et que je ne souhaite pas m’allourdir avec les plugins de cache. Seul problème je suis pas une pointe en développement/intégration et je stagne déjà. Quelle est l’utilité d’un vhost pour ce tutoriel ? Pouvez-vous me conseiller un bon tutoriel pour en créer un ?

    Merci en tout cas pour cette vidéo

  157. Bonjour, un peu comme Eleanor je ne suis pas à la pointe …

    J’ai bien regardé la video et pris des notes, installé le contenu de htaccess.txt en début de .htaccess existant et remplacé index.php. J’ai essayé mais rien n’y fait mon répertoire cache (0755) reste vide. J’ai bien essayé les 2 versions HTTP/1.0 et HTTP/1.1. Bref je me dis que j’ai tout bien fait mais voilà … répertoire vide.

    Je vous remercie pour tout ce tuto vraiment éclairant et le travail correspondant !

    La question : qu’est-ce que j’ai oublié ? ou mal fait ? ou pas fait ? (scregneugneu)

    Hervé

  158. Bonjour,

    J’ai quelques questions concernant l’installation : mon site wordpress est installé dans un répertoire.

    —>> Dois-je utiliser le .htaccess à la racine de mon hébergement (www.nomdedomaine.com/) ou celui qui se trouve dans le répertoire ou se trouve wordpress (www.nomdedomaine.com/repertoire/) ?
    —>> Dois-je remplacer index.php à la racine de mon hébergement (www.nomdedomaine.com/index.php) ou celui qui se trouve dans le répertoire ou se trouve wordpress (www.graphiste-libre.com/wordpress/index.php) ?

    Si il vous est possible de détailler l’installation en prenant compte que le site se trouve dans un répertoire…

    Merci
    Philippe

  159. Bonjour,

    Pouvez vous m’indiquer pourquoi chaque fois que je poste une question, elle est supprimé d’office ?

    J’ai fait l’achat de votre module, et je n’ai aucune réponse à mes questions que cela soit par mail ou via cette page !

    Je ne trouve vraiment cela très pro, vous vous faite du fric et vous indiquez si problème, je suis la pour vous répondre… Pour le moment j’ai l’impression qu »il n’y a personne !

    Je tente encore une fois et par mail aussi…

    Philippe

  160. @Philouseb:

    « Pouvez vous m’indiquer pourquoi chaque fois que je poste une question, elle est supprimé d’office ? »

    Ils ne sont pas du tout supprimé. Ils sont en attente de validation, ni plus, ni moins. Ils sont disponibles à l’affichage pendant 3 minutes, histoire de vous prévenir que celui-ci est en attente de validation. Après les 3 minutes, le commentaire n’est plus visible, mais cela ne signifie pas qu’il a été supprimé. Il est simplement en attente de validation avant publication.

    « Je ne trouve vraiment cela très pro, vous vous faite du fric et vous indiquez si problème, je suis la pour vous répondre… Pour le moment j’ai l’impression qu »il n’y a personne ! »

    Peut-être connaissez-vous le mot « vacances » ?

    Si pour vous, « se faire du fric » signifie que je puisse gagner 15/20€ par mois avec ce script, alors oui je me « fais » du fric…

    « —>> Dois-je utiliser le .htaccess à la racine de mon hébergement (www.nomdedomaine.com/) ou celui qui se trouve dans le répertoire ou se trouve wordpress (www.nomdedomaine.com/repertoire/) ? »

    Celui qui contient le WordPress.

    —>> Dois-je remplacer index.php à la racine de mon hébergement (www.nomdedomaine.com/index.php) ou celui qui se trouve dans le répertoire ou se trouve wordpress (www.graphiste-libre.com/wordpress/index.php) ?

    Celui de WordPress.

  161. @Jonathan

    Cela ne fonctionne pas en utilisant le .htaccess et le fichier index.php se trouvant dans le dossier WordPress.

    Par contre en utilisant ceux à la racine de l’hébergement, cela m’a l’ai de fonctionner correctement. Un dossier cache a été crée automatiquement à la racine le l’hébergement et au fur et à mesure que je navigue su mon site il se rempli.

    Du coup, même après une mise à jour de wordpress, il n’y aura donc pas à re-modifier le fichier index.php, car il ne sera pas remplacé.

    Qu’en pensez vous ?

  162. Bonjour,
    je suis novice wordpress on va dire. Je sais un peu coder en C, et je bidouille le css et php pour mon site. (je rentre a 42 en novembre au passage).

    je précise qu’il n’y a que des pages sur mon site (enfin que je gère), (cliquez sur mon nom si vous voulez voir :D, ou si vous voulez aller en vacances au Cambodge ^^)

    question: je voulais savoir si ce script convient pour un site disposant de l’information du temps (ex: dans le menu : paris 22°)
    Avec ce système de cache (ou un autre), la température se mettra – t elle a jour ? (je pense que non …. ???)

    et deuxième question: sur mon site j’ai également une page booking (livré avec le template) et un widget booking situé dans le footer ( j’ai supprimer via condition ce widget pour la page booking mais osef)
    –> le fait est que si on rempli le widget avec les dates le nombres de personne … etc (cf le site) et qu’on clique sur book now, on est redirigé vers la page booking avec les info qui se remplisse –> donc je ne dois pas mettre la page booking en cache sinon ça rendra le widget useless ??

    voila, c’est tout :D
    bravo pour le site, très intéressant.

  163. @Philouseb: Si, lors d’une mise à jour de WP, le fichier index.php sera écrasé par WordPress et il faudra le remettre à jour.

    @Nozero80: Pour votre module de météo, cela dépend comme l’affichage est gérée. Si c’est en JS, pas de problème, si c’est en PHP, ça sera problématique.

    Pour le reste, je vous conseille plutôt l’utilisation du plugin WP Rocket qui est la suite nettement plus évolué de ce début de système de cache.

    Avec ce script, vous n’avez pas la possibilité d’exclure des pages du cache. En fait si, mais vous allez devoir mettre les mains dans le code.

  164. pour la météo je sait pas si c’est php ou script. si c’est php, je changerai cela(pour scipt manuelle of course).
    pour exclure la page, je mettrai les mains dans le code, y’a pas de soucis :D

    pour wp-rocket, je bosse pas dans la création de site, je suis admin que d’un site, celui de mon frère, donc pour l’instant on va éviter les achats ^^

    je crois que je vais adapter ton script a mes besoins, a savoir que c’est un site vitrine sans articles, donc que des pages, bref …

    merci de la réponse

  165. Ok, bonjour, encore moi :D
    Bon le système est en place, niveau rapidité, c’est clair que c’est super plaisant.
    pas de problème pour exclure des pages, super simple ..

    ma question c’est que, la purge ne marche pas pour les pages.
    c’est normal car dans le tuto tu explique pour les articles??

    comment faire faire pour les pages ? $page ??? et pour les rooms ? $rooms ?
    je vais continuer mes recherches, mais pas trouvé encore.

    Si je trouve avant ta réponse je reposterai un commentaire.

  166. Désolé des pseudo spam (ce commentaire et le précedent, tu peux les delete au pire)
    ca marche niquel pour la purge, j’avais oublié un ‘r’ dans transition, comme un boulet.

    encore merci.

  167. @NoZero80 et @Jonathan : je serai très interressé de savoir comment vous faites pour avoir une purge, chez moi pas de purge, jamais… Je suis obligé dès que je fais une modifications de passer en Ftp pour supprimer le dossier cache.

    Merci d’avance

  168. @philouseb
    ba j’ai suivi le tuto via la vidéo :D tout simplement. reverifi tes lignes de codes, comme j’ai dit dans mon message, moi ca buguais car j’avais oublié une lettre …

    @jonathan, par contre moi j’ai un bug sur les url qui n’existe pas: par exemple si j’essai http://monsite.com/existepas/ ca m’envoi vers ma page not found avec une belle erreur au dessus :

    Warning: file_get_contents(http://monsie.com/fffff) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /home/snappyto/public_html/monsite.com/index.php on line 21

    je voulais mettre un if HTTP/1.1 404 Not Found dans le index, sauf que l’erreur se produit lors de la demande …

    c’est bizarre …. pas trouvé de solution pour l’instant.

  169. donc erreur a cette ligne en fait :
    $data = file_get_contents( ‘http://’ . $_SERVER[‘HTTP_HOST’] . $_SERVER[‘REQUEST_URI’] );

    pour l’instant, j’ai rajouté @ devant file_get_contents …. a default de mieux.

  170. Bonjour,

    Je l’ai mis sur 2 ou 3 sites depuis quelques mois et c’est vrai que la vitesse est au rendez-vous. J’ai vu une sacrée différence et mon taux de rebond a baissé ( environ 30% de moins ). Evidement avec un site plus rapide, les personnes restent plus longtemps.

    Merci pour ce plugin.

  171. Je l’avoue, je suis nulle en codage. J’ai pas trouvé le moyen d’activer la purge du cache, je suis toujours obligé après chaque modification sur mon site de vider manuellement le dossier cache !!

    Il y aurai pas une âme charitable pour m’aider ?

    D’avance merci.

  172. Bonjour ,

    J’ai installé les fichiers mais à la connexion je me retrouve avec une page blanche et des caractères d’un fichier non décompressé qui s’affiche , dans le cache il y a le fichier html de la page d’accueil …

  173. Bonjour à toutes et à tous,

    J’ai lu tous les commentaires, mais je n’ai pas trouvé de solution à mes questions.

    J’ai trois questions:

    1: Pour mettre index.php en HTTP/1.1, je suppose qu’il faut faire la correction dans index.php à la ligne 28 ?

    2: J’ai un souci avec les accents depuis l’installation

    3: Mon blog sur Google chrome s’affiche bien mais pas sur Explorer ni Firefox.

    Avez-vous des solutions ?

    Amicalement

    Serge

  174. Bonjour,

    Je viens de prendre les fichiers sources et de me rendre compte qu’il fonctionnait avec un .htaccess. Comme je m’y attendais, cela ne fonctionne pas.

    Il y a t’il une astuce à ce jour ? (une version nginx disponible ?) Ou est-ce bien mort et je viens d’acheter cette super cache machine pour rien ? :'(

  175. Bonjour,

    Avant de toucher à du code je vérifie.
    Le problème c’est que le test google speed de « groupe361.com » donne 45% mobile, 57% ordinateur et que le résultat sur perfmeter.net donne 57%
    hummmm…

    • @symphonie10 La note Google PageSpeed ne vous garantie en rien d’avoir un site rapide. Vous pouvez avoir une note de 100% et un site qui se charge en 10 secondes ;)

  176. Bonjour,

    Je suis novice mais j’ai suivi avec grand intérêt ton tuto que j’ai trouvé très sympa.
    J’ai mis la première partie sur mon site mais j’ai une erreur 500 ?
    j’ai du louper quelque chose.
    merci

  177. Salut, :)

    Un ptit message car j’ai un problème dès le départ avec une boucle infinie et le file_get_contents() et je ne comprends pas pourquoi tu n’as pas la même erreur et surtout je ne vois pas comment contourner le problème. :(

    Je suis sous Wamp (pas de vhost).
    Racine de mon site wordpress: « http://localhost/mon_site/ ».

    Htaccess et index.php (jusqu’au file_get_contents) identiques aux tiens et placés sous « http://localhost/mon_site/ ».

    Mais quand j’essaye d’accéder à l’accueil de mon site (http://localhost/mon_site/) ou toute autre page d’ailleurs , je tombe sur une boucle infinie.

    Mais logique selon moi car le file_get_contents à l’intérieur du index.php appele une page (ex: page d’accueil) qui va elle aussi appelée aussi index.php, qui va retomber sur mon file_get_contents(), qui va re-appeler index.php, etc, etc, etc ==> boucle infinie :(
    Ce que je ne comprends pas c’est pourquoi tu n’as pas ce problème . Aurais-tu une
    idée et surtout comment gérer ce problème? Mon code est vraiment identique au tien.

    J’ai essayé de passer par un « index-perso.php » comme tu proposes de le faire (+ modif htaccess) mais là même problème et en + « index-perso.php » est appelé uniquement pour des pages secondaires (http://localhost/mon_site/) mais pas pour la page d’accueil de mon site où c’est le « index.php » qui est déclenché.

    Du coup aurais-tu une idée ?

    Petite remarque supplémentaire:
    Pour la règle de la non-mise en cache quand un membre est connecté, je ne suis pas 100% partisan. Tout à fait d’accord qd le user connecté navigue dans son espace membre mais pas d’accord si ce user (encore) connecté visite ensuite des pages « publiques » du site qui méritent l’utilisation du cache (sauf bien sûr si le header des pages prévoie un « bloc » spécifique qd le membre est connecté, auquel cas le cache ne peut pas être utilisé en effet).

    Merci par avance pour ton aide, et bravo pour ton travail en général.

    Claw

    • @Claw: À ce jour, je te conseillerai d’utiliser un plugin de cache comme WP Rocket qui sera tout aussi simple d’utilisation ;)

  178. Très intéressant tout ça !
    Ca faisait longtemps que je songais à faire un système similaire…
    Par contre, je ne sais pas si c’est moi ou pas, mais je ne trouve pas les fichiers sources à télécharger, comme indiqué dans la vidéo…
    Quelqu’un à le lien ou peu me les envoyer ?

    Merci d’avance…

    • Salut, aujourd’hui le projet est devenu WP-Rocket, je te conseille donc de prendre cette extension pour un système de cache complet et performant !