Як прискорити фільтрацію товарів WooCommerce у великих каталогах за допомогою HUSKY
Коли магазин WooCommerce зростає до кількох тисяч товарів, фільтр товарів може стати вузьким місцем. Кожен taxonomy term потребує count query, кожен attribute додає join, а Dynamic Recount примножує роботу з базою даних. HUSKY (раніше WOOF) включає кілька вбудованих механізмів caching та hooks, розроблених спеціально для великих каталогів. Ця стаття охоплює лише функції, які існують у вихідному коді плагіна — без гіпотетичних налаштувань, без вигаданих hooks.
Увімкнути Cache Dynamic Recount
У HUSKY → Додатково → Опції ви знайдете налаштування Cache dynamic recount number for each item in filter. Коли увімкнено, HUSKY зберігає результати recount для кожного term у таблиці опцій WordPress або як transient, тому наступні завантаження сторінок повністю пропускають counting queries. Це єдиний найефективніший перемикач для магазинів, що використовують Dynamic Recount з багатьма taxonomy terms.
Кеш очищається за розкладом, а не при зміні товарів. Інтервал встановлюється опцією автоочищення поруч із налаштуванням кешу (термін дії за замовчуванням — один тиждень). Після додавання або імпорту партії товарів ви можете очистити його вручну за допомогою кнопки clear cache в адмін-панелі.
Увімкнути Cache Terms
Поруч із recount cache знаходиться налаштування Cache terms. Коли форма фільтра містить велику кількість terms (сотні категорій товарів, attributes або tags), ця опція кешує відрендерений список terms, тому HTML не потрібно перебудовувати при кожному завантаженні сторінки.
Він працює так само, як і recount cache: очищається за розкладом, зі своїм власним інтервалом автоочищення та кнопкою clear terms cache в адмін-панелі. Для магазинів з глибоко вкладеними деревами категорій або багатьма attribute values, увімкнення обох кешів разом суттєво зменшує навантаження на базу даних за запит.
Використовувати Turbo Mode для попередньо згенерованих даних про товари
Turbo Mode — це найпотужніша оптимізація, яку HUSKY пропонує для великих каталогів. Коли увімкнено, він попередньо генерує flat file, що містить відфільтровані product IDs для кожної комбінації active terms. Замість побудови та виконання складних WP_Query + tax_query + meta_query при кожному filter request, плагін читає попередньо обчислений файл — різниця в часі відповіді часто становить порядок величини.
Turbo Mode налаштовується в HUSKY → Розширення → Turbo Mode. Регенерація файлу може бути запланована через WordPress cron або, для надійності, через реальний сервер crontab (див. FAQ щодо налаштування Turbo Mode cron).
Налаштувати ліміт товарів Turbo Mode
За замовчуванням Turbo Mode обробляє до 15,000 товарів під час генерації кешу. У магазинах з більшою кількістю товарів генерація зупиняється до того, як усі товари будуть проіндексовані. Використовуйте woof_turbo_mode_products_limit hook, щоб збільшити цей ліміт:
add_filter('woof_turbo_mode_products_limit', function($limit) {
// Increase limit for catalogs larger than 15,000 products
return 50000;
});
Hook знаходиться в ext/turbo_mode/index.php:277. Встановіть значення достатньо високим, щоб охопити весь ваш каталог, але пам'ятайте про PHP execution time та memory limits під час генерації файлу.
Оптимізувати Counter Method для великих сайтів
Система Dynamic Recount використовує лічильник на основі WP_Query, який може споживати значну пам'ять у магазинах з багатьма товарами. woof_counter_method hook (джерело: classes/counter.php) дозволяє переключитися на легший метод підрахунку, який встановлює nopaging=false та posts_per_page=1, зменшуючи пам'ять на query за рахунок потенційно менш точних підрахунків:
add_filter('woof_counter_method', function($saving_memory) {
// Enable memory-saving counter mode
return true;
});
Спочатку протестуйте це на своєму staging-сайті — це добре працює на деяких конфігураціях, але не на всіх.
Налаштувати Filter Query за допомогою woof_products_query
woof_products_query filter hook (джерело: index.php) передає повний масив $query_args перед виконанням WP_Query. Використовуйте його для додавання custom meta queries, виключення певних товарів або налаштування query structure для продуктивності:
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;
});
Для маніпуляцій на рівні taxonomy (зміна relation operators між taxonomies) використовуйте пов'язаний woof_main_query_tax_relations hook.
Увімкнути WordPress Object Cache для даних фільтра
HUSKY підтримує woof_use_wp_cache hook для маршрутизації своїх внутрішніх даних через WordPress object cache. Якщо ви вже використовуєте persistent object cache backend (Redis, Memcached), увімкнення цього hook переміщує дані фільтра з бази даних у швидке in-memory storage:
add_filter('woof_use_wp_cache', function($is){
return true;
});
Важливо: Цей hook не має ефекту без встановленого плагіна persistent object caching. Він не є заміною вбудованих налаштувань кешу — він доповнює їх, коли ваше хостингове середовище підтримує object caching.
Комбінувати налаштування для найкращих результатів
Рекомендована базова конфігурація для великого каталогу (10,000+ товарів, багато taxonomy terms):
- Увімкнути Cache dynamic recount та Cache terms у Додатково → Опції
- Увімкнути Turbo Mode та встановити ліміт товарів відповідно до розміру вашого каталогу
- Застосувати
woof_use_wp_cache, якщо доступний persistent object cache - Протестувати
woof_counter_methodна staging, щоб перевірити, чи працює режим економії пам'яті для вашої конфігурації - Використовувати
woof_products_queryлише тоді, коли вам потрібно виключити певні товари з результатів фільтра
Почніть з двох вбудованих перемикачів кешу — вони не вимагають змін у коді та самі по собі забезпечують найбільш помітне покращення.