HUSKY - Products Filter Professional for WooCommerce

Come accelerare le ricerche del filtro testuale di WOOF

Se il tuo sito ha un gran numero di prodotti (3000+) e stai riscontrando prestazioni di ricerca lente con [woof_text_filter], questa guida ti aiuterà a ottimizzarlo.

Il problema

Per impostazione predefinita, HUSKY utilizza il metodo SQL JOIN per le ricerche, che può diventare lento su database di grandi dimensioni. Le ricerche di testo che impiegano più di 10 secondi e i ritardi nel filtraggio delle categorie sono sintomi comuni.

Soluzione 1: Abilita Metodo di Ricerca Veloce (post__in)

Il plugin ha un metodo di ricerca più veloce integrato che utilizza post__in invece di JOIN SQL. Questo è molto più efficiente per cataloghi di prodotti di grandi dimensioni.

Implementazione

Aggiungi questa singola riga al tuo tema functions.php file:

add_filter('woof_husky_query_post__in', '__return_true');

Risultati attesi

  • Velocità ricerca testo: Da 10+ secondi a 1-3 secondi
  • Funziona immediatamente dopo aver aggiunto il codice
  • Nessuna modifica al database richiesta

Soluzione 2: Ottimizza il filtraggio delle categorie

Se il filtraggio delle categorie è ancora lento dopo aver abilitato la ricerca veloce, hai due opzioni:

Opzione A: Aggiungere Indici al Database (Consigliato)

Gli indici del database velocizzano notevolmente le query delle categorie ottimizzando il term_relationships e term_taxonomy tabelle.

Aggiungi questo codice al tuo functions.php:

add_action('admin_init', 'add_woof_category_indexes', 999);

function add_woof_category_indexes() {
    global $wpdb;

    // Run only once
    if (get_option('woof_category_indexes_added')) {
        return;
    }

    // Add index to term_relationships table
    $wpdb->query("
        ALTER TABLE {$wpdb->term_relationships}
        ADD INDEX woof_cat_idx (object_id, term_taxonomy_id)
    ");

    // Add index to term_taxonomy table
    $wpdb->query("
        ALTER TABLE {$wpdb->term_taxonomy}
        ADD INDEX woof_tax_idx (taxonomy, term_id)
    ");

    // Mark as completed
    update_option('woof_category_indexes_added', true);
}

Come funziona:

  • Eseguito una volta al primo caricamento della pagina di amministrazione
  • Crea indici del database ottimizzati
  • Archivia il flag di completamento per prevenire ri-esecuzioni

Risultati attesi:

  • Filtraggio per categoria: Da diversi secondi a < 1 secondo
  • Soluzione permanente (gli indici rimangono dopo la rimozione del codice)

Opzione B: Caching delle Query delle Categorie

Se non puoi modificare la struttura del database o desideri un approccio diverso, la cache offre un buon miglioramento delle prestazioni.

Aggiungi questo codice al tuo functions.php:

add_filter('woof_get_query_args', 'cache_woof_category_queries', 10, 1);

function cache_woof_category_queries($args) {
    // Only cache when category filter is used
    if (empty($_GET['product_cat'])) {
        return $args;
    }

    // Generate cache key based on current filters
    $cache_key = 'woof_cat_' . md5(serialize($_GET));
    $cached_ids = get_transient($cache_key);

    // Return cached results if available
    if ($cached_ids !== false) {
        $args['post__in'] = $cached_ids;
        return $args;
    }

    return $args;
}

add_action('pre_get_posts', 'store_woof_category_cache', 999);

function store_woof_category_cache($query) {
    // Store query results in cache
    if (!empty($_GET['product_cat']) && !empty($query->posts)) {
        $cache_key = 'woof_cat_' . md5(serialize($_GET));
        $post_ids = wp_list_pluck($query->posts, 'ID');
        set_transient($cache_key, $post_ids, HOUR_IN_SECONDS);
    }
}

Come funziona:

  • Mette in cache i risultati del filtro per categoria per 1 ora
  • Genera una chiave cache univoca per ogni combinazione di filtri
  • Restituisce ID prodotto memorizzati nella cache per ricerche identiche successive

Risultati attesi:

  • Prima ricerca: Velocità normale
  • Ricerche identiche successive: Risultati quasi istantanei
  • La cache scade automaticamente dopo 1 ora

Quale Soluzione Utilizzare?

Per problemi di velocità della ricerca testuale:

Usa Soluzione 1 (filtro post__in) – questa è la correzione più semplice ed efficace.

Per problemi di velocità del filtro per categoria:

Usa la Soluzione 2A (Indici del database) se:

  • Hai accesso al database
  • Vuoi un'ottimizzazione permanente
  • Hai bisogno di una velocità costante per tutte le query

Usa la Soluzione 2B (Caching) se:

  • Non puoi modificare la struttura del database
  • I tuoi utenti ripetono spesso le stesse ricerche
  • Hai schemi di ricerca variabili

Combinazione di Soluzioni:

Puoi usare in sicurezza tutte le soluzioni insieme per massime prestazioni:

  1. Abilita post__in metodo (Soluzione 1)
  2. Aggiungi indici al database (Soluzione 2A)
  3. Aggiungi caching (Soluzione 2B) – opzionale per un boost extra

Note importanti

  • Tema Child Richiesto: Aggiungi sempre il codice a un child theme functions.php per evitare perdite durante gli aggiornamenti del tema
  • Backup prima: Prima di aggiungere indici al database, esegui un backup del tuo database
  • Ambiente di Test: Testa le soluzioni prima su un sito di staging, se possibile
  • Pulizia Cache: Se si utilizza una soluzione di caching, ricordare che i risultati memorizzati nella cache vengono aggiornati ogni ora

Testare le tue modifiche

  1. Aggiungi il codice al tuo functions.php
  2. Cancella tutte le cache (browser, WordPress, server)
  3. Testa una ricerca che in precedenza era lenta
  4. Monitora il miglioramento del tempo di ricerca

Ottimizzazione lato server

Se queste soluzioni non forniscono miglioramenti sufficienti, considera:

  • Aggiornamento a hosting più veloce
  • Abilitazione del caching degli oggetti (Redis/Memcached)
  • Ottimizzazione della configurazione del tuo server di database
  • Riduzione del numero di plugin attivi

Fonte: https://pluginus.net/support/topic/very-slow-woof_text_filter-searches/