Где теряется время
На небольшом сайте страница категории строится мгновенно. На каталоге с тысячами товаров запросы усложняются: нужно отобрать позиции, отсортировать, посчитать количество в каждом значении фильтра, подтянуть цены, остатки и изображения. Каждая из этих операций может занимать заметное время.
Причины и решения
| Причина | Как проверить | Что сделать |
|---|---|---|
| Тяжёлые запросы к базе | Включить журнал медленных запросов | Добавить индексы, упростить выборку |
| Счётчики значений фильтров | Отключить подсчёт и сравнить время | Считать заранее и хранить готовые значения |
| Много карточек с большими картинками | Посмотреть суммарный вес страницы | Уменьшить размер, включить отложенную загрузку |
| Нет кеша страниц категорий | Сравнить время первого и повторного запроса | Включить кеш с обновлением при изменении товаров |
| Сложные шаблоны и лишние блоки | Отключать блоки по одному и замерять | Убрать необязательные модули или грузить отдельно |
В каком порядке действовать
- Замерьте время ответа сервера на нескольких категориях: с фильтрами, без них, на разных страницах пагинации.
- Найдите самые медленные запросы и упростите их, прежде чем добавлять серверное оборудование.
- Включите кеширование страниц и блоков, но продумайте обновление при смене цены или остатка.
- Ограничьте число товаров на странице и размер изображений — об этом в статье про пагинацию и скорость.
- Проверьте результат на реальных данных посетителей.
Связь с индексацией
Медленные ответы влияют не только на посетителей: если сервер долго отвечает, робот успевает запросить меньше страниц. Для каталога с тысячами позиций это значит более медленное появление новых товаров в индексе. Подробнее — в статьях про время ответа и бюджет обхода и про обход большого каталога.
Начинайте с базы данных. Часто десятки минут работы над одним тяжёлым запросом дают больше, чем неделя правок вёрстки.
Как найти узкое место за один час
Не пытайтесь ускорять всё сразу. Возьмите одну самую посещаемую категорию и разберите её время по частям.
curl -o /dev/null -s -w "ttfb=%{time_starttransfer} total=%{time_total}\n" https://example.ru/catalog/
- Если время ответа сервера уже большое — проблема в приложении или базе данных.
- Если ответ быстрый, а страница загружается долго — проблема в весе страницы и ресурсах.
- Если первый запрос медленный, а повторные быстрые — не работает или не прогревается кеш.
Такое разделение сразу показывает, куда направить усилия, и избавляет от правок «на всякий случай».
Частые вопросы
Почему страница категории медленная при большом числе товаров?
Из-за сложных запросов к базе, подсчёта значений фильтров и большого числа изображений на странице.
Помогает ли кеширование?
Да, но его нужно связать с изменением данных: при смене цены или остатка кеш соответствующих страниц должен обновляться.
Влияет ли скорость каталога на индексацию?
Да: при медленных ответах сервера робот запрашивает меньше страниц за визит, и новые товары попадают в индекс позже.
Готовый адрес можно собрать прямо сейчас: откройте генератор ЧПУ — он транслитерирует фразу по таблице Яндекса, уберёт служебные слова и покажет длину адреса.