Oggi eseguo un test sul mio db per esplorare la differenza di velocità tra l'accesso a una chiave da opzioni, tabella personalizzata e transitori. Ho eseguito il test per 1000 volte e di seguito è riportato il tempo impiegato per eseguire 1000 operazioni get:
Tenere presente che la tabella delle opzioni viene utilizzata sia per le opzioni che per i transitori sulla maggior parte dei sistemi e che la tabella è stata ottimizzata, con l'aggiunta di indici. Quindi non è un confronto equo
get_transient () 0,0245 secondi get_option () 0,0068 secondi operazione di selezione semplice dalla tabella personalizzata 0,65 secondi
Anche questo è un confronto ingiusto, le opzioni con l' autoload
opzione impostata verranno caricate in anticipo in una singola query all'inizio. Quindi get_option
sta tirando da WP_Cache
, l'opzione è già stata recuperata.
TLDR: in realtà non sta recuperando l'opzione, è già stata recuperata, ma è semplicemente estratta dalla memoria a causa autoload
dell'opzione
Ho anche verificato che il transitorio non fosse scaduto durante questo test.
Ciò non dovrebbe avere un impatto su un normale sistema sul recupero temporaneo, dopo tutto non sa se è scaduto fino a quando non è stato recuperato.
Quindi la domanda è: get_option () è più veloce di get_transient () o ho sbagliato qualcosa nel mio test?
Dipende:
- Sulla maggior parte dei sistemi, i transitori vengono archiviati utilizzando le opzioni, entrambi implicano una
get_option
chiamata
- Le opzioni
autoload
impostate su true vengono tutte caricate in una singola chiamata all'inizio, quindi vengono mantenute in memoria, quindi non si verificano query
- La memorizzazione nella cache degli oggetti memorizza nella cache sia le opzioni caricate automaticamente che i transitori
Il ritardo della tabella personalizzata è dovuto alla memorizzazione nella cache delle opzioni predefinite da WordPress?
Molto possibile, ma quanto velocemente richiede tale selezione dipende molto dalla query e dal design della tabella
Inoltre, le opzioni sono anche memorizzate nella cache da diversi plug-in di cache come i transitori?
Sì, WP_Cache
viene utilizzato, che lo memorizzerà in memoria per il resto della richiesta. I plug-in di memorizzazione nella cache potrebbero conservare questi valori per motivi di prestazioni.
ripetibilità
Questi sono tutti memorizzati nella cache, WP_Cache
quindi la seconda volta che lo richiedi, nessun DB è coinvolto.
Variabilità e dipende
Tutto ciò presuppone una base comune, ma per quanto riguarda le cache degli oggetti?
Consente di introdurre un'istanza MemcacheD o un'istanza Redis (consiglio vivamente di farlo se si dispone dell'opzione, VANTAGGI vantaggi prestazionali per siti ben costruiti, soprattutto se li si utilizza per la memorizzazione nella cache delle pagine, a meno che non si abbia qualcosa come l'installazione di Varnish)
Ora abbiamo una nuova situazione:
- Ora i dati vengono archiviati nella RAM e, una volta recuperati dal DB, vengono caricati e i tempi di accesso vengono drasticamente ridotti. Ancora più lento di una variabile, ma significativamente più veloce di una query del database
- Molti nuovi dati sono archiviati in quelli
WP_Cache
che normalmente non lo sono. Ad esempio WP_Post
oggetti, post meta, ecc
WP_Cache
ora persiste tra le richieste
- MemcacheD ecc. Può eliminare i transitori scaduti, ecc
Quindi ora i transitori e le opzioni hanno lo stesso costo di accesso. Erano già vicini, ma ora sono trascurabili e hanno più a che fare con il carico della CPU al momento della richiesta.
Quindi per prestazioni dovrei usare i transitori o le opzioni?
Sebbene sia una domanda degna di cui chiedersi, la risposta è che la differenza è trascurabile e nei margini di errore
Quindi smetti di microottimizzare, sono lo stesso supporto di archiviazione e questo non è degno del tuo tempo
- Utilizzare le opzioni se è necessario archiviare qualcosa che è a livello di sito
- Usa i transitori per archiviare temporaneamente le cose che sono costose da calcolare in modo da non doverle andare alla volta successiva
Non vale la pena dedicare del tempo a sceglierne uno in base alle prestazioni, non c'è differenza significativa.
Ci sono cose molto migliori da fare per ottimizzare che offrono risparmi significativamente maggiori, ad esempio usare tassonomie invece di meta nelle query post, non usare __not
parametri di stile, fare meno cose sulla pagina, installare una cache degli oggetti, ridurre i post per pagina, evitare richieste remote eccetera
Che dire di un tavolo personalizzato che ...
No, la tabella delle opzioni è già ben ottimizzata, l'utilizzo di una tabella personalizzata sposta semplicemente le operazioni al di fuori del sistema di cache WP, costringendoti a scrivere le tue