Jak przyspieszyć filtrowanie produktów WooCommerce w dużych katalogach za pomocą HUSKY
Gdy sklep WooCommerce przekroczy kilka tysięcy produktów, filtr produktów może stać się wąskim gardłem. Każdy termin taksonomii wymaga zapytania o licznik, każdy atrybut dodaje złączenie, a dynamiczne przeliczanie pomnaża pracę bazy danych. HUSKY (dawniej WOOF) zawiera kilka wbudowanych mechanizmów buforowania i haków zaprojektowanych specjalnie dla dużych katalogów.
Włącz pamięć podręczną dynamicznego przeliczania
W HUSKY → Zaawansowane → Opcje znajdziesz ustawienie Pamięć podręczna liczby dynamicznych przeliczeń dla każdego elementu w filtrze. Gdy jest włączone, HUSKY przechowuje wyniki przeliczeń dla każdego terminu w tabeli opcji WordPress lub jako transient, więc kolejne ładowania stron pomijają zapytania liczące. To najskuteczniejszy przełącznik dla sklepów używających dynamicznego przeliczania z wieloma terminami taksonomii.
Pamięć podręczna jest czyszczona zgodnie z harmonogramem, a nie przy zmianach produktów. Interwał ustawiany jest przez opcję auto-czystości obok ustawienia pamięci podręcznej (domyślny czas wygaśnięcia to jeden tydzień). Po dodaniu lub zaimportowaniu partii produktów możesz ją ręcznie wyczyścić przyciskiem wyczyść pamięć podręczną w panelu administracyjnym.
Włącz pamięć podręczną terminów
Obok pamięci podręcznej przeliczeń znajduje się ustawienie Pamięć podręczna terminów. Gdy formularz filtru zawiera dużą liczbę terminów (setki kategorii produktów, atrybutów lub tagów), opcja ta buforuje wyrenderowaną listę terminów, aby kod HTML nie musiał być odtwarzany przy każdym ładowaniu strony.
Działa tak samo jak pamięć podręczna przeliczeń: czyszczona zgodnie z harmonogramem, z własnym interwałem auto-czystości i przyciskiem wyczyść pamięć podręczną terminów w panelu administracyjnym. Dla sklepów z głęboko zagnieżdżonymi drzewami kategorii lub wieloma wartościami atrybutów włączenie obu pamięci podręcznych znacznie zmniejsza obciążenie bazy danych na żądanie.
Użyj trybu Turbo dla wstępnie wygenerowanych danych produktu
Tryb Turbo to najpotężniejsza optymalizacja oferowana przez HUSKY dla dużych katalogów. Po włączeniu generuje on wstępnie plik danych JSON z parametrami produktów. Zamiast budować i wykonywać złożone WP_Query + tax_query + meta_query przy każdym żądaniu filtru, wtyczka odczytuje wstępnie obliczone dane – w przypadku dużych katalogów różnica w czasie odpowiedzi jest znacząca.
Tryb Turbo konfiguruje się w HUSKY → Rozszerzenia → Tryb Turbo. Ponowne generowanie pliku można zaplanować przez cron WordPress lub, dla niezawodności, przez prawdziwy crontab serwera (patrz FAQ dotyczące konfiguracji cron trybu Turbo).
Dostosuj limit produktów w trybie Turbo
Domyślnie tryb Turbo przetwarza do 15 000 produktów podczas generowania pamięci podręcznej. W sklepach z większą liczbą produktów generowanie zatrzymuje się przed zaindeksowaniem wszystkich produktów. Użyj haka woof_turbo_mode_products_limit, aby podnieść ten limit:
add_filter('woof_turbo_mode_products_limit', function($limit) {
// Increase limit for catalogs larger than 15,000 products
return 50000;
});
Hook znajduje się w ext/turbo_mode/index.php. Ustaw wartość wystarczająco wysoką, aby objąć cały katalog, ale pamiętaj o limitach czasu wykonania PHP i pamięci podczas generowania pliku.
Zoptymalizuj metodę zliczania dla dużych witryn
System dynamicznego przeliczania używa licznika opartego na WP_Query, który może zużywać znaczną ilość pamięci w sklepach z wieloma produktami. Hook woof_counter_method (źródło: classes/counter.php) pozwala przełączyć się na lżejszą metodę zliczania, która ustawia nopaging=false i posts_per_page=1, zmniejszając pamięć na zapytanie:
add_filter('woof_counter_method', function($saving_memory) {
// Enable memory-saving counter mode
return true;
});
Przetestuj to najpierw na swojej witrynie stagingowej – działa dobrze w niektórych konfiguracjach, ale nie we wszystkich.
Dostosuj wyniki produktów za pomocą woof_products_query
Hook filtru woof_products_query (źródło: index.php) przekazuje tablicę $query_args z shortcodu [woof_products] przed wykonaniem jego WP_Query. Użyj go, aby dodać niestandardowe zapytania meta, wykluczyć niektóre produkty z wyników lub dostosować strukturę zapytania:
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;
});
Do manipulacji na poziomie taksonomii (zmiana operatorów relacji między taksonomiami) użyj powiązanego haka woof_main_query_tax_relations.
Włącz pamięć podręczną obiektów WordPress dla danych filtru
HUSKY obsługuje hook woof_use_wp_cache, aby przekierować swoje wewnętrzne dane przez pamięć podręczną obiektów WordPress. Jeśli już używasz trwałej pamięci podręcznej obiektów (Redis, Memcached), włączenie tego haka przenosi dane filtru z bazy danych do szybkiej pamięci podręcznej:
add_filter('woof_use_wp_cache', function($is){
return true;
});
Ważne: Ten hook nie działa bez zainstalowanej wtyczki trwałego buforowania obiektów. Nie zastępuje on wbudowanych ustawień pamięci podręcznej – uzupełnia je, gdy środowisko hostingowe obsługuje buforowanie obiektów.
Połącz ustawienia dla najlepszych rezultatów
Zalecany punkt wyjścia dla dużego katalogu (ponad 10 000 produktów, wiele terminów taksonomii):
- Włącz Pamięć podręczną dynamicznego przeliczania i Pamięć podręczną terminów w Zaawansowane → Opcje
- Włącz Tryb Turbo i ustaw limit produktów zgodnie z rozmiarem katalogu
- Zastosuj
woof_use_wp_cache, jeśli dostępna jest trwała pamięć podręczna obiektów - Przetestuj
woof_counter_methodna stagingu, aby sprawdzić, czy tryb oszczędzania pamięci działa w Twojej konfiguracji - Używaj
woof_products_querytylko wtedy, gdy potrzebujesz dostosować zapytanie wyjściowe [woof_products]
Zacznij od dwóch wbudowanych przełączników pamięci podręcznej – nie wymagają one zmian w kodzie i same zapewniają najbardziej zauważalną poprawę.