¿Cuándo debería estar usando la API Transients?

12

Nunca he usado la API de Transients antes y me preguntaba si alguien tiene orientación sobre cuándo usarla. El artículo del Codex implica que, como desarrollador de temas, podría configurar cada nuevo WP_Query() como transitorio; Supongo que se podría decir lo mismo para las consultas directas de $ wpdb y query_posts() . ¿Eso es una exageración? ¿Y / o hay otros lugares en los que debería usarlo por defecto?

A menudo uso complementos de almacenamiento en caché en mi sitio (usualmente W3 Total Cache) y parece que el uso de Transients puede aumentar la efectividad del complemento, pero no quiero volverme loco envolviendo todo en transitorios si no es una buena práctica.

    
pregunta Michelle 09.03.2012 - 23:32

5 respuestas

15

Los transitorios son excelentes cuando estás haciendo consultas complejas en tus temas y complementos. Tiendo a usar transitorios para cosas como menús y mostrar otras cosas como Tweets de Twitter en una barra lateral, por ejemplo. No los usaría para absolutamente nada más, solo datos temporales que se pueden almacenar en caché.

Tenga en cuenta que si usa algo como Memcached con transitorios, notará una ganancia masiva de rendimiento. La regla con los transitorios es no usarlos para los datos que no deben caducar, ya que en realidad solo son para datos temporales y tener en cuenta que los transitorios no siempre se almacenan en la base de datos.

Algunos usos para transitorios :

  • Consultas de base de datos complejas y personalizadas
  • Menús de navegación de Wordpress
  • los widgets de la barra lateral que muestran información como; tweets, una lista de los visitantes recientes del sitio o un flujo de fotos de Flickr
  • nubes de etiquetas de caché

Este artículo es muy informativo con puntos de referencia rápidos que muestran cómo pueden acelerar los transitorios Tu sitio e incluso tiene un par de ejemplos. Este otro artículo también tiene algunos ejemplos excelentes sobre el uso de transitorios que pueden ayudarlo a comprender qué para usarlos también.

    
respondido por el Dwayne Charrington 10.03.2012 - 00:01
10

Hay varios mecanismos de almacenamiento en caché en WordPress y sus mecanismos difieren, dependiendo de la opción de caché de objetos (nativo o no) :

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

En pocas palabras, lo que significa es que transitorio siempre es persistente (sobrevivirá entre las cargas de la página a diferencia del Caché de forma nativa), pero utilizará almacenamiento personalizado si se proporciona (a diferencia de las Opciones).

Esto hace que los transitorios sean la opción más versátil para el almacenamiento en caché.

Sin embargo, con la flexibilidad viene la complejidad subyacente y hay bastantes matices con ellos (como el límite en la longitud del nombre, el comportamiento diferente con y sin vencimiento, la falta de recolección de basura) que los hacen más complejos de lo que parecen.

En general:

  • usa las opciones para guardar cosas que deben ser persistentes
  • usa Transients para almacenar en caché cualquier otra cosa
  • use Cache cuando tenga un buen conocimiento de los tres y sepa que Cache se ajusta al caso de uso mejor que otros (lo que no será frecuente)
respondido por el Rarst 10.03.2012 - 17:54
3

Creo que el código de Sterling podría mejorarse al no llamar a la función get_transient dos veces. En lugar de almacenar el primer resultado en una variable temporal. Porque la idea detrás de la API Transitoria es la velocidad ;-)

private function _get_data( $query) {
    $result = get_transient( $query );
    if ( $result ) {
       return $result;
    } else { 
       return $this->_get_query( $query ); 
    }
}
    
respondido por el Thomas 10.03.2012 - 12:47
2

Respuesta corta: debe usarla cuando / donde pueda.

Respuesta larga:

La API de transitorios es para el almacenamiento en caché. Así que quieres usarlo tanto como puedas. Puedes escribir una función que haga esto por ti.

No es una exageración y, si se hace correctamente, termina siendo bastante elegante:

// 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.
}
    
respondido por el Sterling Hamilton 10.03.2012 - 00:06
2

La API de transitorios es realmente útil cuando estás obteniendo datos de fuentes externas como Facebook, Twitter.

Para tener una idea más clara de qué es la API de Transients y cuál es la diferencia con la función Cache WordPress, recomiendo ver la conversación de Otto y Nanic desde WordCamp San Francisco 2011

    
respondido por el Mamaduka 10.03.2012 - 15:01

Lea otras preguntas en las etiquetas