We Free Обсудить задачу
Меню

Скорость

Скорость сайта: что действительно влияет на загрузку каталога

Когда каталог грузится долго, первым делом сжимают картинки. Обычно это самое малое, что можно было сделать.

Каталог — самая нагруженная часть коммерческого сайта. Главная страница отдается почти всем одинаковой, а страница каталога собирается заново под каждый набор фильтров, сортировок и номеров страниц. Именно поэтому она тормозит первой.

Почему картинки — не главное

Изображения влияют на то, как быстро страница дорисуется. Но пользователь чаще жалуется на другое: он нажал «показать» и несколько секунд смотрит на неподвижный экран. В этот момент картинки еще даже не начали грузиться — сервер собирает список товаров.

Сжимать изображения нужно, современные форматы и отложенная загрузка обязательны. Просто это работа с последней третью проблемы, а начинать надо с первой.

Где на самом деле уходит время

Запросы к базе на каждый товар

Самая частая причина. Список получает тридцать товаров одним запросом, а потом на каждый делает еще несколько: цену, остаток, свойства, картинку, скидку. Тридцать товаров превращаются в полторы сотни запросов. По отдельности каждый быстрый, вместе — секунды.

Лечится выборкой всех нужных данных заранее, одним запросом на список, а не на элемент.

Фильтры без индексов

Фильтр по свойству, для которого в базе нет индекса, заставляет перебирать всю таблицу товаров. Пока товаров тысяча — незаметно. На сорока тысячах разница между «мгновенно» и «десять секунд».

Отсутствие кеша выборок

Один и тот же популярный набор фильтров пересобирается заново для каждого посетителя. Результаты таких выборок хорошо кешируются: данные меняются при обмене с учетной системой, а не ежесекундно.

Тяжелые шаблоны

Карточка товара в списке тянет за собой все свойства, включая те, что в списке не показываются. На одной карточке незаметно, на тридцати — заметно.

Подгрузка всего дерева разделов

Меню каталога на каждой странице строит полную структуру разделов со счетчиками товаров в каждом. Счетчики почти всегда считаются в реальном времени, хотя меняются раз в сутки.

Порядок работы простой: сначала измерить, где уходит время, потом чинить. Оптимизация «по ощущениям» обычно улучшает то, что и так работало.

С чего начинать

  1. Замерить время ответа сервера отдельно от времени отрисовки. Это два разных числа, и лечатся они по-разному.
  2. Посмотреть количество запросов к базе на одной странице каталога. Если их больше двух-трех десятков — причина найдена.
  3. Проверить индексы по тем свойствам, которые реально используются в фильтрах.
  4. Включить кеширование выборок и сбрасывать его по событию обмена, а не по таймеру.
  5. И только теперь заняться изображениями и скриптами.

Чего делать не стоит

Не стоит начинать с переезда на более мощный сервер. Он маскирует проблему: полторы сотни лишних запросов останутся, просто выполнятся быстрее. Через год каталог вырастет, и вы вернетесь к тому же разговору, но уже с большим счетом за хостинг.

Не стоит гнаться за идеальными показателями в автоматических проверках. Они полезны как ориентир, но не отражают того, что чувствует человек, нажимающий «показать еще». Измеряйте на реальных страницах с реальным количеством товаров, а не на главной.