Настройка gzip-сжатия для 1С-Битрикс: ускорение и экономия

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Услуги, которые мы предлагаем
Показано 1 из 1Все 1626 услуг
Настройка gzip-сжатия для 1С-Битрикс: ускорение и экономия
Простой
~1 день
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1360
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    947
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    694
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    832
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    732
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1075

Gzip — первое, что проверяет аудитор PageSpeed после установки Битрикс. Мы часто видим: он не настроен совсем или настроен неправильно. Сжимается HTML, но не JS и CSS, или compression level выставлен на максимум и жрёт CPU без ощутимой пользы. Типичный HTML страницы каталога — 80–200 КБ, после Gzip 6 — 15–35 КБ. Экономия 75–80% трафика на каждый некэшированный HTML-запрос. Для магазина с 10 000 посетителей в день это существенно снижает нагрузку на сервер и улучшает LCP. Мы уже помогли более чем 500 проектам настроить сжатие — опыт более 10 лет.

Хотите настроить gzip правильно? Закажите аудит и настройку — типичный проект занимает от 2 до 4 часов, стоимость рассчитывается индивидуально.

Как gzip влияет на скорость загрузки?

Сжатие уменьшает объём передаваемых данных. Для HTML — в 4-6 раз, для CSS/JS — в 3-5 раз. Например, страница каталога без сжатия весит 180 КБ, со сжатием — 25 КБ. На мобильном интернете это даёт экономию 3-5 секунд загрузки. Gzip поддерживается всеми современными браузерами, и поисковики учитывают скорость как фактор ранжирования.

Сравнение: gzip_static vs динамическое сжатие

Статическое pre-gzip (gzip_static) в 3 раза менее затратно по CPU, чем динамическое сжатие, так как файлы сжимаются один раз при деплое. Динамическое сжатие обрабатывает каждый запрос, что при уровне 6 даёт отличное сжатие, но нагружает CPU. Для статических ресурсов (CSS, JS) gzip_static предпочтительнее. Вот таблица сравнения:

Параметр gzip_static Динамическое gzip
Нагрузка CPU Нет (отдача готовых файлов) 3x на уровне 6
Скорость отдачи Максимальная Чуть медленнее
Обновление файлов Требуется пересоздание .gz Автоматически
Поддержка nginx только Все сервера

Эффективность сжатия по типам контента

Тип контента Размер без сжатия Размер со сжатием (gzip 6) Экономия
HTML страницы каталога 180 КБ 25 КБ 86%
CSS-файл (bootstrap) 150 КБ 35 КБ 77%
JavaScript (jquery) 85 КБ 20 КБ 76%
JSON-ответ API 50 КБ 10 КБ 80%

Почему gzip static лучше для высоконагруженных проектов?

На проектах с миллионами запросов к статике нагрузка CPU от динамического сжатия может составлять 10–15% всех ресурсов. gzip_static полностью снимает её. В одном из наших проектов (каталог 1 млн товаров) переход на gzip_static снизил CPU с 60% до 35%, а скорость ответа статики сократилась на 200 мс. Получите консультацию, если хотите внедрить gzip_static на своём проекте.

Как настроить gzip в nginx: пошаговая инструкция

Стандартная установка Битрикс через setup.sh настраивает базовый Gzip, но часто пропускает важные MIME-типы и не включает gzip_vary.

Шаг 1: Базовая конфигурация

Полная конфигурация в блоке http или server:

gzip on;
gzip_disable "msie6";

gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_min_length 1024;

gzip_types
    text/plain
    text/css
    text/xml
    text/javascript
    application/javascript
    application/x-javascript
    application/json
    application/xml
    application/xml+rss
    application/rss+xml
    application/atom+xml
    image/svg+xml
    font/ttf
    font/otf
    application/vnd.ms-fontobject;

gzip_vary on — критически важен при наличии CDN или прокси. Добавляет заголовок Vary: Accept-Encoding, чтобы кэши не отдавали сжатый контент браузерам без поддержки Gzip.

gzip_min_length 1024 — не сжимаем файлы меньше 1 КБ. Overhead Gzip-заголовков и CPU-затраты не оправданы для маленьких ответов.

gzip_comp_level 6 — уровни 7–9 дают менее 2% дополнительного сжатия при 2–3x росте CPU. Уровень 1–2 быстрый, но сжимает на 15–20% хуже. Согласно тестам, уровень 6 даёт наилучшее соотношение сжатия и производительности.

