Transient per WordPress: guida all’uso

Transient per WordPress: guida all’uso

Il meccanismo dietro i transient di WordPress (in italiano “transitori”, per quanto sia più comune lasciare questo termine in inglese) è probabilmente uno dei più potenti disponibili per questo CMS, tanto che meriterebbe di essere trattato a parte all’interno delle fasi di ottimizzazione del sito WP. Cosa che non ho fatto, a conti fatti, perchè non tutti sono programmatori e non tutti dispongono di un programmatore per effettuare questo genere di operazioni, motivo per cui in molti casi i transient sono semplicemente trascurati. In effetti numerosi plugin ne fanno uso, ad ogni modo, in quanto permettono di  velocizzare notevolmente WordPress e sono una tecnica di ottimizzazione del codice decisamente pratica e sicura.

In breve, cosa fanno i wp transient? Essi permettono di definire varie aree del database (identificate da un’etichetta unica) come se fossero cache, in modo da pre-calcolare il risultato di una query, salvarla e poterla infine recuperare all’occorrenza. I siti che scrivono ogni tanto e leggono parecchio – esempio pratico: un blog molto visitato e poco aggiornato –  possono trarre molto giovamento da questa politica. Un po’ come avviene per i cookie, solitamente ad un transient è attivata una “data di scadenza“, che indica la durata massima dello stesso. Questo per una ragione molto naturale: se, ad esempio, imposto un transient per le ultime notizie in home, se faccio un aggiornamento oggi e la data di scadenza non è ancora arrivata, continuerò a vedere i vecchi dati (andando a vantaggio dell’efficenza della query, ma non della sua “attualità”, quindi). Motivo per cui impostarli (e farne uso in modo saggio) richiede un minimo di skill di programmazione e di buon senso, ed in questo articolo farò un po’ di esempi pratici di uso degli stessi.

Come si usano i transient è presto detto: le funzioni principali da conoscere sono due, set_transient(etichetta, valore, durata) e get_transient(etichetta). La prima imposta la cache sull’oggetto identificato dall’etichetta – che può essere, tipicamente, il risultato di un WP_Query – mentre  la seconda ottiene il valore rapidamente sulla base della label specificata (che deve essere ovviamente univoca in tutto il codice).

Il pattern tipico da sfruttare viene dal Codex, ed è il seguente:

if ( false === ( $special_query_results = get_transient( 'special_query_results' ) ) ) {
  $special_query_results = new WP_Query( 'cat=5&order=random&tag=tech&post_meta_key=thumbnail' );
  set_transient( 'special_query_results', $special_query_results, $x );
}

Il suo significato è presto detto: se esiste un transient per quella variabile, cioè se quella query è già stata fatta negli ultimi $x secondi, allora passa oltre perchè il valore lo ha già ottenuto mentre verificava la condizione.  Se invece non esiste entra nell’if, imposta il valore come desiderato (ad esempio: per popolare un carousel / slider, per mostrare i primi 20 articoli in home ecc.) ed imposta il transient con quell’etichetta per la volta successiva. Può sembrare un meccanismo contorto ma, a ben vedere, è facile intuire che non lo è davvero, se non forse per quella condizione iniziale if non proprio leggibile per chi ha meno esperienza con queste cose. Tenete conto, comunque, che se lavorate solo su query testuali (senza immagini o video) di poche righe il beneficio del transient potrebbe non cogliersi affatto, per cui sappiate anche decidere dove e quando farne uso.

Come esempio pratico, ho usato pesantemente i transient in un sito di gallerie fotografiche su cui sto lavorando in questi mesi, con il risultato di dimezzare, in media, il numero di query eseguite, e di abbattere i tempi di caricamento della home da quasi 8 secondi a meno di un secondo. Chiaro che, in questo caso, si è trattato di un’ottimizzazione tutt’altro che superflua, visto che all’occhio del cliente il sito “è lento” e “non carica la home“, mentre invece ora (con qualche accorgimento extra, come il lazy loading per la visualizzazione) i tempi sono decisamente più accettabili e, oserei dire, normali.

Photo by Sean MacEntee

Ti piace questo articolo?

0 voti

Su Trovalost.it puntiamo sulla qualità dei contenuti da quando siamo nati: la tua sincera valutazione può aiutarci a migliorare ogni giorno.