Нагрузочное тестировние WooCommerce — сколько продуктов может обработать движок?

Продуктами и услугами нашей компании пользуются различные интернет-магазины с различными типами и количеством товаров. Достаточно часто попадаются клиенты, которым необходимо запустить магазин с 50-100К товаров и обеспечить нормальную скорость загрузки всех страниц до 2 секунд при невысоких затратах на хостинг.
Мы задались вопросом, может ли выдержать интернет-магазин на Woocommerce такие каталоги при достаточных нагрузках и провели свое собственное исследование, которым и хотим с вами поделиться.
В первую очередь мы решили поискать такие кейсы на официальном сайте Woocommerce и среди владельцев магазинов, однако четкого ответа не нашли.
Официальная документация также не дает определенного ответа на этот вопрос, а только говорит, что это зависит от:
- Сервера хостинга и компании
- Количества заказов
- Трафика
Подготовка к тестированию
Поскольку мы сталкивались с большими магазинами и знаем, что потенциально может влиять на загрузку, мы выделили для себя следующие узкие страницы для исследования:
- Главная страница
- Каталог товаров
- Страница отдельного товара
Также на производительность очень влияет наличие атрибутов у товаров, наличие вариативных товаров, фото и дополнительных фото товаров.
Тестирование мы проводили на стандартном шаблоне WooCommerce Store Front, а также на базовой системе WordPress+WooCommerce без дополнительных плагинов, в том числе плагинов для кэша.
Тестовая база товаров
Чтобы сгенерировать необходимое количество товаров для теста мы разработали собственные инструменты и поместили их в плагин Premmerce Dev Tools.
С помощью данного плагина мы сгенерировали следующую базу данных:
- Количество товаров — 50К
- Количество категорий — 50
- Количество товаров в категории — 1000
- Количество атрибутов — 15
- Количество значений в атрибуте — 7
- Количество атрибутов в товаре — 15
- Количество похожих товаров — 50К
- Количество вариативных товаров — 1-3
- Количество фото у каждого товара — 3
В результате база данных у нас выросла до следующих показателей:
- Размер базы данных — 338 Мб
- Количество запросов постов — 299999
- Количество записей постмета — 1127568
Параметры тестового хостинга
Для тестирования нагрузки мы выбрали обычный хостинг со следующими параметрами:
- Одно ядро от процессора Е3 — cpu: 3500.034 MHz
- RAM: 512 Mb
- Максимальное количество процессов: 20
- Доступная память: 2048 Mb
- Лимит работы с диском: 5 Mb/s
Сервис для тестирования
Для тестирования быстродействия и нагрузки мы использовали следующий сервис: Load Impact.
Тестирование главной страницы
Результат тестирования:
- Количество всех запросов: 286
- Минимальная продолжительность загрузки страницы — 413.9 ms
- Средняя продолжительность загрузки страницы — 569 ms
- Максимальная длительность загрузки страницы — 1.89 s
- Минимальный ответ сервера — 163.87 ms
- Средний ответ сервера — 298.85 ms
- Максимальный ответ сервера — 1.64 s
- Количество виртуальных пользователей — 50
Вывод
В целом, как видим, на скорость загрузки главной страницы большое количество товаров в базе не очень влияет. Получаем неплохой средний результат загрузки страницы — до 2 секунд.
Тестирование небольшой категории товаров без фильтров
База магазина — 50К товаров, в категории, которую тестировали, находится 1К товаров.
Результат тестирования:
- Количество всех запросов: 275
- Минимальная продолжительность загрузки страницы — 500.37 ms
- Средняя продолжительность загрузки страницы — ms 591.16
- Максимальная длительность загрузки страницы — 2.14 s
- Минимальный ответ сервера — 217.69 ms
- Средний ответ сервера — 296.28 ms
- Максимальный ответ сервера — 1.84 s
- Количество виртуальных пользователей — 50
Вывод
Как мы видим, несмотря на обилие товаров в базе, если отдельно взятая категория содержит около 1К товаров, то показатели нагрузки и скорости открытия незначительно отличаются от показателей главной страницы.
Тестирование большой категории товаров без фильтров
База магазина — 50К товаров, в категории, которую тестировали, находится 50К товаров.
Результат тестирования:
- Количество всех запросов: 272
- Минимальная продолжительность загрузки страницы — ms 598.71
- Средняя продолжительность загрузки страницы — ms 766.73
- Максимальная длительность загрузки страницы — 2.93
- Минимальный ответ сервера — 319.61 ms
- Средний ответ сервера — 424.54 ms
- Максимальный ответ сервера — 1.62 s
- Количество виртуальных пользователей — 50
Вывод
Как видим, большая категория товаров с содержанием в 50К товаров влияет на загрузку страницы, увеличивая продолжительность открытия страницы почти в 1,5 раза. И это даже без применения дополнительных данных, таких как фильтры по категориям.
Данные условия практически нереальные на практике, поскольку такие категории значительно ухудшают навигацию по сайту и мешают дальнейшему продвижению магазина в целом. Рекомендуется разделять на категории, в которых содержится не более 2-3К товаров, в идеале делить на категории по 100-200 товаров при больших базах товаров. Поэтому мы больше не будем проводить тесты с такой большой категорией. Показали этот результат только для наглядности в целом.
Тестирование небольшой категории товаров с фильтрами WooCommerce
База магазина — 50К товаров, в категории, которую тестировали, находится 1К товаров.
Здесь мы применили стандартный виджет для создания фильтра по атрибутам от Woocommerce.
Результат тестирования:
- Количество всех запросов: 276
- Минимальная продолжительность загрузки страницы — ms 912.28
- Средняя продолжительность загрузки страницы — 1.19 s
- Максимальная длительность загрузки страницы — 3.6 s
- Минимальный ответ сервера — 575.27 ms
- Средний ответ сервера — 834.74 ms
- Максимальный ответ сервера — 3.26 s
- Количество виртуальных пользователей — 50
Вывод
Как мы видим, наличие фильтров увеличивает продолжительность загрузки страницы каталога примерно в два раза и уже нуждается в автоматизации, особенно за счет увеличения среднего ответа серверу до 800 мс, в сравнении с рекомендованными 200 мс от Google Page Speed Insights.
Тестирование небольшой категории товаров с фильтрами Premmerce
База магазина — 50К товаров, в категории, которую тестировали, находится 1К товаров.
Здесь мы применили разработанный нами плагин для создания фильтров по атрибутам (скоро будет доступен, пока проходит стадию тестирования).

