Интернет-магазин федерального дистрибьютора IT-оборудования тормозил. Страницы каталога и карточки товаров открывались по 7–15 секунд. Показатель отказов вырос до 62%, а позиции в поиске поползли вниз. За 3 рабочих дня мы разобрали проблему и получили LCP 2 секунды, не меняя сервер.
С чего начали: диагностика, а не кеширование
Первым делом мы не полезли в настройки кеша. Мы проанализировали серверные логи, выделили пиковые нагрузки и нашли три корневые причины:
Медленные SQL-запросы. Фильтрация каталога из 250+ позиций порождала тяжёлые запросы к таблицам
b_iblock_elementиb_iblock_section. В 80% случаев проблема именно в базе данных, а не в слабом сервере.Нет кеширования на уровне веб-сервера. Nginx честно гонял каждый запрос через PHP, хотя 90% страниц каталога не менялись часами.
Изображения без сжатия. Размер страницы каталога — 4,2 МБ. Без WebP, без lazy loading, без минификации.
Оптимизация базы данных
Проанализировали медленные запросы через EXPLAIN, добавили недостающие индексы в таблицы каталога. Настроили параметры MySQL: увеличили innodb_buffer_pool_size, для MySQL 5.7 добавили query_cache_size. Почистили таблицы истории и archived-логи.
Результат: время выполнения поисковых запросов сократилось в 4 раза.
Кеширование на двух уровнях
На уровне приложения включили автокеширование компонентов каталога и меню в Битрикс. Страницы перестали пересчитываться при каждом обращении.
На уровне nginx настроили fastcgi_cache для динамических страниц. Повторные запросы отдаются из кеша веб-сервера без обращения к PHP.
Сжатие и минификация фронтенда
- Конвертировали изображения в WebP с fallback-механизмом
- Добавили lazy loading для картинок каталога
- Включили gzip для CSS, JS и HTML
- Объединили и минифицировали CSS/JS — количество HTTP-запросов сократили на 40%
Результаты: метрики до и после
| Метрика | До | После |
|---|---|---|
| LCP | 7–15 с | 2 с |
| TTFB | 2,5 с | 300 мс |
| Размер страницы каталога | 4,2 МБ | 1,1 МБ |
| HTTP-запросов | 120+ | 72 |
| Отказы | 62% | 38% |
| Позиции в поиске | падение | рост на 15–20 |
5 ошибок, которые убивают скорость
- Композитный кеш без исключений. На проектах с корзиной и личным кабинетом показывает устаревшие данные.
- Игнорирование базы данных. Менять хостинг до анализа SQL-запросов — деньги на ветер.
- Сжатие без WebP. WebP даёт экономию 25–35% по сравнению с JPEG при том же качестве.
- Нет мониторинга. Через месяц после оптимизации сайт снова «тяжелеет», а вы об этом не знаете.
- Кеширование без автосброса. После обновления каталога посетители видят старую версию.
Вывод
Интернет-магазин с большим каталогом и высокой нагрузкой можно ускорить в 3–7 раз без замены сервера. Последовательная диагностика и комплексный подход — база данных, кеширование, работа с контентом — дают измеримый результат за несколько дней.
Top comments (0)