Заявка
Mobile · CWV

Brotli

br · алгоритм сжатия от Google

Brotli — это алгоритм сжатия данных от Google, который уменьшает размер файлов сайта перед отправкой в браузер. Сжимает HTML, CSS и JS плотнее, чем gzip, ускоряя загрузку страниц.

Brotli — это способ упаковки веб-файлов, при котором сервер отдаёт браузеру данные в уменьшенном виде, а тот распаковывает их перед отрисовкой. Что это значит на практике: HTML, CSS и шрифты передаются меньшим объёмом байт, поэтому страница доезжает до пользователя быстрее. Работает алгоритм только когда его поддерживают обе стороны — и сервер, и браузер.

Метод сжатия использует предустановленный словарь из частых веб-конструкций, за счёт чего обходит gzip на текстовых ресурсах. Включается через заголовок Content-Encoding: br, а уровень сжатия задаётся от 1 до 11. Проверить, что ресурс отдаётся сжатым, можно во вкладке Network в DevTools по полю Content-Encoding.

§ 01Зачем нужен

Сокращает вес текстовых ресурсов сайта: HTML-разметки, CSS-стилей, JavaScript и SVG. Меньше байт в ответе — короче время до First Contentful Paint и Largest Contentful Paint, а это напрямую входит в Core Web Vitals. На больших JS-бандлах разница с gzip заметнее всего, потому что словарь br заранее знает типовые ключевые слова кода. Для картинок в JPEG и WebP этот кодек сжатия бесполезен — они уже упакованы своими алгоритмами, повторное сжатие только тратит ресурсы CPU.

§ 02Как настраивается

На Nginx подключается модуль ngx_brotli, после чего в конфиг добавляются директивы brotli on, brotli_types и brotli_comp_level. На Apache за это отвечает mod_brotli. Уровень 11 даёт максимальную плотность, но грузит процессор — для файлов, которые сжимаются на лету, берут 4–6, а статику готовят заранее на 11. CDN вроде Cloudflare включают br-сжатие на своей стороне без правки сервера. Как проверить настройку: запросить страницу с заголовком Accept-Encoding: br и посмотреть ответ.

Замер эффекта

TTFB-ассеты −21%, LCP 3.4→2.6 c — Медиапортал о финансах на WordPress с 1.2M визитов в месяц включил Brotli уровня 5 на nginx для HTML, CSS и JS. Вес текстовых ассетов упал на 21% против gzip, LCP снизился с 3.4 до 2.6 с за 4 недели. Замер через PSI и CrUX-75th по мобильным.

Что меняется после внедрения

JS-бандл 480kb→392kb, −18% — B2B SaaS для логистики на React с MRR $150k раздавал статику через CDN с Brotli уровня 11 на этапе билда. JS-бандл сжался с 480kb до 392kb, First Load ускорился на 0.7 с за 2 недели. Динамика по WebPageTest и вкладке Network в Chrome DevTools.

§ 03Где смотреть результат

Открой DevTools в браузере, вкладку Network, кликни по нужному запросу и найди в разделе Response Headers строку Content-Encoding: br. Столбец Size показывает переданный объём и распакованный размер через дробь — по разнице видно степень сжатия. PageSpeed Insights в блоке диагностики отдельно указывает ресурсы без сжатия текста. Дополнительно вес до и после отдачи сравнивают в отчётах Screaming Frog при краулинге сайта.

§ 04Подводные камни

Алгоритм работает только по HTTPS в большинстве браузеров — на голом HTTP сжатие br молча отключается и отдаётся gzip. Старые клиенты без поддержки заголовка получают несжатый ответ, поэтому gzip оставляют как запасной вариант, а не удаляют. Сжатие на уровне 11 на динамических страницах при каждом запросе поднимает нагрузку на процессор — для такого контента уровень снижают. Ещё одна ошибка — включить компрессию для уже сжатых форматов: архивов, видео и растровых изображений, где выигрыша нет.

Частые ошибки
01
Сжатие уже сжатых форматов Brotli. Прогоняют через Brotli картинки JPEG, PNG и видео, которые уже сжаты. Размер не падает, но процессор тратит такты на бесполезную работу — растёт TTFB и нагрузка на сервер под трафиком. Как правильно: Настройте компрессию только для текстовых типов: text/html, text/css, application/javascript, svg. Бинарные форматы исключите из правил.
02
Максимальный уровень сжатия 11 на лету. Ставят quality 11 для динамических ответов. Сжатие каждого HTML занимает сотни миллисекунд на запрос — выигрыш в весе съедается задержкой, TTFB растёт, а не падает. Как правильно: Используйте уровень 4–5 для динамики on-the-fly, а уровень 11 применяйте только к статике через Brotli static с предсжатыми .br файлами.
03
Проверка Brotli в Chrome DevTools вместо продакшена. Смотрят заголовок content-encoding в локальном браузере и считают, что всё работает. На проде Brotli режется CDN или прокси на HTTP — до 30% пользователей отдаётся несжатый контент, LCP страдает. Как правильно: Проверяйте через curl -H 'Accept-Encoding: br' на боевом домене и WebPageTest. Сравнивайте content-encoding в ответе реального CDN, а не localhost.
Часто спрашивают

Brotli — частые вопросы о сжатии данных

Brotli простыми словами — что это такое?

+

Это алгоритм сжатия данных от Google, который уменьшает вес файлов сайта перед отправкой в браузер. Появился в 2015 году и сжимает HTML, CSS, JS на 15–25% плотнее старых методов, ускоряя загрузку страниц.

Br жмёт плотнее gzip — в среднем на 15–25% для текстовых форматов, но требует больше ресурсов процессора на максимальных уровнях. Google рекомендует статику паковать заранее на уровне 11, а динамику отдавать на уровнях 4–5 для баланса скорости.

Да, косвенно улучшает LCP и FCP за счёт меньшего объёма загружаемых данных. Чем быстрее браузер получит HTML и CSS, тем раньше отрисуется контент — это напрямую сказывается на метриках Core Web Vitals и мобильной скорости.

Нужно активировать модуль на веб-сервере: ngx_brotli для Nginx или mod_brotli для Apache. После настройки сервер отдаёт заголовок content-encoding: br браузерам, которые его поддерживают, — а это все современные версии Chrome, Firefox и Safari.

Обычно да — метод сжатия почти бесплатно ускоряет отдачу страниц и снижает трафик. Поддержку имеют свыше 96% браузеров, а фолбэк на gzip срабатывает автоматически, поэтому рисков для старых клиентов нет.

Не нашли ответ?

Спросите Андрея Гусарова — отвечаю в течение 1-2 рабочих дней.

Нажимая, вы соглашаетесь с обработкой данных.