Скорость и кэширование 2 мин чтения

Сжатие ответов: gzip и brotli

Одна настройка сервера, которая уменьшает объём передаваемых данных в разы. Включается за пять минут и работает везде.

Текстовые файлы — HTML, CSS, JavaScript, JSON, SVG — отлично сжимаются: в них много повторов. Сервер может отдавать их в сжатом виде, а браузер распакует сам. Экономия — обычно в 4–8 раз.

Работает это через переговоры: браузер сообщает, что умеет распаковывать, сервер выбирает формат и помечает ответ.

Запрос:  Accept-Encoding: gzip, deflate, br
Ответ:   Content-Encoding: br

gzip или brotli

gzip — стандарт, поддерживается всем и всегда. brotli (br) сжимает текст на 15–25% лучше, поддерживается всеми современными браузерами и работает только по HTTPS.

Правильная настройка — оба: brotli для тех, кто умеет, gzip как запасной вариант.

Как включить

Nginx:

gzip on;
gzip_comp_level 5;
gzip_min_length 256;
gzip_types text/plain text/css application/json application/javascript
           text/xml application/xml image/svg+xml;

Уровень 5 — разумный компромисс: выше даёт мизерный выигрыш при заметной нагрузке на процессор. Brotli в nginx требует модуля ngx_brotli; во многих сборках и панелях он уже есть.

Apache (.htaccess):

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

Панели хостинга (ISPmanager, cPanel, панель облачного провайдера) — обычно есть галочка «Сжатие» в настройках сайта.

CDN сжимает сам, если включён соответствующий пункт.

Что не нужно сжимать

Изображения (JPEG, PNG, WebP), видео, архивы, PDF уже сжаты внутри своего формата. Повторное сжатие даст нулевую экономию и потратит процессорное время. Именно поэтому в gzip_types перечисляют только текстовые типы.

Статическое сжатие

Для файлов, которые не меняются (собранные CSS и JS), можно сжать заранее и класть рядом .br и .gz — сервер отдаст готовое, не тратя процессор на каждый запрос:

gzip_static on;
brotli_static on;

Так можно позволить себе максимальный уровень сжатия — он платится один раз при сборке.

Как проверить

  • Пункт аудита «Сжатие (gzip/brotli)».
  • Из консоли:
curl -I -H "Accept-Encoding: gzip, br" https://example.ru/ | grep -i content-encoding

Пустой ответ — сжатие не работает.

  • В браузере: F12Network → выберите документ → Response Headerscontent-encoding. В колонке Size будут два числа: сколько передано по сети и сколько занимает распакованный файл. Если они равны — сжатия нет.

Частая ситуация

Сжатие работает для HTML, но не для CSS и JS — в списке типов не указан нужный MIME-тип. На размер документа это влияет сильнее всего. Проверяйте не только главный документ, но и подключаемые файлы: обычно именно они весят больше всего.

А что с этим на вашем сайте?

Аудит «Кверху» проверяет этот пункт вместе с остальными пятьюдесятью и показывает конкретику: какие страницы затронуты и что именно исправить. Первая полная проверка проекта — бесплатно.

Проверить сайт бесплатно