Come velocizzare il filtraggio dei prodotti WooCommerce su cataloghi di grandi dimensioni con HUSKY
Quando un negozio WooCommerce cresce oltre diverse migliaia di prodotti, il filtro prodotti può diventare un collo di bottiglia. Ogni taxonomy term necessita di una count query, ogni attribute aggiunge un join, e Dynamic Recount moltiplica il lavoro del database. HUSKY (precedentemente WOOF) include diversi meccanismi di caching e hooks integrati progettati specificamente per cataloghi di grandi dimensioni. Questo articolo copre solo le funzionalità che esistono nel codice sorgente del plugin — nessuna impostazione ipotetica, nessun hook inventato.
Abilitare Cache Dynamic Recount
In HUSKY → Avanzate → Opzioni troverai l'impostazione Cache dynamic recount number for each item in filter. Quando abilitato, HUSKY memorizza i risultati del recount per ogni term nella tabella delle opzioni di WordPress o come un transient, in modo che i successivi caricamenti di pagina saltino completamente le counting queries. Questo è l'interruttore più efficace per i negozi che utilizzano Dynamic Recount con molti taxonomy terms.
La cache viene svuotata secondo una pianificazione, non in base ai cambiamenti dei prodotti. L'intervallo è impostato dall'opzione di auto-pulizia accanto all'impostazione della cache (la scadenza predefinita è una settimana). Dopo aver aggiunto o importato un lotto di prodotti, puoi svuotarla manualmente con il pulsante clear cache nel pannello di amministrazione.
Abilitare Cache Terms
Accanto al recount cache si trova l'impostazione Cache terms. Quando il modulo di filtro contiene un gran numero di terms (centinaia di categorie di prodotti, attributes o tags), questa opzione memorizza nella cache l'elenco di terms renderizzato in modo che l'HTML non debba essere ricostruito ad ogni caricamento di pagina.
Funziona allo stesso modo del recount cache: svuotato secondo una pianificazione, con il proprio intervallo di auto-pulizia e un pulsante clear terms cache nell'admin. Per i negozi con alberi di categorie profondamente annidati o molti attribute values, l'abilitazione di entrambe le cache insieme riduce sostanzialmente il carico del database per richiesta.
Utilizzare Turbo Mode per dati di prodotti pre-generati
Turbo Mode è l'ottimizzazione più potente che HUSKY offre per cataloghi di grandi dimensioni. Quando abilitato, pre-genera un flat file contenente i product IDs filtrati per ogni combinazione di active terms. Invece di costruire ed eseguire complessi WP_Query + tax_query + meta_query ad ogni filter request, il plugin legge un file pre-calcolato — la differenza nel tempo di risposta è spesso un ordine di grandezza.
Turbo Mode è configurato in HUSKY → Estensioni → Turbo Mode. La rigenerazione del file può essere pianificata tramite WordPress cron o, per affidabilità, tramite un crontab di server reale (vedi le FAQ sulla configurazione di Turbo Mode cron).
Regolare il limite di prodotti di Turbo Mode
Per impostazione predefinita, Turbo Mode elabora fino a 15,000 prodotti durante la generazione della cache. Nei negozi con più prodotti, la generazione si interrompe prima che tutti i prodotti siano indicizzati. Utilizza il woof_turbo_mode_products_limit hook per aumentare questo limite:
add_filter('woof_turbo_mode_products_limit', function($limit) {
// Increase limit for catalogs larger than 15,000 products
return 50000;
});
L'hook si trova in ext/turbo_mode/index.php:277. Imposta il valore sufficientemente alto da coprire l'intero catalogo, ma fai attenzione al PHP execution time e ai memory limits durante la generazione del file.
Ottimizzare il Counter Method per siti di grandi dimensioni
Il sistema Dynamic Recount utilizza un contatore basato su WP_Query che può consumare memoria significativa nei negozi con molti prodotti. Il woof_counter_method hook (fonte: classes/counter.php) ti consente di passare a un metodo di conteggio più leggero che imposta nopaging=false e posts_per_page=1, riducendo la memoria per query a costo di conteggi potenzialmente meno precisi:
add_filter('woof_counter_method', function($saving_memory) {
// Enable memory-saving counter mode
return true;
});
Testalo prima sul tuo sito staging — funziona bene su alcune configurazioni ma non su tutte.
Personalizzare la Filter Query con woof_products_query
Il woof_products_query filter hook (fonte: index.php) passa l'array completo $query_args prima che venga eseguita la WP_Query. Usalo per aggiungere custom meta queries, escludere determinati prodotti o regolare la query structure per le prestazioni:
add_filter('woof_products_query', function($query_args) {
// Exclude products that should never appear in filter results
$query_args['meta_query'][] = array(
'key' => '_exclude_from_filter',
'compare' => 'NOT EXISTS'
);
return $query_args;
});
Per manipolazioni a livello di taxonomy (modifica degli relation operators tra taxonomies), usa il woof_main_query_tax_relations hook correlato.
Abilitare WordPress Object Cache per i dati del filtro
HUSKY supporta il woof_use_wp_cache hook per instradare i suoi dati interni attraverso il WordPress object cache. Se utilizzi già un persistent object cache backend (Redis, Memcached), l'abilitazione di questo hook sposta i dati del filtro fuori dal database e in una memoria veloce in-memory storage:
add_filter('woof_use_wp_cache', function($is){
return true;
});
Importante: Questo hook non ha effetto senza un plugin di persistent object caching installato. Non è un sostituto delle impostazioni di cache integrate — le integra quando il tuo ambiente di hosting supporta object caching.
Combinare le impostazioni per i migliori risultati
La base consigliata per un catalogo di grandi dimensioni (oltre 10,000 prodotti, molti taxonomy terms):
- Abilitare Cache dynamic recount e Cache terms in Avanzate → Opzioni
- Abilitare Turbo Mode e impostare il limite di prodotti per corrispondere alla dimensione del tuo catalogo
- Applicare
woof_use_wp_cachese un persistent object cache è disponibile - Testare
woof_counter_methodsu staging per vedere se la modalità di risparmio di memoria funziona per la tua configurazione - Utilizzare
woof_products_querysolo quando è necessario escludere prodotti specifici dai risultati del filtro
Inizia con i due interruttori di cache integrati — non richiedono modifiche al codice e offrono il miglioramento più evidente da soli.