Как ускорить WooCommerce с большим количеством товаров
Масштабирование WooCommerce до 10 000+ товаров требует оптимизации базы данных, изменения архитектуры поиска и тонкой настройки сервера. Стандартные плагины кэширования страниц не решат проблему медленной генерации страниц (TTFB) в админке, при фильтрации или оформлении заказа. Ниже приведены технические шаги для устранения узких мест производительности.
-
Переход на HPOS (High-Performance Order Storage)
Исторически WooCommerce хранил заказы в таблицах wp_posts и wp_postmeta вместе с товарами и страницами. При большом каталоге это приводит к критическому замедлению SQL-запросов.Перейдите в WooCommerce > Настройки > Расширенные > Особенности.
Активируйте опцию Высокопроизводительное хранилище заказов (HPOS). Это перенесет заказы в отдельные выделенные таблицы, снизив нагрузку на мета-таблицы при поиске товаров. Оптимизация базы данных и автозагрузки (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 для добавления недостающих индексов в таблицы базы данных.-
Внедрение объектного кэширования (Redis / Memcached)
Для динамических страниц (корзина, личный кабинет, оформление заказа) стандартный Page Cache (кэширование страниц целиком) не работает. Чтобы разгрузить базу данных, необходимо настроить кэширование объектов.Убедитесь, что на сервере установлен модуль PHP-Redis.
Добавьте в файл wp-config.php:
define('WP_CACHE', true);
define('WP_REDIS_SELECTIVE_FLUSH', true);Установите плагин Redis Object Cache и активируйте его. Это позволит хранить результаты частых SQL-запросов в оперативной памяти.
-
Перенос поиска и фильтрации на внешние движки
Стандартный поиск WooCommerce выполняет тяжелые запросы с оператором LIKE по таблицам базы данных. При большом количестве атрибутов и товаров это приводит к зависанию MySQL.Решение для поиска: Используйте связку плагина ElasticPress и внешнего сервера Elasticsearch. Все поисковые запросы будут обрабатываться мгновенно на выделенном поисковом движке.
Решение для фильтров: Избегайте плагинов, выполняющих AJAX-запросы к стандартной БД при каждом клике. Используйте индексируемые фильтры (например, FacetWP или WOOF), предварительно настроив индексацию атрибутов. Отключение 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');
}
}-
Настройка лимитов 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.
Top comments (0)