Шаг 2: Включение gzip_static

gzip_static on; — при запросе app.js nginx ищет app.js.gz. Если найден — отдаёт без затрат CPU на компрессию.

Генерация .gz-файлов в деплой-скрипте:

find /var/www/site/public/build -name "*.js" -o -name "*.css" | xargs -P4 -I{} gzip -k -6 {}

Шаг 3: Проверка двойного сжатия

Битрикс умеет сжимать ответ через PHP (ob_gzhandler). Если включено и в PHP, и в nginx — браузер получает дважды сжатый контент. Проверяем в php.ini или bitrix/php_interface/dbconn.phpzlib.output_compression должно быть Off. В настройках Битрикс: «Настройки → Настройки продукта → Сжатие страниц» отключить, если сжатие делает nginx.

Что выбрать: gzip_static или динамическое сжатие на Apache?

На серверах с nginx (рекомендация Битрикс) конфигурация проще и производительнее — одноразовое сжатие, статическое pre-gzip. Apache требует модуль mod_deflate, который загружает больше CPU. На shared-хостингах выбор обычно ограничен. В любом случае, gzip должен быть включён на стороне веб-сервера, а не через PHP.

Конфигурация Apache

Для серверов Битрикс на Apache (bitrix-env использует nginx как фронтенд, но на shared-хостингах часто чистый Apache):

<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/plain text/xml
    AddOutputFilterByType DEFLATE text/css application/javascript
    AddOutputFilterByType DEFLATE application/json application/xml
    AddOutputFilterByType DEFLATE image/svg+xml font/ttf

    DeflateCompressionLevel 6

    # Не сжимать уже сжатые форматы
    SetEnvIfNoCase Request_URI \.(?:gif|jpg|jpeg|png|zip|gz|br)$ no-gzip dont-vary

    Header append Vary Accept-Encoding
</IfModule>

Типичные ошибки конфигурации Битрикс

Двойное сжатие через PHP и nginx. Мы уже упоминали — отключаем zlib.output_compression.

Отсутствие gzip_proxied any — если сайт за балансировщиком или CDN, nginx без этой директивы не сжимает ответы для проксированных запросов (заголовок Via присутствует).

application/json не в списке. Ответы API Битрикс (компоненты, работающие в режиме AJAX) возвращают JSON. Без сжатия JSON-ответы каталога с 50 товарами весят 40–80 КБ, со сжатием — 8–15 КБ.

Проверка сжатия

# Проверяем сжатие ответа
curl -sI -H "Accept-Encoding: gzip" https://site.ru/ | grep -i content-encoding
# Content-Encoding: gzip

# Сравниваем размеры
curl -s --compressed https://site.ru/ | wc -c
curl -s -H "Accept-Encoding: identity" https://site.ru/ | wc -c

Инструмент Check GZIP compression на GiftOfSpeed показывает сжатие для любого URL вместе с экономией в байтах.

Что входит в нашу услугу по настройке gzip

  • Аудит текущей конфигурации сервера и Битрикс.
  • Настройка gzip на nginx или Apache с проверкой всех MIME-типов.
  • Оптимизация уровня сжатия и кэширования.
  • Настройка gzip_static для статических ресурсов.
  • Проверка двойного сжатия, корректировка PHP и Битрикс.
  • Тестирование через PageSpeed, GTmetrix и curl.
  • Документация по внесённым изменениям.
  • Консультация и поддержка в течение недели после настройки.

Мы гарантируем результат: ускорение загрузки в тестах на 30-400% (в зависимости от текущего состояния). Если вы сомневаетесь в настройках — свяжитесь с нами, оценим проект бесплатно. Получите консультацию по настройке gzip для вашего Битрикс-проекта.

80% сайтов на Битрикс тормозят из-за одной таблицы

b_iblock_element_property — EAV-структура, где каждая строка хранит одно значение одного свойства одного элемента. Каталог в 50 000 товаров с 30 свойствами даёт 1,5 млн строк. Умный фильтр делает JOIN этой таблицы с b_iblock_element по пяти свойствам — и MySQL уходит в full table scan на 3–5 секунд.

Наш опыт показывает: без вмешательства в эту таблицу ускорение сайта невозможно. Мы берёмся за проекты, где скорость загрузки упала до 8–10 секунд, и возвращаем TTFB < 200 мс за 1–2 недели. Оптимизация скорости сайта начинается с аудита slow-запросов и заканчивается комплексной перестройкой инфраструктуры под ключ.

