Quand dois-je utiliser l'API Transients?

16

Je n'ai jamais utilisé l'API Transients auparavant et je me demandais si quelqu'un avait des conseils sur le moment de l'utiliser. L' article du Codex implique qu'en tant que développeur de thème, je pourrais vouloir définir chaque nouveau WP_Query()comme un transitoire; Je suppose que la même chose pourrait être dite pour les requêtes directes $ wpdb et query_posts(). Est-ce exagéré? Et / Ou y a-t-il d'autres endroits où je devrais l'utiliser par défaut?

J'utilise souvent des plugins de mise en cache sur mon site (W3 Total Cache généralement) et il semble que l'utilisation de transitoires puisse augmenter l'efficacité du plugin, mais je ne veux pas devenir fou en emballant tout en transitoires si ce n'est pas une meilleure pratique.

Michelle
la source
Merci à tous, j'aimerais pouvoir marquer plus d'une réponse comme la «solution». Grande info, très appréciée!
Michelle

Réponses:

16

Les transitoires sont parfaits lorsque vous effectuez des requêtes complexes dans vos thèmes et plugins. J'ai tendance à utiliser des transitoires pour des choses comme les menus et montrer d'autres choses comme les Tweets de Twitter dans une barre latérale par exemple. Je ne les utiliserais pas pour absolument tout, donc juste des éléments de données temporaires qui peuvent être mis en cache.

Gardez à l'esprit que si vous utilisez quelque chose comme Memcached avec des transitoires, vous remarquerez un gain de performances énorme. La règle avec les transitoires est de ne pas les utiliser pour des données qui ne doivent pas expirer car elles ne sont vraiment que pour des données temporaires et gardez à l'esprit que les transitoires ne sont pas toujours stockés dans la base de données.

Quelques utilisations pour les transitoires :

  • Requêtes de base de données complexes et personnalisées
  • Menus de navigation Wordpress
  • Widgets de la barre latérale qui affichent des informations comme; tweets, une liste des visiteurs récents du site ou un flux de photos Flickr
  • Mise en cache des nuages ​​de tags

Cet article est très informatif avec des repères rapides montrant à quel point les transitoires peuvent accélérer votre site et contient même quelques exemples. Cet autre article contient également quelques excellents exemples d'utilisation de transitoires qui pourraient vous aider à comprendre à quoi les utiliser également.

Dwayne Charrington
la source
2
Autre utilisation: la mise en cache des requêtes HTTP externes. Comme frapper l'API twitter. Ne le faites pas à chaque chargement de page, mettez les résultats en cache avec un transitoire.
chrisguitarguy
11

Il existe plusieurs mécanismes de mise en cache dans WordPress et leurs mécanismes diffèrent, selon le choix du cache d'objets (natif ou non):

+-----------+-------------------------+---------------------+
|           |         Native          | Object cache plugin |
+-----------+-------------------------+---------------------+
| Option    | Persistent (database)   | N/A                 |
| Transient | Persistent (database)   | Persistent (varies) |
| Cache     | Non-persistent (memory) | Persistent (varies) |
+-----------+-------------------------+---------------------+

En un mot, cela signifie que le transitoire est toujours persistant (survivra entre les chargements de page contrairement à Cache en natif), mais il utilisera un stockage personnalisé s'il est fourni (contrairement aux options).

Cela fait des transitoires le choix le plus polyvalent pour la mise en cache.

Cependant, la flexibilité s'accompagne d'une complexité sous-jacente et il y a pas mal de nuances avec eux (comme la limite de la longueur du nom, un comportement différent avec et sans expiration, le manque de collecte des ordures) qui les rendent plus complexes qu'il n'y paraît.

Global:

  • utiliser des options pour enregistrer des éléments qui doivent être persistants
  • utiliser des transitoires pour mettre en cache autre chose
  • utilisez Cache lorsque vous avez une très bonne compréhension des trois et savez que Cache correspond mieux au cas d'utilisation que les autres (ce qui ne sera pas souvent)
Rarst
la source
4

Je pense que le code de Sterling pourrait être amélioré en n'appelant pas la fonction get_transient deux fois. Stockez plutôt le premier résultat dans une variable temporaire. Parce que l'idée derrière l'API Transitoire est la vitesse ;-)

private function _get_data( $query) {
    $result = get_transient( $query );
    if ( $result ) {
       return $result;
    } else { 
       return $this->_get_query( $query ); 
    }
}
Thomas
la source
3

Réponse courte: vous devez l'utiliser quand / où vous le pouvez.

Longue réponse:

L'API Transients sert à la mise en cache. Vous voulez donc l'utiliser autant que possible. Vous pouvez écrire une fonction qui le fait pour vous.

Ce n'est pas exagéré et s'il est fait correctement finit par être assez élégant:

// If the transient isn't false, then you can just get the cached version.
// If not, we'll call another function that runs a database query.
private function _get_data( $query) {
    return
    ( get_transient( $query ) ) ?
    get_transient( $query ) :
    $this->_get_query( $query );
}

// After you make the query, set the transient so you can leverage on caching plugins.
private function _get_query( $query ) {
  // Database logic. Results go to $results.
  ...
  set_transient( $query, $results , 0 ); // 0 Means cache for as long as you can.
}
Sterling Hamilton
la source
3

L'API transitoires est vraiment utile lorsque vous récupérez des données à partir de sources externes comme Facebook, Twitter.

Pour avoir une idée plus claire de ce qu'est l'API Transients et de ce qui fait la différence avec la fonction Cache WordPress, je recommande de regarder la conversation d'Otto et Nanic de WordCamp San Francisco 2011

Mamaduka
la source