Si vous suivez d’autres sites d’information sur WordPress, vous avez surement déjà entendu parler des transients pour optimiser un site. Dans cet article, je vous donne quelques clés pour maîtriser cette notion.
Je vais pour cela essayer de vulgariser cette notion technique afin que tout le monde puisse facilement utiliser cette technologie. Le but n’est pas que vous modifiez votre thème pour intégrer cette notion mais que vous comprenez comment c’est utilisé et surtout comme optimiser l’espace occupé par ces transients.
Qu’est-ce qu’un transient ?
Un transient est une API (interface de programmation, donc technique) permet de mettre des données en cache. Qu’est-ce que le cache ? Jetez un œil à cet article sur le cache déjà publié sur WP formation.
Pour résumer, vous chargez une seule fois par jour les données alors qu’elles seront affichées plusieurs fois par jour.
Vous comprenez donc qu’avec les transients, vous pouvez optimiser la rapidité de chargement de votre site et d’un point de vue SEO, c’est non négligeable.
Les données du transient sont stockées dans la table options de la base de la base de données WordPress (mais pas exclusivement – si par exemple vous utilisez un système de cache coté serveur).
Exemple :
Mais alors quelle différence avec un système de cache ?
Un plugin de mise en cache tout comme les transients sont là pour optimiser votre site WordPress.
Autant un plugin de cache se concentrera sur l’intégralité de la page web, autant notre transient sera dédié à une partie de la page comme les derniers articles, le pied de page, … n’importe quelle partie de la page qui pourrait prendre du temps à se charger.
Evidemment, je ne rentre pas dans les détails car tous les plugins de cache ont leurs propres spécificités mais quoi qu’il en soit, savoir maîtriser les transients générés par d’autres extensions est nécessaire.
Pour le reste, je vous laisser faire vos tests en fonction de votre propre configuration.
Un transient est donc une information stockée dans la base de données avec éventuellement une durée limitée (un peu comme le cache).
N’importe quelle donnée peut-être stockée dans un transient.
- Une donnée provenant d’un serveur externe (comme Facebook)
- Un code HTML généré dynamiquement à l’aide d’un algorithm complexe
- Une sélection complexe effectuée sur la base de données
- …
Mais il n’est pas nécessaire de tout mettre dans un transient. Vous devrez privilégier des informations relativement statiques pour éviter des décalage entre affiche et réalité.
Un exemple concret, si vous mettez les derniers commentaires dans un transient valable 1 jour, les nouveaux commentaires ne seront affichés que le lendemain…
Lorsqu’une page de votre site est générée, si le transient n’existe pas WordPress le créer, si il existe déjà, WordPress récupère sa valeur.
Comment utiliser les transients.
L’utilisation brute des transients dans WordPress est un peu technique.
Si vous faites un tour sur le codex WordPress, voici grosses mailles ce que vous pourrez trouver.
Ajouter un transient :
set_transient( $transient, $value, $expiration );
La valeur du transient sera l’information stockée. Comme je le disais plus haut, cela peut-être le résultat d’une fonction complexe, une requête vers un système externe, …
Récupérer un transient :
get_transient( $transient );
Ici vous récupérez la valeur du transient pour l’afficher. C’est à ce moment que vous gagnez du temps lors du chargement de votre page.
Supprimer un transient :
delete_transient( $transient );
Avec ces ligne de code, vous supprimez manuellement le transient. N’oubliez pas que si notre transient a une durée de vie, il s’effacera automatiquement. Effacer manuellement le transient peut-être utile lorsque vous mettez à jour la valeur de l’information contenue dans le transient.
Par exemple, vous stockez la liste des derniers articles dans un transient, lorsque vous publiez un nouvel article, vous pourriez supprimer l’ancien transient manuellement.
Jetez un œil à l’article de leaves and love qui m’a inspiré cet article. Vous y trouverez quelques exemples pour utiliser les transients dans votre thème.
Exemple de création de transient :
Pour faire simple, je vais créer un transient sur la base d’un widget et stocker un texte dans ce transient.
Voici le petit code que je place dans mon Widget :
<?php set_transient( 'mon_transient', 'ceci est stocké dans la BDD' , '12'); $data = get_transient( 'mon_transient'); echo $data; ?>
Le résultat est d’une part un transient créé dans la BDD :
D’autre part, une selection sur cette base pour afficher le contenu du transient.
Dans cet exemple, il est inutile d’utiliser un transient car afficher un texte ne prend pas beaucoup de ressources (et je ne vérifie pas l’existence avec de le créer), c’est juste pour l’exemple.
Par contre, vous pourriez penser à une sélection plus gourmande comme votre nombre de fans, les derniers articles, …
Evidemment, n’oubliez pas d’indiquer une durée de vie à votre transient ou sinon de le supprimer manuellement. D’ailleurs, pour la durée de vie, c’est une autre entrée dans la BDD (exprimé en secondes).
Vous y connaissez rien en technique, il y a des extensions.
Même si l’utilisation de l’API transient reste jusque là technique et donc réservé aux développeurs (ou bricoleurs), il existe des extensions qui permettent de faciliter la gestion des transients existants.
Vous pourrez au moins voir les transients actifs et éventuellement supprimer manuellement les transients expirés depuis votre espace d’administration.
Pour donner un exemple, il y a des options de WordPress qui sont stockées dans des transients. Parfois lorsque vous supprimez un plugin, il peut arriver que les transients créés par ce même plugin ne soit pas effacés au moment de la désinstallation.
Malheureusement, ces transients prennent de la place donc il vaut mieux les supprimer. Je vous invite à regarder notamment l’extension transient manager.
Pour conclure, vous pouvez également supprimer les transients avec l’extension WP-Optimize. Si vous utilisez le plugin en français, cela s’appelle les options transitoires.
Malheureusement, impossible de trier les transients qui sont déjà expirés donc on supprime tous les transients, même ceux qui ne sont pas encore arrivés à expiration.
Pour finir, n’hésitez pas à aller voir la présentation de Julio Potier sur les transients.
Sources : SEOMix, leaves and love – Images CC0 homme, chrono.
Hello
Tu dis “un peu comme le cache” mais les transients SONT un système de cache !
Aussi tu dis “stocké en BDD” mais c’est faux, si on utilise MemCache alors il n’y a aucune entrée en BDD.
Et tu dis “il s’effacera automatiquement”, alors que non. Un transient s’efface si on fait un get et qu’il est expiré, sinon il reste stocké à vie.
A vie ? Pas vraiment, si on utilise MemCache, alors il sera supprimé quand il n’y aura plus assez de mémoire.
Aussi, c’est une durée de vie maximale, si on mets “3600” (secondes) alors on sait que maximum, le transient dure 1h, mais il peut très bien disparaitre avant, que vous en fassiez un delete ou non.
Il y a des purges de transients qui peuvent etre faites, et MemCache supprime les transients les plus vieux s’il a besoin de mémoire.
Aussi, la phrase “n’oubliez pas d’indiquer une durée de vie à votre transient ou sinon de le supprimer manuellement” n’est pas bien tournée car ele laisse croire qu’il faut ajouter une durée de vie, à cause du “n’oubliez pas”. C’est plutôt “réfléchissez si vous avez besoin qu’elle se refresh elle même ou si vous devez le faire via un delete”.
Je t’invite à lire ça :
http://boiteaweb.fr/les-transients-vous-veulent-du-bien-8412.html c’est une conférence de 45mn que j’ai donné au WordCamp Montrealen août.
Bonne journée !
Hello Julio,
merci pour ces précisions.
Je me disais bien que tu viendrais me corriger :-)
Par contre, j’ai bien précisé que c’est aussi du cache :
“Un transient est une API (interface de programmation, donc technique) permet de mettre des données en cache”.
Par système de cache, j’entends un système dédié au cache comme une extension (ou coté serveur comme MemCache).
Je dis aussi que ce n’est pas stocké en BDD si on utilise un système de cache coté serveur :
“Les données du transient sont stockées dans la table options de la base de la base de données WordPress (mais pas exclusivement – si par exemple vous utilisez un système de cache coté serveur).”
Par contre effectivement je ne savais pas qu’il fallait faire un get du transient pour qu’il soit supprimé (si expiré !).
Merci pour la conférence, j’irais regarder !
A bientôt,
Hello Mathieu,
Je pensais bien que tu allais mentionner Wp-Optimize. Bien intuitif, ce plugin. L’option de suppression des transients est à manier avec précaution selon les développeurs. (Pensez à faire une sauvegarde de la BDD et de wp-content avant de l’utiliser n’est pas anodin).
Hello Sébastien,
effectivement je l’utilise également dans une opération automatique qui tourne régulièrement mais sans l’option de suppression des transients. Je préfère gérer cela manuellement !
A bientôt,
Mathieu.
Bonjour, aujourd’hui grâce à votre excellent article, je viens d’apprendre quelque chose qui va me faire progresser !
Cordialement.
Richard
PS : je vais suivre attentivement vos conseils éclairés