web-dev-qa-db-fra.com

Quand devrais-je utiliser l'API Transients?

Je n'avais 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 que, en tant que développeur de thème, je souhaite définir chaque nouvelle WP_Query() en tant que 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 en général) et il semblerait que l'utilisation de Transitoires puisse augmenter l'efficacité du plugin, mais je ne veux pas devenir fou en intégrant tout dans les transitoires si ce n'est pas une pratique recommandée.

13
Michelle

Les transitoires sont parfaits lorsque vous effectuez des requêtes complexes dans vos thèmes et plug-ins. J'ai tendance à utiliser des éléments transitoires pour des éléments tels que les menus et pour afficher d'autres éléments tels que les Tweets de Twitter dans une barre latérale, par exemple. Je ne les utiliserais pas pour absolument tout le reste, donc seulement des données temporaires pouvant être mises en cache.

N'oubliez pas que si vous utilisez quelque chose comme Memcached avec des transitoires, vous remarquerez un gain de performances considérable. 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 en réalité que 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.

15

Il existe plusieurs mécanismes de mise en cache dans WordPress et leurs mécanismes diffèrent en fonction du choix de 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 (il survivra entre les chargements de page contrairement à Cache de manière native), mais il utilisera un stockage personnalisé s'il est fourni (contrairement à Options).

Cela rend les choix transitoires le plus polyvalent pour la mise en cache.

Cependant, la flexibilité s'accompagne d'une complexité sous-jacente actuelle et comporte quelques nuances (limitation de la longueur du nom, comportement différent avec et sans expiration, absence de récupération de place) qui les rendent plus complexes qu'il n'y paraît.

Global:

  • utiliser les options pour sauvegarder des choses qui doivent être persistantes
  • utiliser Transitoires pour mettre en cache autre chose
  • utilisez Cache lorsque vous maîtrisez très bien les trois et que vous savez que le cache convient mieux aux cas d'utilisation (ce qui ne sera pas souvent le cas).
10
Rarst

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 ); 
    }
}
3
Thomas

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

Longue réponse:

L'API transitoires est destinée à la mise en cache. Donc, vous voulez l'utiliser autant que vous le pouvez. Vous pouvez écrire une fonction qui le fait pour vous.

Ce n'est pas exagéré et, si cela 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.
}
2

L'API transitoire est vraiment utile lorsque vous extrayez des données de sources externes telles que Facebook, Twitter.

Pour avoir une idée plus précise de ce qu'est l'API Transients et de la différence avec la fonction Cache WordPress, je vous recommande de regarder le discours d'Otto et Nanic dans WordCamp San Francisco 2011

2
Mamaduka