Una guida ai transitori in WordPress
Pubblicato: 2023-02-12Come sviluppatore di WordPress, probabilmente sai già quanto siano importanti le prestazioni per un sito web di successo. Tuttavia, comprendere i transitori in WordPress e come ti aiuteranno a ottimizzare i tuoi progetti può essere un po' complicato.
Fortunatamente, quando li scomponi, i transitori non sono poi così difficili da capire. Finché tieni a mente alcune linee guida chiave, dovresti essere sulla buona strada per incorporarle nel tuo prossimo plugin per WordPress.
In questo post, forniremo una panoramica di cosa sono i transienti di WordPress, insieme a come e quando usarli. C'è molto terreno da percorrere, quindi mettiamoci al lavoro!
Cosa sono i transitori di WordPress?
Per comprendere i transitori, è utile avere una conoscenza di base della memorizzazione nella cache e delle API (Application Programming Interface).
La memorizzazione nella cache dei dati di una pagina Web è essenzialmente un modo per salvare temporaneamente i dati di un sito Web in modo che se ci sono più richieste per gli stessi dati, il sito non deve eseguire nuovamente MySQL o PHP. Ciò può far risparmiare secondi di tempo e ridurre il carico del server.
L'idea è di conservare temporaneamente i dati, da qui la parola "transitori". L'API Transients è simile all'API delle opzioni di WordPress. Dai ai dati un nome e un valore, che può essere complesso, come un array PHP multilivello, e memorizza i dati. Successivamente, magari anche su richiesta diversa, puoi recuperare quei dati usando il suo nome. La differenza è che i dati nella tabella Opzioni rimarranno per sempre. Cioè, puoi archiviare i dati e tre anni dopo saranno ancora lì.
Ogni transitorio è composto da tre parti:
- $ transitorio. Questa è la stringa utilizzata per identificare il transitorio e richiamarlo. Viene anche chiamata "chiave" o "nome" del transiente.
- $valore. Queste sono le informazioni recuperate tramite un'API. Il valore di un transitorio può essere un oggetto, un array, un numero o una stringa.
- $scadenza. Questo è per quanto tempo un transitorio rimane nel tuo database, prima che venga eliminato e tu debba accedere nuovamente alle informazioni di cui hai bisogno tramite l'API.
In superficie, questo è tutto quello che c'è da sapere sui transitori di WordPress. Tuttavia, per usarli correttamente, c'è altro che devi sapere.
Tuttavia, i dati transitori non rimarranno. Questo è il punto! Puoi richiedere i dati e scoprire che mancano in due modi. Innanzitutto, quando memorizzi i dati, specifichi una data di scadenza. Ad esempio, potresti dire "conservalo per tre ore". Quindi se lo richiedi dopo quattro ore, mancherà.
Il secondo modo è che un pezzo di dati può semplicemente svanire, in qualsiasi momento, per qualsiasi motivo. Sembra strano lo so! Che senso ha archiviare i dati se non puoi contare su di essi? Il punto è che l'archiviazione è una richiesta che WordPress tenterà di onorare, ma grazie a questa flessibilità, è possibile utilizzare diversi tipi di implementazioni per l'archiviazione transitoria e ciò significa che è possibile utilizzare una tecnologia diversa e avanzata per rendere i transitori estremamente efficienti e funzioni correttamente anche in un ambiente cluster multi-server.
A causa di questa cosa "scompare in qualsiasi momento", generalmente usi i transienti per una cache. Cioè, se hai bisogno di calcolare qualcosa che richiede tempo reale, come una query MySQL lenta, o il recupero di dati da una fonte esterna come il feed Twitter o RSS di qualcuno, puoi archiviare i dati calcolati in un transitorio, sapendo che se scompare è sempre possibile ricrearlo. Ma nel solito caso, quando NON scompare, hai i dati rapidamente senza dover ricalcolare.
I vantaggi dell'utilizzo dei transitori sul tuo sito WordPress
Come accennato in precedenza, il vantaggio principale dei transienti è che migliorano le prestazioni del sito web. Ecco una descrizione approssimativa di come funziona, utilizzando il plug-in Google Site Kit come esempio.
Quando il plug-in è attivato, utilizza un'API per visualizzare i dati da piattaforme come Analytics e Search Console nella dashboard di WordPress. Senza transitori, WordPress dovrebbe recuperare queste informazioni da ogni strumento ogni volta che visualizzi la dashboard di Site Kit:
Al contrario, Site Kit include transitori che memorizzano nella cache i dati di Analytics e Search Console. Sono conservati per un giorno (o un'ora se la piattaforma non restituisce dati).
Ogni volta successiva che accedi alla dashboard di Site Kit, WordPress può recuperare rapidamente le informazioni memorizzate dal tuo database invece di dover richiamare nuovamente l'API. Allo scadere del periodo di scadenza, i vecchi dati vengono eliminati.
Ciò significa che non devi aspettare che i risultati vengano caricati ogni volta. Ciò è utile in una varietà di situazioni, come mostrare il conteggio delle condivisioni sui social media per i tuoi post o visualizzare un feed di notizie.
Svantaggi dell'utilizzo dei transitori sul tuo sito WordPress
Ciò che ti mette nei guai con i transitori sono i comportamenti diversi e difficili da riprodurre che ottieni quando il tuo plugin/tema viene eseguito con diverse implementazioni dei transitori. Diverse implementazioni transitorie significano che incontrerai problemi SOLO in determinate configurazioni con determinati tipi di siti e mai in altri. Come sviluppatore, se non sei a conoscenza di questa trappola e non stai codificando di conseguenza, penserai che il tuo codice sia valido, ma in realtà si romperà sul campo e non saprai nemmeno come riprodurlo !
Quando utilizzare i transitori di WordPress
I transitori vengono eliminati dal database una volta raggiunta la fine del periodo di scadenza. Per questo motivo, vuoi usarli solo per informazioni che vengono continuamente ricreate.
Inoltre, sebbene possano migliorare le prestazioni del tuo progetto, i transitori sono meglio riservati per query di grandi dimensioni e chiamate remote. Se sarà necessario più codice per creare un transitorio rispetto a quello necessario per effettuare semplicemente una nuova richiesta per la risorsa ogni volta che è necessario, è meglio farne a meno.
Gestione dei transitori di WordPress
Se vuoi vedere e gestire facilmente i transitori che sono attualmente al lavoro sul tuo sito WordPress, puoi installare il plug-in Transients Manager:
Fornisce un elenco completo dei transitori, che puoi trovare navigando su Strumenti > Transitori :
Qui puoi vedere tutti e tre gli elementi transitori che abbiamo elencato in precedenza: la chiave (nome), il valore e il periodo di scadenza. È possibile modificare una qualsiasi di queste funzioni facendo clic sul collegamento Modifica :
Puoi anche eliminare i transitori singolarmente o in blocco.
Operazioni di base utilizzate nei transitori
Quando si tratta di codificare i tuoi transienti, ci sono tre operazioni di base che probabilmente dovrai usare. Abbiamo delineato ciascuno di essi di seguito, continuando a utilizzare Site Kit come esempio.
1. Impostazione dei transitori
Creare o "impostare" transitori è il processo di definizione della chiave, del valore e del periodo di scadenza e dell'applicazione di tali informazioni ai dati rilevanti. Per farlo, utilizzerai il seguente formato:
Set_transient ('key', $value, expiration_period)
Ecco il codice utilizzato in Google Site Kit per impostare il transitorio che memorizza i dati di analisi:
// Cache "data found" status for one day, "no data" status for one hour. set_transient( $transient_key, (int) $has_data, $has_data ? DAY_IN_SECONDS : HOUR_IN_SECONDS ); } return (bool) $has_data; } }
La chiave transitoria è googlesitekit_analytics_has_data (definita in precedenza nel codice), il valore è $has_data o $has_data ? e il periodo di scadenza è di un giorno o di un'ora (a seconda del valore).
2. Recupero di transitori
Il recupero dei transitori è un po' più complicato. Innanzitutto, è necessario utilizzare una funzione per richiedere i dati necessari. Quindi controllerai se ha un transitorio corrispondente che dovrebbe essere caricato, invece di fare una nuova richiesta API.
Il risultato potrebbe essere simile a questo:
function some_function(){ $transient = get_transient('key');
Dovrai quindi restituire il transitorio o eliminare i dati scaduti ed effettuare una nuova chiamata all'origine. Infine, devi impostare il transitorio dopo aver restituito i nuovi dati, in modo che vengano nuovamente archiviati fino allo scadere del periodo di scadenza.
In Google Site Kit, ha questo aspetto:
/** * Checks whether Analytics data exists for the given URL. * * @since 1.4.0 * * @param string $url The url to check data for. * @return bool */ protected function has_data_for_url( $url ) { if ( ! $url ) { return false; } $transient_key = 'googlesitekit_analytics_has_data_' . md5( $url ); $has_data = get_transient( $transient_key ); if ( false === $has_data ) { /* @var Google_Service_AnalyticsReporting_Report[]|WP_Error $reports Array of reporting report instances. */ $reports = $this->get_data( 'report', array( 'url' => $url, 'metrics' => array( array( 'expression' => 'ga:users' ), array( 'expression' => 'ga:sessions' ), ), ) ); if ( is_wp_error( $reports ) ) { $reports = array(); // Bypass data check and cache. } foreach ( $reports as $report ) { /* @var Google_Service_AnalyticsReporting_Report $report Report instance. */ $report_data = $report->getData(); /* @var Google_Service_AnalyticsReporting_ReportData $report_data Report data instance. */ foreach ( $report_data->getTotals() as $date_range_values ) { /* @var Google_Service_AnalyticsReporting_DateRangeValues $date_range_values Values instance. */ if ( isset( $date_range_values[0], $date_range_values[1] ) && ( 0 < $date_range_values[0] || 0 < $date_range_values[1] ) ) { $has_data = true; break 2; } } }
Questo codice dovrebbe quindi essere seguito dallo snippet che abbiamo incluso nella sezione precedente per l'impostazione dei transitori.
3. Eliminazione dei transitori
In alcuni casi, potresti scoprire di voler rimuovere un transitorio. Ad esempio, se desideri visualizzare sempre le analisi più aggiornate in Google Site Kit, sarebbe meglio non memorizzare nella cache i dati (sebbene non ti consigliamo di eliminare effettivamente i transitori di Site Kit).
In caso contrario, il plug-in mostrerà gli stessi risultati per tutto il giorno, anche se hai avuto nuovi visitatori. Poiché il transitorio dura 24 ore, i dati visualizzati nel pomeriggio saranno semplicemente una versione memorizzata nella cache dei dati caricati al mattino.
Il modo più semplice per eliminare i transitori è utilizzare il plug-in Transient Manager. Tuttavia, se si desidera invece utilizzare il codice, è possibile utilizzare la funzione delete_transient() . Tutto ciò di cui hai bisogno è la chiave transitoria:
delete_transient('key');
Tuttavia, dovrai ripetere questa operazione per ogni transitorio che desideri eliminare.
Scadenza transitoria: come funziona?
I periodi di scadenza transitori possono essere espressi in diversi modi. Le due opzioni più semplici sono:
- In secondi ( set_transient('key', $value, 86400))
- Utilizzo delle costanti di tempo di WordPress ( set_transient('key', $value, DAY_IN_SECONDS))
In alternativa, puoi anche impostare transienti senza scadenza. Ciò può essere utile in situazioni in cui si desidera mantenere gli stessi dati transitori fino a quando non si eliminano e reimpostano manualmente le informazioni memorizzate nella cache.
La creazione di transienti senza scadenza è piuttosto semplice. Lascia semplicemente vuoto il parametro di scadenza nella funzione set_transient o identificalo come zero.
Comprensione dell'API Transient di WordPress
L'API Transient di WordPress è semplicemente il mezzo con cui le informazioni vengono memorizzate nella cache del database del tuo sito. Abilita tutte le operazioni correlate che abbiamo discusso in questo post, inclusa l'impostazione, il recupero e l'eliminazione di transienti.
In altre parole, l'API Transient è solo la parte del core di WordPress che ti consente di utilizzare i transienti.
Le due implementazioni più comuni del backend dell'API Transients:
- Quello integrato in WordPress, e quindi di gran lunga il più comune. I valori transitori sono memorizzati nella tabella wp_options proprio come le normali opzioni. Con i transitori, viene memorizzata un'opzione aggiuntiva per contenere la data di scadenza. Quando si accede a un transitorio, WordPress estrae prima la data di scadenza. Se è scaduto, WordPress elimina entrambe le opzioni dalla tabella, "ripulendo" i dati e facendo finta che i dati non siano mai stati presenti. Se non è scaduto, prende il contenuto dalla tabella delle opzioni.
- Memcached. Memcached è un software lato server molto semplice ma efficiente e affidabile progettato per fare esattamente ciò che dovrebbe fare l'API Transients: archiviare i dati in base a una chiave, che scade in un dato momento e che può svanire in qualsiasi momento se necessario A.
L'uso di memcached invece di WordPress Transient ha due vantaggi speciali, motivo per cui lo preconfiguriamo automaticamente per te qui su WP Engine. Ti copriamo le spalle
io. Memcached è 10x-100x più veloce nell'archiviazione e nel recupero dei valori rispetto ai Transienti di WordPress, il che è particolarmente interessante poiché lo scopo dei transitori è quello di memorizzare nella cache i dati per aumentare la velocità di un sito.
ii. Memcached imposta la quantità massima di spazio che occuperà con i dati (ad es. 64 MB di RAM), il che significa che se un sito memorizza troppi dati contemporaneamente, eliminerà automaticamente i vecchi dati e quindi non esaurirà mai lo spazio. Ma i Transient WordPress integrati memorizzeranno una quantità arbitraria di dati nella tabella delle opzioni.
Applicazione di transitori nel tuo sviluppo
Supponiamo che tu stia leggendo e scrivendo ripetutamente la stessa chiave Transient e supponi che sia 1k di dati. In tal caso, sia Memcached che WordPress Transient faranno esattamente ciò che ti aspetti, ed entrambi occuperanno circa 1k di spazio (nella tabella delle opzioni o in memcached).
Supponiamo ora di leggere e scrivere diverse chiavi Transient, diverse per ogni sessione del browser. In breve, cosa succede se memorizzi i dati della sessione utente in Transient? Questo ha senso in superficie. I dati della sessione non dovrebbero durare per sempre e non vuoi preoccuparti di tabelle di database speciali. Oltre a ciò, molte società di hosting WordPress non consentono sessioni PHP, quindi questa è davvero la cosa migliore. È anche veloce e multi-server.
Ecco dove appaiono le differenze. Con Memcached, e con un sito a basso traffico, questo metodo sembra funzionare. I valori durano per un po', poi vengono cancellati quando scadono. Tuttavia, se il server è molto carico, la quantità di dati di sessione che il server deve archiviare supererà lo spazio disponibile in memcached e quindi inizierai a perdere i dati di sessione prima di quanto pensassi. E se non hai testato in questo ambiente esatto, pesantemente caricato, non lo sapresti mai. In generale, questi ambienti finiscono per riempire memcached così rapidamente che di fatto memcached viene disabilitato perché non può mai trattenere i dati abbastanza a lungo da essere utile. In effetti non hai affatto una cache API transitoria!
Ma con i Transient di WordPress, ottieni un comportamento diverso ma ancora molto indesiderabile. Poiché i valori vengono scritti nel database, non in un blocco di RAM di dimensioni fisse, rimangono tutti in giro. Ciò significa che anche con il sito pesantemente caricato, hai ancora i dati della tua sessione. Eccezionale!
O così pensavi. Perché ciò che non viene detto nell'API transitoria è ciò che accade quando si utilizzano chiavi univoche come le sessioni. E quello che succede con il metodo integrato è che la tabella delle opzioni si riempie all'infinito! Perché: la "pulizia dei vecchi dati" di WordPress funziona solo quando richiedi la chiave (come spiegato in precedenza). Se lasci semplicemente la chiave, viene lasciata nella tabella delle opzioni, per sempre. Non esiste un processo separato che pulisca questi!
Non solo siamo a conoscenza di questo problema, vogliamo aiutare i nostri clienti che potrebbero eseguire codice che non lo comprende. È qui che entra in gioco il "gestito" in Managed WordPress! Ogni notte, abbiamo un processo automatizzato per esaminare la tabella delle opzioni per i transitori scaduti ed eliminarli (sia i dati che l'elemento della data di scadenza). Boom! Se ne sono andati e non devi preoccuparti di loro.
Quindi è fantastico che lo facciamo, ma come sviluppatore di un plugin o tema generale che dovrebbe funzionare correttamente su qualsiasi ambiente di hosting, non puoi farlo in tutti i potenziali ambienti che il tuo plugin o tema potrebbe essere distribuito, e tu vuoi assicurarti di fornire ai tuoi utenti e clienti il codice più ottimizzato possibile.
Tuttavia, ora che sai come i transitori possono andare storti, potrebbe essere una fantastica idea dare un'occhiata e vedere come puoi rendere il tuo codice più efficiente. È probabile che, se hai letto fino a qui, ti piaccia ottimizzare il tuo codice e questo post sul blog potrebbe lanciare il guanto di sfida per te e motivarti a riscrivere alcune cose per essere più scalabile!
Fai di più con il tuo sito WordPress
In qualità di sviluppatore di WordPress, è fondamentale fornire ai tuoi utenti finali l'accesso ai dati remoti mantenendo prestazioni elevate. I transitori di WordPress possono aiutarti a realizzare proprio questo.
Tuttavia, non fa male ottenere un piccolo aiuto extra dall'hosting WordPress velocissimo e dalle risorse per sviluppatori professionali. Che tu sia un principiante della programmazione o un professionista esperto, siamo pronti ad aiutarti. Dai un'occhiata ai nostri piani oggi!