WooCommerce-Produktsuche beschleunigen (HUSKY-Textfilter)
Wenn Ihre Website über eine große Anzahl an Produkten verfügt (über 3000) und eine WooCommerce-Produktsuche durchführt[woof_text_filter]langsam ist, hilft Ihnen dieser Leitfaden bei der Optimierung.
Das Problem
Standardmäßig verwendet HUSKY für Suchvorgänge die SQL JOIN-Methode, die bei großen Datenbanken langsam sein kann. Häufige Symptome sind Textsuchen, die mehr als 10 Sekunden dauern, und das Filtern von Kategorien, die zu Verzögerungen führen.
Lösung 1: Schnellsuchmethode aktivieren (post__in)
Das Plugin verfügt über eine integrierte schnellere Suchmethode, die verwendetpost__inanstelle von SQL JOINs. Dies ist bei großen Produktkatalogen deutlich effizienter.
Durchführung
Fügen Sie diese einzelne Zeile zu Ihrem Thema hinzufunctions.phpDatei:
add_filter('woof_husky_query_post__in', '__return_true');
Erwartete Ergebnisse
- Textsuchgeschwindigkeit: Von 10+ Sekunden bis 1-3 Sekunden
- Funktioniert sofort nach dem Hinzufügen des Codes
- Keine Datenbankänderungen erforderlich
Lösung 2: Optimieren Sie die Kategoriefilterung
Wenn die Kategoriefilterung nach der Aktivierung der Schnellsuche immer noch langsam ist, haben Sie zwei Möglichkeiten:
Option A: Datenbankindizes hinzufügen (empfohlen)
Datenbankindizes beschleunigen Kategorieabfragen erheblich, indem sie die optimierenterm_relationships and term_taxonomyTische.
Fügen Sie diesen Code zu Ihrem hinzufunctions.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:
- Wird beim ersten Laden der Admin-Seite einmal ausgeführt
- Erstellt optimierte Datenbankindizes
- Speichert die Abschlussmarkierung, um eine erneute Ausführung zu verhindern
Erwartete Ergebnisse:
- Kategoriefilterung: Von mehreren Sekunden bis < 1 Sekunde
- Dauerhafte Lösung (Indizes bleiben nach dem Entfernen des Codes erhalten)
Option B: Kategorieabfragen zwischenspeichern
Wenn Sie die Datenbankstruktur nicht ändern können oder einen anderen Ansatz wünschen, bietet Caching eine gute Leistungsverbesserung.
Fügen Sie diesen Code zu Ihrem hinzufunctions.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:
- Speichert die Ergebnisse des Kategoriefilters 1 Stunde lang im Cache
- Erzeugt einen eindeutigen Cache-Schlüssel pro Filterkombination
- Gibt bei nachfolgenden identischen Suchen zwischengespeicherte Produkt-IDs zurück
Erwartete Ergebnisse:
- Erste Suche: Normale Geschwindigkeit
- Nachfolgende identische Suchvorgänge: Nahezu sofortige Ergebnisse
- Der Cache läuft nach 1 Stunde automatisch ab
Welche Lösung soll verwendet werden?
Bei Problemen mit der Geschwindigkeit der Textsuche:
Verwenden Sie Lösung 1(post__in-Filter) – dies ist die einfachste und effektivste Lösung.
Bei Geschwindigkeitsproblemen bei der Kategoriefilterung:
Verwenden Sie Lösung 2A(Datenbankindizes), wenn:
- Sie haben Zugriff auf die Datenbank
- Sie wollen eine permanente Optimierung
- Sie benötigen eine konstante Geschwindigkeit für alle Abfragen
Verwenden Sie Lösung 2B(Caching) wenn:
- Sie können die Datenbankstruktur nicht ändern
- Ihre Benutzer wiederholen häufig dieselben Suchanfragen
- Sie haben variable Suchmuster
Kombinationslösungen:
Sie können alle Lösungen sicher zusammen verwenden, um maximale Leistung zu erzielen:
- Aktivieren
post__inMethode (Lösung 1) - Datenbankindizes hinzufügen (Lösung 2A)
- Caching hinzufügen (Lösung 2B) – optional für zusätzlichen Boost
Wichtige Hinweise
- Untergeordnetes Thema erforderlich: Fügen Sie immer Code zu einem untergeordneten Thema hinzu
functions.phpum Verluste bei Theme-Updates zu verhindern - Zuerst sichern: Bevor Sie Datenbankindizes hinzufügen, sichern Sie Ihre Datenbank
- Testumgebung: Testen Sie die Lösungen nach Möglichkeit zuerst auf der Staging-Site
- Cache-Löschen: Wenn Sie eine Caching-Lösung verwenden, denken Sie daran, die zwischengespeicherten Ergebnisse stündlich zu aktualisieren
Testen Sie Ihre Änderungen
- Fügen Sie den Code zu Ihrem hinzu
functions.php - Alle Caches löschen (Browser, WordPress, Server)
- Testen Sie eine Suche, die zuvor langsam war
- Überwachen Sie die Verbesserung der Suchzeit
Serverseitige Optimierung
Wenn diese Lösungen keine ausreichende Verbesserung bringen, sollten Sie Folgendes in Betracht ziehen:
- Upgrade auf schnelleres Hosting
- Objekt-Caching aktivieren (Redis/Memcached)
- Optimierung Ihrer Datenbankserverkonfiguration
- Reduzierung der Anzahl aktiver Plugins
Quelle: https://pluginus.net/support/topic/very-slow-woof_text_filter-searches/