Как ускорить фильтрацию товаров WooCommerce в больших каталогах с HUSKY
Когда WooCommerce-магазин разрастается до нескольких тысяч товаров, фильтр товаров может стать узким местом. Каждый элемент таксономии требует запроса на подсчет, каждый атрибут добавляет соединение, а динамический пересчет умножает нагрузку на базу данных. HUSKY (ранее WOOF) включает несколько встроенных механизмов кэширования и хуков, разработанных специально для больших каталогов.
Включить кэширование динамического пересчета
In HUSKY → Продвинутые → Опции вы найдете настройку Кэшировать результаты динамического пересчета для каждого элемента фильтра. При включении HUSKY сохраняет результаты пересчета для каждого термина в таблице опций WordPress или как transient, поэтому последующие загрузки страниц пропускают запросы на подсчет полностью. Это самый эффективный переключатель для магазинов, использующих Динамический пересчет с большим количеством терминов таксономии.
Кэш очищается по расписанию, а не при изменении товаров. Интервал устанавливается опцией автоочистки рядом с настройкой кэша (срок хранения по умолчанию — одна неделя). После добавления или импорта партии товаров вы можете вручную очистить его с помощью очистить кэш кнопки в админ-панели.
Включить кэширование терминов
Рядом с кэшем пересчета находится Кэширование терминов настройка. Когда форма фильтра содержит большое количество терминов (сотни категорий товаров, атрибутов или тегов), эта опция кэширует отрендеренный список терминов, чтобы HTML не приходилось перестраивать при каждой загрузке страницы.
Он работает так же, как и кэш пересчета: очищается по расписанию, со своим собственным интервалом автоочистки и очистить кэш терминов кнопкой в админке. Для магазинов с глубоко вложенными древовидными структурами категорий или большим количеством значений атрибутов одновременное включение обоих кэшей значительно снижает нагрузку на базу данных при каждом запросе.
Использовать Turbo Mode для предварительно сгенерированных данных о товарах
Turbo Mode — это самая мощная оптимизация, которую HUSKY предлагает для больших каталогов. При включении он предварительно генерирует JSON-файл с параметрами товаров. Вместо построения и выполнения сложных WP_Query + tax_query + meta_query при каждом запросе фильтра плагин читает предварительно вычисленные данные — для больших каталогов разница во времени отклика существенна.
Turbo Mode настраивается в разделе HUSKY → Extensions → Turbo Mode. Регенерация файла может быть запланирована через WordPress cron или, для надежности, через реальный crontab сервера (см. FAQ по настройке cron для Turbo Mode).
Отрегулируйте лимит товаров для 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;
});
хук находится в ext/turbo_mode/index.php. Установите значение достаточно высоким, чтобы охватить весь ваш каталог, но помните о времени выполнения PHP и лимитах памяти во время генерации файла.
Оптимизация метода счетчика для больших сайтов
Динамическая система пересчета использует счетчик на основе WP_Query, который может потреблять значительный объем памяти в магазинах с большим количеством товаров. woof_counter_method хук (источник: classes/counter.php) позволяет переключиться на более легкий метод подсчета, который устанавливает nopaging=false and posts_per_page=1, уменьшая потребление памяти на запрос:
add_filter('woof_counter_method', function($saving_memory) {
// Enable memory-saving counter mode
return true;
});
Протестируйте это сначала на своем staging-сайте — это хорошо работает на некоторых конфигурациях, но не на всех.
Настройка вывода товаров с помощью woof_products_query
The woof_products_query фильтр (источник: index.php) передает $query_args массив [woof_products] шорткода перед его WP_Query . Используйте его, чтобы добавить пользовательские meta-запросы, исключить определенные товары из вывода или настроить структуру запроса:
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;
});
Для манипуляций на уровне таксономии (изменение операторов отношения между таксономиями) используйте связанный woof_main_query_tax_relations хук.
Включить кэширование данных фильтра в WordPress Object Cache
HUSKY поддерживает woof_use_wp_cache хук для направления своих внутренних данных через WordPress object cache. Если вы уже используете постоянный бэкенд object cache (Redis, Memcached), включение этого хука переместит данные фильтра из базы данных в быстрое хранилище в памяти:
add_filter('woof_use_wp_cache', function($is){
return true;
});
Важно: Этот хук не имеет эффекта без установленного плагина для постоянного object caching. Он не заменяет встроенные настройки кэширования — он дополняет их, когда ваша среда хостинга поддерживает object caching.
Комбинирование настроек для лучших результатов
Рекомендуемый минимум для большого каталога (10 000+ товаров, множество терминов таксономии):
- Включить кэширование динамического пересчета and Cache terms в Advanced → Options
- Включите Turbo Mode и установите лимит товаров в соответствии с размером вашего каталога
- Применить
woof_use_wp_cache, если доступен постоянный object cache - Тестировать
woof_counter_methodна staging, чтобы увидеть, работает ли режим экономии памяти для вашей настройки - Используйте
woof_products_query, только если вам нужно настроить выходной запрос [woof_products]
Начните с двух встроенных переключателей кэширования — они не требуют изменений в коде и сами по себе обеспечивают наиболее заметное улучшение.