WordPress 6.1 Miglioramenti delle prestazioni di WP_Query
Con l’arrivo di WordPress 6.1, gli sviluppatori possono aspettarsi un notevole miglioramento delle prestazioni del proprio sito web. Una delle principali novità è l’aggiunta di un sistema di caching per le query del database nella classe WP_Query. Ciò significa che se la stessa query del database viene eseguita più volte, il risultato verrà caricato dalla cache. Per coloro che utilizzano la memorizzazione nella cache degli oggetti persistenti, ciò significa che la query del database non verrà eseguita nuovamente fino a quando la cache non verrà invalidata, con conseguente riduzione del numero di query al database. Anche i siti che utilizzano la memorizzazione nella cache in memoria vedranno un beneficio dal non dover ripetere queste query, anche se l’aumento delle prestazioni non sarà così significativo.
Utilizza le funzioni principali come wp_insert_psost
Per gli sviluppatori che fanno personalizzazioni, è importante utilizzare le funzioni principali come wp_insert_post per aggiungere post al database. Queste funzioni sono ben mantenute e garantiscono che le cache vengano invalidate correttamente. Se si aggiorna direttamente il database, si consiglia di chiamare la funzione clean_post_cache dopo aver aggiornato la riga del database.
Possiamo utilizzare il paramentro cache_results
È importante notare che per impostazione predefinita, tutte le chiamate a WP_Query verranno memorizzate nella cache. È possibile non utilizzare la cache per le query passando il parametro cache_results come false. Ad esempio:
$args = array(
'posts_per_page' => 50,
'cache_results' => false
);
$query = new WP_Query( $args );
Quindi se vogliamo avere tutto in cache non dobbiamo passare nessun parametro al nostro array, di base passeremo appunto il parametro cache true. Se vogliamo non mandare in cache il nostro array come abbiamo visto qui sopra nell’ esempio di codice possiamo passare il parametro “false”.
Disattivare il parametro cache tramite Function php
Oltre ad utilizzare il parametro in ogni singolo array, possiamo Inoltre, disattivare la cache globalmente utilizzando un filtro tramite una funzione:
function disable_caching( $wp_query ) {
$wp_query->query_vars['cache_results'] = false;
}
add_action( 'parse_query', 'disable_caching' );
Disattivare la cache in questo modo dovrebbe essere fatto solo in casi estremi. Per ottenere le migliori prestazioni, è altamente consigliato mantenere la cache attivata e invalidare le cache utilizzando la funzione clean_post_cache.
Le chiavi della cache vengono generate utilizzando i parametri passati all’istanza della classe WP_Query. Tuttavia, i seguenti parametri vengono ignorati:
- suppress_filters
- cache_results
- fields
- update_post_meta_cache
- update_post_term_cache
- update_menu_item_cache
- lazy_load_term_meta
Questi parametri non influiscono sulla query del database che viene eseguita. Il parametro più importante ignorato è fields. Ciò significa che se si esegue il seguente codice:
$args1 = array(
'posts_per_page' => 50,
'fields' => 'ids'
);
$query1 = new WP_Query( $args1 );
$args2 = array(
'posts_per_page' => 50,
'fields' => 'all'
);
$query2 = new WP_Query( $args2 );
In entrambi i casi, la query ora richiederà tutti i campi, in modo che il risultato possa essere memorizzato nella cache e quindi utilizzato indipendentemente dal parametro fields. In precedenza, la query del database per questi due casi era diversa, ma mantenerla così avrebbe comportato più cache per i dati effettivamente sovrapposti. Ciò significa che ora c’è meno miglioramento delle prestazioni quando si limitano i campi ids rispetto alla versione precedente di WordPress.
Questa modifica significa anche che le cache update_post_meta_cache e update_post_term_cache sono sempre rispettate.
Nel caso in cui la caching fosse stata aggiunta a WP_Query utilizzando plugin come advanced-post-cache, Enhanced Post Cache o Cache WP_Query, si consiglia di disattivare e rimuovere questi plugin poiché non sono più necessari.
Cache degli utenti primari in WP_Query
WordPress 6.1 introduce una nuova funzione, update_post_author_caches. In precedenza, i siti con più autori richiedevano diverse singole query del database per ottenere le informazioni dell’autore, poiché l’utente viene caricato come parte del loop. Invece di caricare ogni utente uno per uno, ora le cache degli utenti (autori) vengono caricate in una singola chiamata al database chiamando update_post_author_caches all’inizio del loop, con conseguente riduzione del numero di query al database.
Questa funzione accetta un array di oggetti post e caricherà le cache degli utenti. Le chiamate a update_post_author_caches sono state aggiunte anche in parti chiave del codice per migliorare le prestazioni del database.
Prime oggetti collegati per gli elementi del menu
E’ stata aggiunta una nuova funzione per primare le cache degli oggetti collegati per gli elementi del menu, migliorando così le prestazioni delle query del database per gli elementi del menu. Ciò significa che anziché eseguire una query del database per ogni elemento del menu, le informazioni degli oggetti collegati verranno caricate in una sola chiamata al database, riducendo il numero di query necessarie.
In generale, questi miglioramenti a WP_Query consentiranno ai siti WordPress di caricarsi più velocemente e di essere più scalabili. Gli sviluppatori dovrebbero prendere in considerazione l’utilizzo di queste nuove funzionalità per massimizzare le prestazioni del proprio sito web e migliorare l’esperienza degli utenti.
Pro e contro del nuova sistema Cache di WordPress 6.1
Pro
- Efficienza del Database: La memorizzazione nella cache delle query del database può portare a una riduzione significativa del carico sul database, rendendo il sito più veloce e reattivo.
- Scalabilità: Con meno richieste al database, il sito è più predisposto a gestire un maggior numero di visitatori simultanei.
- Mantenimento della Cache: Utilizzare funzioni come
wp_insert_post
garantisce che le cache vengano invalidate in modo appropriato, evitando problemi di coerenza dei dati. - Flessibilità: L’opzione di disattivare la cache a livello di query o a livello globale offre agli sviluppatori maggiore controllo.
- Ottimizzazione per Autori Multipli: La nuova funzione
update_post_author_caches
riduce il numero di query necessarie per caricare le informazioni sugli autori, utile per siti con molteplici autori. - Miglioramento per gli Elementi del Menu: La funzione per primare le cache degli oggetti collegati agli elementi del menu aiuta a ridurre ulteriormente il carico sul database.
Contro
- Complessità Aggiunta: L’introduzione di nuovi parametri e funzioni può richiedere un periodo di adattamento per gli sviluppatori.
- Possibile Ridondanza: Se si utilizzano già plugin di caching esterni, potrebbe essere necessario rivedere e ottimizzare la configurazione esistente.
- Limitazione dei Campi: L’ignorare il parametro
fields
nella generazione delle chiavi di cache potrebbe non essere ideale per alcuni scenari, rendendo meno efficiente il caricamento di post con campi limitati. - Rischio di Cache Obsoleta: Se non gestita correttamente, la memorizzazione nella cache può portare a problemi di dati obsoleti, specialmente se le query del database sono particolarmente complesse o dinamiche.
- Configurazione Avanzata: Per trarre il massimo beneficio dalle nuove funzioni, potrebbe essere necessaria una comprensione approfondita del sistema di caching e del suo impatto sulle prestazioni.
- Sovraccarico della Memoria: Utilizzare la cache in modo intensivo può comportare un uso maggiore della memoria, che potrebbe essere un problema per hosting con risorse limitate.