Quando dovrei usare l'API Transients?


15

Non ho mai usato l'API Transients prima e mi chiedevo se qualcuno avesse una guida su quando usarlo. L' articolo del Codex implica che come sviluppatore di temi potrei voler impostare ogni nuovo WP_Query()come transitorio; Presumo che lo stesso si possa dire per le query $ wpdb dirette e query_posts(). È eccessivo? E / o ci sono altri posti in cui dovrei usarlo di default?

Uso spesso plug-in di cache sul mio sito (di solito W3 Total Cache) e sembra che l'uso di Transients possa aumentare l'efficacia del plug-in, ma non voglio impazzire avvolgendo tutto nei transitori se non è una buona pratica.


Grazie a tutti, vorrei poter contrassegnare più di una risposta come "soluzione". Informazioni fantastiche, molto apprezzate!
Michelle

Risposte:


15

I transitori sono fantastici quando esegui query complesse nei temi e nei plug-in. Tendo ad usare i transitori per cose come i menu e mostrare altre cose come i Tweet di Twitter in una barra laterale, ad esempio. Non li userei per assolutamente di più, quindi solo dati temporanei che possono essere memorizzati nella cache.

Tieni presente che se usi qualcosa come Memcached con i transienti, noterai un enorme aumento delle prestazioni. La regola con i transitori è di non usarli per i dati che non dovrebbero scadere in quanto sono realmente solo per i dati temporanei e tenere presente che i transitori non sono sempre archiviati nel database.

Alcuni usi per i transitori :

  • Query di database complesse e personalizzate
  • Menu di navigazione di Wordpress
  • Widget della barra laterale che visualizzano informazioni come; tweet, un elenco di visitatori recenti del sito o uno streaming di foto Flickr
  • Nuvole di tag nella cache

Questo articolo è molto informativo con benchmark rapidi che mostrano come i transitori possono accelerare il tuo sito e ha anche un paio di esempi. Questo altro articolo contiene anche alcuni ottimi esempi dell'uso dei transitori che potrebbero aiutarti a capire anche per cosa utilizzarli.


2
Un altro uso: memorizzazione nella cache di richieste HTTP esterne. Come colpire l'API di Twitter. Non farlo ad ogni caricamento della pagina, memorizza nella cache i risultati con un transitorio.
chrisguitarguy,

10

Esistono diversi meccanismi di memorizzazione nella cache in WordPress e le loro meccaniche differiscono, a seconda della scelta della cache degli oggetti (nativa o no):

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

In poche parole, ciò significa che il transitorio è sempre persistente (sopravviverà tra i caricamenti di pagina a differenza della cache in modo nativo), ma utilizzerà l'archiviazione personalizzata se fornita (a differenza delle Opzioni).

Questo rende i transitori la scelta più versatile per la memorizzazione nella cache.

Tuttavia, con la flessibilità arriva una complessità sottocorrente e ci sono alcune sfumature (come limite sulla lunghezza del nome, comportamento diverso con e senza scadenza, mancanza di raccolta dei rifiuti) che li rendono più complessi di quanto sembri.

Complessivamente:

  • usa le Opzioni per salvare cose che devono essere persistenti
  • usa i Transitori per memorizzare nella cache qualsiasi altra cosa
  • usa Cache quando hai una buona conoscenza di tutti e tre e sai che Cache si adatta al caso d'uso meglio di altri (che non sarà spesso)

3

Penso che il codice da Sterling potrebbe essere migliorato non chiamando la funzione get_transient due volte. Memorizza invece il primo risultato in una variabile temporanea. Perché l'idea alla base dell'API di Transient è la velocità ;-)

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

2

Risposta breve: dovresti usarla quando / dove puoi.

Risposta lunga:

L'API Transients è per la memorizzazione nella cache. Quindi vuoi usarlo il più possibile. Puoi scrivere una funzione che fa questo per te.

Non è eccessivo e se fatto correttamente finisce per essere piuttosto 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.
}

2

L'API Transients è davvero utile quando stai recuperando dati da fonti esterne come Facebook, Twitter.

Per avere un'idea più chiara di cosa sia l'API Transients e qual è la differenza con la funzione Cache WordPress, consiglio di guardare i discorsi di Otto e Nanic da WordCamp San Francisco 2011

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.