Результат тестирования:
- Количество всех запросов: 279
- Минимальная продолжительность загрузки страницы — ms 617.07
- Средняя продолжительность загрузки страницы — ms 703.85
- Максимальная длительность загрузки страницы — 2.76 s
- Минимальный ответ сервера — 280.47 ms
- Средний ответ сервера — 352.96 ms
- Максимальный ответ сервера — 2.41 s
- Количество виртуальных пользователей — 50
Вывод
Как мы видим, использование фильтров Premmerce увеличивает скорость загрузки примерно в 2 раза по сравнению со стандартными фильтрами WooCommerce.
Тестирование страницы отдельного товара
Для теста мы взяли страницу товара, к которому назначены следующие параметры:
- Количество фото — 3
- Количество атрибутов — 15
- Количество вариантов — 2
Результат тестирования:
- Количество всех запросов: 288
- Минимальная продолжительность загрузки страницы — 512.88 ms
- Средняя продолжительность загрузки страницы — ms 625.97
- Максимальная длительность загрузки страницы — 2.48 s
- Минимальный ответ сервера — 223.77 ms
- Средний ответ сервера — 298.91 ms
- Максимальный ответ сервера — 1.66 s
- Количество виртуальных пользователей — 50
Вывод
Как мы видим, большая база товаров не сильно влияет на открытие страницы товара. Хотя средний ответ сервера и меньше рекомендованного Google, в целом скорость загрузки очень хорошая.
Общий вывод по работе WooCommerce с большой базой товаров
В данном исследовании мы тестировали производительность Woocommerce без применения каких-либо плагинов для кэширования или специальных настроек хостинга, что конечно даст свой результат. В следующих статьях мы проведем исследование возможностей кэширования и оптимизации магазина за счет настроек хостинга.
В целом очевидно, что WooCommerce справляется с большими базами товаров и при правильных настройках может работать с базами в 50К, 100К и больше товаров.
В дальнейшем мы будем еще подробнее тестировать быстродействие магазина при наличии различных дополнительных установленных плагинов и если они будут значительно влиять на результат, будем предоставлять дополнительные статьи и результаты исследований.
В случае необходимости будем искать лучшие варианты для правильной оптимизации интернет-магазинов под максимальную производительность.

- Предыдущая « Настройка мультивалютности на WooCommerce
- Следующая Руководство по импорту продуктов WooCommerce »
Да, неплохое исследование.
Жаль, что нет тестов о влиянии большого количества категорий и товаров отнесенных к большому количеству категорий на производительность woo.
Например, 30к товаров, 4000 категорий и каждый товар относится к 50 — 600 категориям.
Как ни странно, это актуально, в связи с требованиями SEO.
Для каждого товара поисковые роботы хотят видеть как можно более прямой путь страницы без аргументов запроса.
(У нас, в частности, колесные литые диски. Категории — это автомобили Марка/Модель — 3800 шт. Каждый диск относится к 50-200 категориям)
Есть ли обновленный тест ?
И если увеличивать кол-во виртуальных пользователей ?
То с какой прогрессией будет падать производительность ?
Добрый день,
к сожалению, обновленного тестового сайта и наглядных тестов нагрузочного посещения нет.
При всём этом важно еще тестировать работу административных интерфейсов
Потому что если на сайте мы можем закэшировать все страницы и т.д. , то вот при редактировании товаров через админку — может случится сюрприз в виде 5-10 секундной загрузки данных товара на странице его редактирования ( пишу по опыту — была подобная ситуация на базе в 22 тыс. товаров )
Спасибо за статью. Интересно и информативно.
Будем дружить.
Как-раз озадачились возможностями WordPress относительно большого количества товаров. Занимаемся созданием сайтов на Вордпресс, но до этого строили системы на 2-10К товаров.
Будем пробовать. Надеюсь ситуация будет аналогичной)
REALsite Харьков
Низкий поклон за эту статью.
Если у категории множество подкатегорий, то выборку по родительской категории можно заметно ускорить путем исключения из запроса дочерних рубрик.
При этом, при размещении товара нужно отмечать не только дочернюю рубрику, но и родительскую.
так примерно
add_action(‘parse_tax_query’, function($query) {
if( !is_admin() && $query->is_main_query() ){
$query->tax_query->queries[0][‘include_children’] = 0;
}
});
Мужики , спасибо огромное за статью ! Очень полезная инфа !
Большое спасибо за тестирование! Интересные выводы, значит woocommerce неплохо справляется даже с базой товаров в 100к+
Тут вопрос как писали выше от хостинга
+ картинка товара просто заливка цветом … — а я знаю не по наслышке что многие и не делают оптимизацию — сразу срокость начнет просаживатся
тема StoreFront если не ошибаюсь — она выглядит не очень … начинаете вешать дизайн — ждите нагрузки и показатели становятся выше — есть и темы которые оптимизированные но — они узкие в отношении правок —