HUSKY - Products Filter Professional for WooCommerce

Comment accélérer les recherches textuelles de WOOF

Si votre site a un grand nombre de produits (3000+) et que vous rencontrez des problèmes de lenteur de recherche avec [woof_text_filter], ce guide vous aidera à l'optimiser.

Le problème

Par défaut, HUSKY utilise la méthode SQL JOIN pour les recherches, ce qui peut ralentir sur de grandes bases de données. Les recherches textuelles prenant 10 secondes ou plus et les retards causés par le filtrage des catégories sont des symptômes courants.

Solution 1 : Activer la méthode de recherche rapide (post__in)

Le plugin dispose d'une méthode de recherche plus rapide intégrée qui utilise post__in au lieu de jointures SQL. C'est beaucoup plus efficace pour les grands catalogues de produits.

Mise en œuvre

Ajoutez cette seule ligne à votre thème functions.php fichier :

add_filter('woof_husky_query_post__in', '__return_true');

Résultats attendus

  • Vitesse de recherche textuelle : De 10+ secondes à 1-3 secondes
  • Fonctionne immédiatement après l'ajout du code
  • Aucune modification de base de données requise

Solution 2 : Optimiser le filtrage des catégories

Si le filtrage par catégorie est toujours lent après avoir activé la recherche rapide, vous avez deux options :

Option A : Ajouter des index de base de données (Recommandé)

Les index de base de données accélèrent considérablement les requêtes de catégories en optimisant la term_relationships et term_taxonomy tables.

Ajoutez ce code à votre 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);
}

Comment ça marche :

  • S'exécute une fois au premier chargement de la page d'administration
  • Crée des index de base de données optimisés
  • Enregistre le drapeau d'achèvement pour éviter la réexécution

Résultats attendus :

  • Filtrage par catégorie : De plusieurs secondes à < 1 seconde
  • Solution permanente (les index restent après la suppression du code)

Option B : Mettre en cache les requêtes de catégorie

Si vous ne pouvez pas modifier la structure de la base de données ou si vous souhaitez une approche différente, la mise en cache offre une bonne amélioration des performances.

Ajoutez ce code à votre 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);
    }
}

Comment ça marche :

  • Met en cache les résultats du filtre de catégorie pendant 1 heure
  • Génère une clé de cache unique par combinaison de filtre
  • Renvoie les identifiants de produits mis en cache lors de recherches identiques ultérieures

Résultats attendus :

  • Première recherche : Vitesse normale
  • Recherches identiques ultérieures : Résultats quasi instantanés
  • Le cache expire automatiquement après 1 heure

Quelle solution utiliser ?

Pour les problèmes de vitesse de recherche textuelle :

Utiliser la Solution 1 (filtre post__in) – c’est la correction la plus simple et la plus efficace.

Pour les problèmes de vitesse de filtrage des catégories :

Utiliser la solution 2A (Index de base de données) si :

  • Vous avez accès à la base de données
  • Vous voulez une optimisation permanente
  • Vous avez besoin d'une vitesse constante pour toutes les requêtes

Utilisez la Solution 2B (Mise en cache) si :

  • Vous ne pouvez pas modifier la structure de la base de données
  • Vos utilisateurs répètent souvent les mêmes recherches
  • Vous avez des modèles de recherche variables

Combinaison de solutions :

Vous pouvez utiliser en toute sécurité toutes les solutions ensemble pour une performance maximale :

  1. Activer post__in méthode (Solution 1)
  2. Ajouter des index de base de données (Solution 2A)
  3. Ajouter la mise en cache (Solution 2B) – facultatif pour un coup de pouce supplémentaire

Notes importantes

  • Thème enfant requis: Ajoutez toujours le code à un thème enfant functions.php pour éviter les pertes lors des mises à jour du thème
  • Sauvegarde d'abord: Avant d'ajouter des index de base de données, sauvegardez votre base de données
  • Environnement de test: Testez les solutions sur un site de staging si possible
  • Nettoyage du cache: Si vous utilisez une solution de mise en cache, n'oubliez pas que les résultats mis en cache sont mis à jour toutes les heures

Tester vos modifications

  1. Ajoutez le code à votre functions.php
  2. Effacer tous les caches (navigateur, WordPress, serveur)
  3. Testez une recherche qui était auparavant lente
  4. Surveiller l'amélioration du temps de recherche

Optimisation côté serveur

Si ces solutions n’apportent pas d’amélioration suffisante, envisagez :

  • Passer à un hébergement plus rapide
  • Activation de la mise en cache d'objets (Redis/Memcached)
  • Optimisation de la configuration de votre serveur de base de données
  • Réduire le nombre de plugins actifs

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