[Свяжитесь с нами для аудита] — мы определим узкие места за 2 часа и предложим конкретный план.

Серверная оптимизация

Nginx. Не просто «включили gzip». Конкретно:

  • gzip_comp_level 4-5 — выше бессмысленно, CPU сжирает больше, чем экономит трафик;
  • brotli on с brotli_static on — для предварительно сжатых файлов;
  • HTTP/2 с http2_max_concurrent_streams 128;
  • fastcgi_cache для PHP-ответов — кэширование на уровне Nginx, минуя PHP-FPM;
  • worker_processes auto, worker_connections под количество одновременных соединений.

PHP-FPM. Выбор между pm = dynamic и pm = static — не академический:

  • Static: фиксированное количество воркеров, без overhead на форк — для выделенных серверов с предсказуемой нагрузкой.
  • Dynamic: экономит RAM при низком трафике. pm.max_children считаем как (доступная RAM - RAM для MySQL/Redis) / средний расход на процесс.
  • OPcache: opcache.memory_consumption=256, opcache.max_accelerated_files=20000, opcache.validate_timestamps=0 на продакшене (перезагрузка PHP-FPM при деплое).

MySQL/MariaDB. Главное узкое место почти всегда:

  • slow_query_log с порогом 0.5 сек — каждый запрос разбираем через EXPLAIN.
  • innodb_buffer_pool_size = 70–80% доступной RAM на выделенном сервере.
  • Составные индексы для фасетного поиска: (IBLOCK_ID, IBLOCK_PROPERTY_ID, VALUE) на b_iblock_element_property.
  • OPTIMIZE TABLE b_iblock_element_property после массовых операций.

Как настроить кэширование на три уровня?

Управляемый кэш компонентов. TTL настраиваем для каждого компонента отдельно. Каталог — 3600 сек, новостная лента — 300 сек, баннеры — 86400. Одинаковый TTL везде — гарантия либо устаревших данных, либо бесполезного кэша.

Композитный кэш. Технология bitrix:composite — Nginx отдаёт готовый HTML из файла, PHP не запускается. Динамические зоны (корзина, авторизация) подгружаются AJAX-запросом через CBitrixComponent::setFrameMode(true). TTFB < 50 мс. Но: не все компоненты совместимы, $APPLICATION->ShowPanel() и прямой вывод через echo ломают композит. Проверяем каждую страницу через панель «Производительность → Композитный сайт».

Сравнение: композитный кэш быстрее управляемого в 10–20 раз по времени первого байта. Официальная документация Битрикс по композитному кэшу: Bitrix Composite.

Memcached / Redis. Переносим кэш из файловой системы:

  • Сессии → Redis (session.save_handler = redis) — быстрее файлов в 10–50×, плюс работа в кластере.
  • Кэш компонентов → Memcached через .settings.php: 'cache' => ['type' => 'memcache'].
  • Кэш ORM-запросов — чтобы одинаковые GetList() не нагружали MySQL на каждом хите.

Почему стандартных настроек MySQL недостаточно?

Индексы. Составные для фасетного поиска. Покрывающие для частых выборок — MySQL отвечает из индекса, не обращаясь к данным. Частичные индексы (MariaDB) для фильтрации по ACTIVE = 'Y'. Аудит неиспользуемых индексов — каждый замедляет INSERT/UPDATE.

Партиционирование. Для таблиц с миллионами строк: b_stat_session, b_search_content_stem, Highload-блоки с историей. Партиция по дате — запрос «заказы за месяц» не сканирует данные за три года.

Реальный кейс: каталог 200 000 товаров, 50 свойств. Фильтр по 10 свойствам занимал 12 секунд. После создания составных индексов по (IBLOCK_ID, IBLOCK_PROPERTY_ID, VALUE) и партиционирования b_iblock_element_property по IBLOCK_ID время выполнения упало до 0,3 секунды. Нагрузка на MySQL снизилась в 40 раз.

Очистка. В любой базе за год-два накапливается: устаревший поисковый индекс, просроченные записи в b_cache_tag, история b_iblock_element_prop_s*, логи в b_event_log на гигабайты. Настраиваем регулярную очистку через агенты.

Партиционирование также решает проблему с параллельными запросами при обмене с 1С через CommerceML. Подробнее: MySQL Partitioning Documentation.

