GUARDLABS
GuardLabs · Technical note

Как ускорить WooCommerce с большим количеством товаров

Масштабирование WooCommerce до 10 000+ товаров требует оптимизации базы данных, изменения архитектуры поиска и тонкой настройки сервера. Стандартные плагины кэширования страниц не решат проблему медленной генерации страниц (TTFB) в админке, при фильтрации или оформлении заказа. Ниже приведены технические шаги для устранения узких мест производительности.

1. Переход на HPOS (High-Performance Order Storage)

Исторически WooCommerce хранил заказы в таблицах wp_posts и wp_postmeta вместе с товарами и страницами. При большом каталоге это приводит к критическому замедлению SQL-запросов.

  • Перейдите в WooCommerce > Настройки > Расширенные > Особенности.
  • Активируйте опцию Высокопроизводительное хранилище заказов (HPOS). Это перенесет заказы в отдельные выделенные таблицы, снизив нагрузку на мета-таблицы при поиске товаров.

2. Оптимизация базы данных и автозагрузки (Autoload)

При каждом запросе WordPress загружает в память все опции из таблицы wp_options, у которых параметр autoload равен yes. На крупных сайтах этот объем может превышать 10-20 МБ, что убивает производительность PHP.

Проверьте размер автозагружаемых данных с помощью SQL-запроса:

SELECT SUM(LENGTH(option_value)) as autoload_size FROM wp_options WHERE autoload = 'yes';

Если значение превышает 800 КБ, необходимо найти и удалить мусорные опции (часто остающиеся от удаленных плагинов) с помощью WP-CLI или плагина Advanced DB Cleaner. Также рекомендуется установить плагин Index WP MySQL For Speed для добавления недостающих индексов в таблицы базы данных.

3. Внедрение объектного кэширования (Redis / Memcached)

Для динамических страниц (корзина, личный кабинет, оформление заказа) стандартный Page Cache (кэширование страниц целиком) не работает. Чтобы разгрузить базу данных, необходимо настроить кэширование объектов.

  1. Убедитесь, что на сервере установлен модуль PHP-Redis.
  2. Добавьте в файл wp-config.php:
    define('WP_CACHE', true);
    define('WP_REDIS_SELECTIVE_FLUSH', true);
  3. Установите плагин Redis Object Cache и активируйте его. Это позволит хранить результаты частых SQL-запросов в оперативной памяти.

4. Перенос поиска и фильтрации на внешние движки

Стандартный поиск WooCommerce выполняет тяжелые запросы с оператором LIKE по таблицам базы данных. При большом количестве атрибутов и товаров это приводит к зависанию MySQL.

  • Решение для поиска: Используйте связку плагина ElasticPress и внешнего сервера Elasticsearch. Все поисковые запросы будут обрабатываться мгновенно на выделенном поисковом движке.
  • Решение для фильтров: Избегайте плагинов, выполняющих AJAX-запросы к стандартной БД при каждом клике. Используйте индексируемые фильтры (например, FacetWP или WOOF), предварительно настроив индексацию атрибутов.

5. Отключение AJAX Cart Fragments

WooCommerce по умолчанию отправляет AJAX-запрос wc-ajax=get_refreshed_fragments на каждой странице сайта для обновления виджета корзины. Это блокирует рендеринг страниц и создает лишнюю нагрузку на PHP.

Добавьте следующий код в файл functions.php вашей темы, чтобы отключить этот запрос везде, кроме страниц магазина и корзины:

add_action('wp_enqueue_scripts', 'disable_wc_cart_fragments', 11);
function disable_wc_cart_fragments() {
    if (is_front_page() || is_single() || is_archive()) {
        wp_dequeue_script('wc-cart-fragments');
    }
}

6. Настройка лимитов PHP и сервера

Для каталогов от 10 000 товаров виртуальный хостинг (shared) неэффективен. Требуется VPS/VDS или выделенный сервер со следующими минимальными параметрами:

  • PHP 8.1 / 8.2 с включенным модулем OPcache.
  • Выделение памяти для WordPress в wp-config.php:
    define('WP_MEMORY_LIMIT', '512M');
    define('WP_MAX_MEMORY_LIMIT', '1024M');
  • Веб-сервер Nginx + PHP-FPM (или LiteSpeed) вместо Apache.

Need this done? We handle this hands-on at GuardLabs — get in touch.

Опубликовано 2026-06-23 2 мин чтения Все статьи EN / RU / ES
Need help with this?

I take on freelance fixes and builds in this area.