Quand devrais-je utiliser l'API Transients?

12

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 nouveau WP_Query() comme un élément temporaire; 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 la meilleure pratique.

    
posée Michelle 09.03.2012 - 23:32

5 réponses

15

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 l'affichage 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 uniquement des données temporaires pouvant être mises en cache.

N'oubliez pas que si vous utilisez quelque chose comme Memcached avec des transitoires, vous constaterez 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
  • Les widgets de la barre latérale affichant des informations telles que; tweets, une liste des visiteurs récents du site ou un flux de photos Flickr
  • Mise en cache des nuages de balises

Cet article est très instructif et fournit des repères rapides indiquant comment les transitoires peuvent accélérer votre site et a même quelques exemples. Cet autre article contient également quelques excellents exemples d'utilisation de transitoires pouvant vous aider à comprendre ce que de les utiliser aussi.

    
réponse donnée Dwayne Charrington 10.03.2012 - 00:01
10

Il existe plusieurs mécanismes de mise en cache dans WordPress et leurs mécanismes diffèrent en fonction du 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 résumé, 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 voyageurs transitoires le choix le plus polyvalent pour la mise en cache.

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

Dans l'ensemble:

  • utiliser les options pour enregistrer des éléments qui doivent être persistants
  • utilisez les transitoires pour mettre en cache autre chose
  • utilisez le cache lorsque vous maîtrisez parfaitement ces trois aspects et que vous savez que le cache convient mieux aux cas d'utilisation (ce qui ne sera pas souvent le cas)
réponse donnée Rarst 10.03.2012 - 17:54
3

Je pense que le code de Sterling pourrait être amélioré en n'appelant pas la fonction get_transient à deux reprises. 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 ); 
    }
}
    
réponse donnée Thomas 10.03.2012 - 12:47
2

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

Réponse longue:

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.
}
    
réponse donnée Sterling Hamilton 10.03.2012 - 00:06
2

L'API transitoires est très utile lorsque vous extrayez des données de sources externes telles que Facebook ou 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

    
réponse donnée Mamaduka 10.03.2012 - 15:01

Lire d'autres questions sur les étiquettes