Фронтенд

Изображения — 60–80% веса страницы:

  • WebP через CFile::ResizeImageGet() с BX_RESIZE_IMAGE_PROPORTIONAL + конвертация;
  • srcset + sizes — не грузим 3000px картинку в блок 400px;
  • loading="lazy" для всего ниже первого экрана;
  • AVIF — ещё 20–30% экономии vs WebP (подробнее: WebP).

CSS/JS:

  • Встроенный модуль Битрикс: объединение и минификация через «Настройки → Оптимизация CSS/JS»;
  • PurgeCSS / UnCSS — на типичном Битрикс-проекте 60–70% CSS не используются;
  • defer / async для некритичного JS;
  • Critical CSS инлайном в <head> для мгновенного FCP.

Шрифты:

  • <link rel="preload" as="font" crossorigin> для основного шрифта;
  • font-display: swap — текст виден сразу;
  • Subsetting через pyftsubset — вырезаем кириллицу + латиницу, файл уменьшается в 3–5 раз.

CDN

Cloudflare, BunnyCDN, AWS CloudFront или российские (Selectel CDN, VK Cloud CDN).

  • Статика (CSS, JS, изображения, шрифты) — через CDN.
  • Правила кэширования: Cache-Control: public, max-age=31536000, immutable для файлов с хешем.
  • Оптимизация изображений на лету (imgproxy, Cloudflare Polish) без нагрузки на origin.

Зачем нужно нагрузочное тестирование?

Не синтетические бенчмарки, а реальные сценарии:

  • k6 / wrk — имитация маршрутов: каталог → фильтрация → карточка → корзина → оформление.
  • Метрики: RPS, время ответа (p50, p95, p99), процент ошибок.
  • Xdebug (callgrind) или Blackfire — профилирование PHP, поиск узких мест.

Результат тестирования — объективная картина, где реально тормозит, а не где «кажется». После оптимизации прогоняем повторно — фиксируем улучшения.

Результаты

Метрика До После
TTFB 800–2000 мс 50–200 мс
Полная загрузка 4–8 сек 1.5–2.5 сек
PageSpeed (мобильный) 30–50 80–95
Одновременные пользователи 50–100 500–2000+

Что входит в работу?

  1. Аудит текущей производительности — анализ slow-запросов, профилирование PHP, проверка кэширования, CDN, серверных настроек.
  2. Настройка серверной части — Nginx, PHP-FPM, MySQL, Redis/Memcached, OPcache.
  3. Оптимизация кэширования — управляемый кэш, композитный сайт, настройка TTL, тегированное кэширование.
  4. Работа с БД — создание индексов, партиционирование, очистка, реорганизация EAV-таблиц.
  5. Фронтенд — изображения (WebP/AVIF), CSS/JS (минификация, deferred), шрифты (preload, subsetting).
  6. CDN — подключение, настройка правил кэширования.
  7. Нагрузочное тестирование — сценарии реальных пользователей, отчёт по метрикам.
  8. Документация — описание всех изменений, рекомендации по дальнейшему обслуживанию.
  9. Гарантия — поддержка в течение 1 месяца после сдачи.

Мониторинг

Без мониторинга через полгода всё деградирует. Новый модуль, нерасчищенные логи, изменение в шаблоне — и скорость вернулась к исходной.

  • web-vitals API — Real User Monitoring от реальных посетителей.
  • Synthetic monitoring — Pingdom, UptimeRobot, регулярные проверки из разных локаций.
  • Алерты — TTFB > 500 мс или LCP > 3 сек → уведомление.

Сроки и стоимость

Тип работ Сроки
Базовая оптимизация (кэш, изображения, минификация) 2–3 дня
Оптимизация БД (индексы, slow queries, настройка) 3–5 дней
Серверная инфраструктура (Nginx, PHP-FPM, Redis) 2–3 дня
Комплексная (сервер + БД + фронтенд + CDN) 1–3 недели
Нагрузочное тестирование и профилирование 2–3 дня
Кластерная архитектура (балансировка, репликация) 1–2 недели

Стоимость рассчитывается индивидуально после аудита. [Получите консультацию по вашему проекту] — оценим текущее состояние и предложим план ускорения с конкретными сроками и бюджетом. Мы — команда с 10+ годами опыта в Битрикс, выполнили более 200 проектов по оптимизации скорости сайта.