¿Cuándo debería usar la API de transitorios?

15

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

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

Michelle
fuente
Gracias a todos, desearía poder marcar más de una respuesta como la 'solución'. Gran información, muy apreciada!
Michelle

Respuestas:

15

Los transitorios son geniales cuando haces 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 todo más, así que solo datos temporales que se pueden almacenar en caché.

Tenga en cuenta que si usa algo como Memcached con transitorios, notará una ganancia de rendimiento masiva. La regla con los transitorios es no usarlos para datos que no deberían caducar, ya que en realidad son solo 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 bases de datos complejas y personalizadas
  • Menús de navegación de Wordpress
  • Widgets de la barra lateral que muestran información como; tweets, una lista de visitantes recientes del sitio o una secuencia de fotos de Flickr
  • Nubes de etiquetas de almacenamiento en caché

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

Dwayne Charrington
fuente
2
Otro uso: almacenamiento en caché de solicitudes HTTP externas. Como golpear la API de Twitter. No lo haga en cada carga de página, guarde en caché los resultados con un transitorio.
chrisguitarguy
10

Existen varios mecanismos de almacenamiento en caché en WordPress y sus mecanismos difieren, dependiendo de la elección del 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 esto significa es que el transitorio siempre es persistente (sobrevivirá entre cargas de página a diferencia de Cache de forma nativa), pero hará uso de 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 de la corriente subterránea y hay bastantes matices con ellos (como límite en la longitud del nombre, comportamiento diferente con y sin vencimiento, falta de recolección de basura) que los hacen más complejos de lo que parecen.

En general:

  • use opciones para guardar cosas que deben ser persistentes
  • usar transitorios para almacenar en caché cualquier otra cosa
  • use Cache cuando tenga una buena comprensión de los tres y sepa que Cache se adapta mejor al caso de uso que otros (lo que no será frecuente)
Rarst
fuente
3

Creo que el código de Sterling podría mejorarse al no llamar dos veces a la función get_transient. En su lugar, almacene 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 ); 
    }
}
Thomas
fuente
2

Respuesta corta: debe usarlo cuando / donde pueda.

Respuesta larga:

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

No es excesivo 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.
}
Sterling Hamilton
fuente
2

La API de transitorios es realmente útil cuando busca datos de fuentes externas como Facebook, Twitter.

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

Mamaduka
fuente