554 слов | 4 минуты

Оптимизация производительности сайта на 1С-Битрикс

Пошаговый подход к отладке скорости сайта на Битрикс: от анализа медленных страниц до настройки композитного кэша.

Пошаговая отладка скорости

Шаг 1 — Включить монитор производительности

Включите монитор производительности на час. Найдите самые долго загружающиеся страницы (в магазинах это обычно каталог и страницы брендов).

На фото — те же страницы после отладки

Шаг 2 — Открыть проблемную страницу и включить отладку

Изучите SQL-запросы: их количество, время выполнения, наличие запросов внутри циклов.

Основные причины низкой производительности

Проблема 1: Тяжёлые SQL-запросы

Битрикс строит запросы с 5–6 JOIN-ами из-за структуры хранения данных (таблицы товаров, цен, складов, свойств, языков, прав). Это нормально при небольшой выборке, но при полумиллионе товаров без фильтрации запрос будет критически медленным.

Решения:

  • Не выводить единым списком более 1000 товаров — настроить разделы и фильтры
  • Запрашивать в компоненте только нужные свойства
  • Отключать проверку прав доступа там, где она не нужна

Проблема 2: SQL-запросы в PHP-цикле

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

Проблема 3: Неправильно настроенный кэш

Если не установлен параметр «кэшировать при установленном фильтре», кэш фактически не работает, так как на каждой странице каталога есть та или иная фильтрация.

Настройка кэширования компонентов

  • Включать кэш у всех компонентов
  • Установить «кэшировать при установленном фильтре» для каталога
  • Отключать в настройках компонента весь неиспользуемый функционал — не просто скрывать в шаблоне, а именно отключать
  • Запрашивать только нужные свойства (каждое свойство = отдельный запрос к базе)

Оптимизация графики

  • Подгонять изображения под размер отображаемого контейнера через ResizeImageGet
  • Использовать серверное сжатие: jpegoptim, optipng
  • Применять lazy load для изображений в длинных списках: jquery.lazyload
  • Предпочитать формат JPEG вместо PNG там, где прозрачность не нужна
$("img.lazyload").lazyload(); // инициализация плагина

Примечание: при AJAX-подгрузке товаров (кнопка «Показать ещё») повторно вызывайте инициализацию после каждой загрузки.

Сжатие ресурсов

Объединение CSS и JS через Битрикс (Настройки → Настройки продукта → Настройки модулей):

  • Объединяет файлы, подключённые через SetAdditionalCSS / AddHeadScript, снижая количество HTTP-запросов
  • При переносе JS в конец страницы — проверьте консоль на ошибки во всём проекте

GZIP на стороне сервера:

В BitrixEnv включён по умолчанию. В хостинг-панелях — настраивается в настройках домена.

Сторонние скрипты

Метрики, чаты, счётчики — каждый сторонний скрипт замедляет сайт. Используйте вкладку Network в DevTools для выявления тормозящих подключений.

  • Обсудите с командой необходимость каждого подключения
  • Отключайте через комментирование (не удаление) — на случай отката
  • Подключайте аналитику с задержкой 3–5 секунд после загрузки документа

Анализ SQL-индексов

Включите логирование медленных запросов в модуле производительности. Через сутки перейдите в Настройки → Производительность → Индексы → Анализ индексов и нажмите Выполнить анализ.

Обращайте внимание на запросы с большой длительностью и высокой частотой. Для крупных таблиц (> 100 МБ) создавайте индексы в часы минимальной нагрузки.

Композитный кэш

После оптимизации основных компонентов включите композитное кэширование: Битрикс создаёт HTML-копию страницы и динамически подгружает изменяемые данные (авторизацию, корзину).

С включённым композитным кэшем страница отдаётся сервером за 0,03 секунды.

Чек-лист оптимизации

  • Монитор производительности включён, настройки соответствуют рекомендуемым
  • Все компоненты настроены на кэширование
  • SQL-запросы не вызываются внутри PHP-циклов
  • При включении кэша страница формируется не более чем за 200 SQL-запросов
  • Компоненты запрашивают только нужные свойства
  • Проверка прав доступа отключена там, где не нужна
  • Кэширование при установленном фильтре включено
  • Настроен композитный сайт
  • Графика оптимизирована
  • GZIP настроен на сервере
  • Неиспользуемые стили и скрипты удалены
  • Сторонние плагины не создают критической задержки
  • Дерево DOM не избыточно
  • Необходимые SQL-индексы созданы