Gzip / Brotli

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

Алгоритмы сжатия HTML, CSS и JS перед отправкой браузеру.

Gzip и Brotli — алгоритмы сжатия, которые сервер применяет к текстовым ответам (HTML, CSS, JS, JSON) перед отправкой браузеру. Brotli современнее и эффективнее: сжимает на 15–25% лучше Gzip при сопоставимой нагрузке на CPU.

Сжатие включается на стороне сервера (Nginx, Apache) или на CDN. Эффект на скорость загрузки — минус 30–60% к размеру ответа, заметно ускоряет TTFB и LCP.

Включить — стандарт хорошего хостинга. Картинки и видео сжатие не трогает (они уже сжаты), а вот HTML и JS режутся хорошо.

Сжатие текстовых ресурсов
styles.css        180 КБ
+ gzip (level 6)   38 КБ   ×4.7
+ brotli (level 6) 29 КБ   ×6.2
+ brotli (level 11) 24 КБ   ×7.5

// nginx: gzip on; brotli on; brotli_comp_level 6;
// Brotli лучше gzip на 20–30% для HTML/CSS/JS
Сжатие на уровне сервера: brotli обгоняет gzip на 20–30% по компрессии. nginx умеет оба
Пример из практики

HTML-страница в чистом виде — 86 КБ. После Gzip — 24 КБ, после Brotli — 19 КБ. Лучшее сжатие при той же CPU-нагрузке.

У Brotli есть уровни сжатия 0–11, у Gzip — 1–9, и это место, где легко выстрелить себе в ногу. Brotli 11 даёт максимальную экономию, но и максимально грузит CPU — для динамического HTML, который генерируется на каждый запрос, ставят уровень 4–6, иначе растёт TTFB вместо того чтобы падать. А вот статику (CSS, JS, шрифты .woff2 уже сжаты, их не трогаем) выгодно сжать заранее Brotli 11 и отдавать готовые .br-файлы — тогда дорогое сжатие выполняется один раз при сборке, а не на каждый хит.

Проверить, что сжатие реально работает, можно в DevTools на вкладке Network: в заголовках ответа должно стоять Content-Encoding: br (или gzip). Частая ошибка — Brotli включён в Nginx, но не указан в списке brotli_types, и весь JSON/SVG уходит несжатым. Браузер сам сообщает серверу о поддержке через Accept-Encoding, поэтому держать оба алгоритма нормально: старые клиенты и часть прокси получат Gzip, остальные — Brotli. На скорость это бьёт напрямую через LCP и в целом по Core Web Vitals, особенно на мобильном с медленным каналом.

Сжатие
Brotli плотнее

Brotli режет текст на 15–25% сильнее Gzip за счёт встроенного словаря и больших окон.

Нагрузка
Уровень под тип

Динамику жмут на уровне 4–6, статику — заранее на максимуме, чтобы не грузить CPU на каждом запросе.

Где
Сервер или CDN

Включается в Nginx/Apache или на CDN; держат оба алгоритма ради совместимости со старыми клиентами.

Разница между алгоритмами сводится к трём практическим осям: степень сжатия, нагрузка на сервер, где включать.