HUSKY - Products Filter Professional for WooCommerce

Wie man die Textfilter-Suchen von WOOF beschleunigt

Wenn Ihre Website eine große Anzahl von Produkten (3000+) hat und Sie langsame Suchleistung mit [woof_text_filter], diese Anleitung hilft Ihnen bei der Optimierung.

Das Problem

Standardmäßig verwendet HUSKY die SQL JOIN-Methode für Suchen, was bei großen Datenbanken langsam werden kann. Textsuchanfragen, die 10+ Sekunden dauern, und Kategorie-Filterung, die Verzögerungen verursacht, sind häufige Symptome.

Lösung 1: Schnelle Suchmethode aktivieren (post__in)

Das Plugin verfügt über eine integrierte schnellere Suchmethode, die verwendet post__in anstelle von SQL JOINs. Dies ist wesentlich effizienter für große Produktkataloge.

Implementierung

Fügen Sie diese einzelne Zeile zu Ihrem Theme hinzu functions.php Datei:

add_filter('woof_husky_query_post__in', '__return_true');

Erwartete Ergebnisse

  • Textsuchgeschwindigkeit: Von 10+ Sekunden auf 1-3 Sekunden
  • Funktioniert sofort nach dem Hinzufügen des Codes
  • Keine Datenbankänderungen erforderlich

Lösung 2: Kategorie-Filterung optimieren

Wenn die Kategorie-Filterung auch nach Aktivierung der Schnellsuche langsam ist, haben Sie zwei Möglichkeiten:

Option A: Datenbankindizes hinzufügen (empfohlen)

Datenbankindizes beschleunigen Kategorieabfragen dramatisch durch Optimierung des term_relationships und term_taxonomy Tabellen.

Fügen Sie diesen Code zu Ihrem hinzu 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);
}

So funktioniert es:

  • Läuft einmal beim ersten Laden der Admin-Seite
  • Erstellt optimierte Datenbankindizes
  • Speichert Abschlussflagge, um erneutes Ausführen zu verhindern

Erwartete Ergebnisse:

  • Kategorie-Filterung: Von mehreren Sekunden auf < 1 Sekunde
  • Permanente Lösung (Indizes bleiben nach Code-Entfernung erhalten)

Option B: Kategorieabfragen zwischenspeichern

Wenn Sie die Datenbankstruktur nicht ändern können oder einen anderen Ansatz wünschen, bietet Caching eine gute Leistungssteigerung.

Fügen Sie diesen Code zu Ihrem hinzu 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);
    }
}

So funktioniert es:

  • Cacht die Kategorie-Filterergebnisse für 1 Stunde
  • Generiert einen eindeutigen Cache-Schlüssel pro Filterkombination
  • Gibt gecachte Produkt-IDs bei nachfolgenden identischen Suchen zurück

Erwartete Ergebnisse:

  • Erste Suche: Normale Geschwindigkeit
  • Nachfolgende identische Suchen: Nahezu sofortige Ergebnisse
  • Cache läuft nach 1 Stunde automatisch ab

Welche Lösung soll verwendet werden?

Bei Problemen mit der Textsuche-Geschwindigkeit:

Lösung 1 verwenden (post__in Filter) – das ist die einfachste und effektivste Lösung.

Für Probleme mit der Geschwindigkeit der Kategorie-Filterung:

Lösung 2A verwenden (Datenbankindizes) wenn:

  • Sie haben Datenbankzugriff
  • Sie möchten eine permanente Optimierung
  • Sie benötigen eine konsistente Geschwindigkeit für alle Abfragen

Verwenden Sie Lösung 2B (Caching) falls:

  • Sie können die Datenbankstruktur nicht ändern
  • Ihre Benutzer wiederholen oft dieselben Suchanfragen
  • Sie haben variable Suchmuster

Kombination von Lösungen:

Sie können alle Lösungen sicher zusammen für maximale Leistung nutzen:

  1. Aktivieren post__in Methode (Lösung 1)
  2. Datenbankindizes hinzufügen (Lösung 2A)
  3. Caching hinzufügen (Lösung 2B) – optional für zusätzliche Leistung

Wichtige Hinweise

  • Child Theme erforderlich: Fügen Sie Code immer zu einem Child-Theme hinzu functions.php um Verluste während Theme-Updates zu vermeiden
  • Erst sichern: Sichern Sie Ihre Datenbank, bevor Sie Datenbankindizes hinzufügen
  • Testumgebung: Testen Sie Lösungen zuerst auf einer Staging-Website, wenn möglich
  • Cache leeren: Wenn Sie eine Caching-Lösung verwenden, denken Sie daran, dass zwischengespeicherte Ergebnisse stündlich aktualisiert werden.

Testen Sie Ihre Änderungen

  1. Fügen Sie den Code zu Ihrem hinzu functions.php
  2. Alle Caches löschen (Browser, WordPress, Server)
  3. Testen Sie eine Suche, die zuvor langsam war
  4. Verbesserung der Suchzeit überwachen

Serverseitige Optimierung

Wenn diese Lösungen keine ausreichende Verbesserung bieten, sollten Sie Folgendes in Betracht ziehen:

  • Auf schnelleres Hosting umsteigen
  • Aktivieren von Objekt-Caching (Redis/Memcached)
  • Optimierung Ihrer Datenbankserverkonfiguration
  • Reduzierung der Anzahl aktiver Plugins

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