Оптимізація сайту за допомогою Gzip та Brotli на Nginx та Apache

Уявіть: ваш сайт завантажується 5 секунд, але 80% часу йде на передачу JavaScript-бандлів. Ви вже оптимізували зображення, увімкнули кешування, але швидкість завантаження майже не змінилася. Швидше за все, ви упустили стиснення на транспортному рівні. <cite>За даними Google, ефективне стиснення може

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Оптимізація сайту за допомогою Gzip та Brotli на Nginx та Apache
Простий
від 4 годин до 2 днів

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

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1418
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1285
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    983
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1242
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    983
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    997

Уявіть: ваш сайт завантажується 5 секунд, але 80% часу йде на передачу JavaScript-бандлів. Ви вже оптимізували зображення, увімкнули кешування, але швидкість завантаження майже не змінилася. Швидше за все, ви упустили стиснення на транспортному рівні. За даними Google, ефективне стиснення може зменшити розмір контенту в 3–10 разів без змін у коді, що особливо важливо для Core Web Vitals. Ми налаштовуємо Gzip та Brotli на сервері. Економія на трафіку може сягати 70% при використанні Brotli — це знижує витрати на хостинг та CDN, наприклад, для сайту з трафіком 10 TB/міс можна заощадити до 5000 грн на місяць.

Brotli дає на 15–25% краще стиснення, ніж Gzip, при порівнянному навантаженні на CPU. Один із наших проєктів — інтернет-магазин з бандлом 1.2 МБ. Після налаштування Brotli з pre-compressed статикою розмір зменшився до 280 КБ, а LCP впав з 4.2 с до 1.8 с — покращення у 2.3 рази. Для статики ми використовуємо pre-compressed файли — .gz та .br створюються при збірці, сервер віддає їх без повторного стиснення. Це економить до 30% процесорного часу на піку, що зменшує навантаження на CPU та витрати на серверні ресурси.

Чому Brotli кращий за Gzip?

Brotli використовує алгоритм LZ77 зі словником для HTML/JS/CSS, що дає щільнішу упаковку. Наприклад, app.js 500 КБ стискається до 130 КБ (Brotli) проти 150 КБ (Gzip) — Brotli стискає в 1.15 рази краще. Різниця особливо помітна в мобільних мережах з обмеженою пропускною здатністю. Крім того, Brotli підтримує рівні стиснення до 11, що дозволяє максимально ущільнити статику при збірці. Однак на льоту високі рівні (9–11) сильно навантажують CPU, тому для динамічного стиснення рекомендується рівень 6. Якщо порівнювати, при рівні 6 Brotli стискає на 20% краще за Gzip при тому ж навантаженні.

Параметр Gzip Brotli
Алгоритм Deflate (LZ77+Huffman) LZ77 + словник
Макс. рівень 9 11
Середнє стиснення (HTML) 4x 5x
Підтримка браузерами 100% ~95%

Мінімізація навантаження на CPU при стисненні

Основний спосіб — використовувати pre-compressed статику. Файли .gz та .br генеруються один раз при збірці проєкту (наприклад, за допомогою vite-plugin-compression), а сервер віддає їх напряму, не витрачаючи процесорний час на стиснення кожного запиту. Для динамічного контенту (HTML, JSON) застосовується on-the-fly стиснення з рівнем 6 — баланс між ступенем стиснення та навантаженням на CPU. У пікові години можна вимкнути стиснення для великих файлів через директиву gzip_min_length 256. Моніторинг CPU дозволяє своєчасно скоригувати рівень стиснення — якщо навантаження вище 80%, розгляньте зниження рівня або збільшення gzip_min_length. Для зменшення навантаження на CPU також варто використовувати кешування та CDN із підтримкою Brotli.

Nginx: Gzip + Brotli

# /etc/nginx/conf.d/compression.conf # Для Brotli потрібен модуль ngx_brotli (встановлюється з репозиторію) gzip on; gzip_vary on; gzip_proxied any; gzip_comp_level 6; gzip_min_length 256; gzip_types application/javascript application/json application/xml application/rss+xml image/svg+xml text/css text/html text/javascript text/plain text/xml font/woff font/woff2; brotli on; brotli_comp_level 6; brotli_types application/javascript application/json text/css text/html text/plain image/svg+xml font/woff2; 

Перевірка:

curl -H "Accept-Encoding: br" -I https://www.wikipedia.org # Відповідь має містити: Content-Encoding: br curl -H "Accept-Encoding: gzip" -I https://www.wikipedia.org # Відповідь: Content-Encoding: gzip 

Pre-compressed static assets

Для статичних файлів (JS, CSS, бандли) — генерувати .gz та .br файли при збірці, віддавати напряму. Немає витрат CPU при кожному запиті:

// vite.config.ts import { defineConfig } from 'vite'; import viteCompression from 'vite-plugin-compression'; export default defineConfig({ plugins: [ viteCompression({ algorithm: 'gzip', ext: '.gz' }), viteCompression({ algorithm: 'brotliCompress', ext: '.br' }), ] }); 
# Nginx: віддавати pre-compressed файли location ~* \.(js|css|woff2)$ { gzip_static on; # шукає .gz версію brotli_static on; # шукає .br версію (модуль ngx_brotli) expires 1y; add_header Cache-Control "public, immutable"; } 

Як перевірити, що стиснення працює?

Використовуйте curl або вкладку Network в DevTools. У відповіді має бути заголовок Content-Encoding: br або gzip. Також перевірте Vary: Accept-Encoding — він вказує кешувальним серверам, що контент залежить від кодування. Для покрокової діагностики можна використовувати онлайн-сервіси, наприклад, перевірку заголовків на сайті.

Якщо клієнт не підтримує Brotli, Nginx автоматично віддає Gzip або нестиснений контент. Переконайтеся, що директива gzip on увімкнена — це гарантує fallback. Використання CDN з підтримкою Brotli додатково прискорює доставку контенту та знижує навантаження на вихідний сервер.

Типові результати стиснення

Файл Оригінал Gzip Brotli
app.js 500 кБ 150 кБ 130 кБ
app.css 80 кБ 18 кБ 15 кБ
HTML сторінка 50 кБ 12 кБ 10 кБ

Рівні стиснення: рекомендації

Рівні 1–3 — низьке навантаження CPU, слабке стиснення. 4–6 — баланс. 7–9 — високе стиснення, але CPU зростає нелінійно: рівень 9 потребує в 3 рази більше часу, ніж 6. Для pre-compressed файлів використовуйте 11 (тільки Brotli) — компілюється один раз при збірці.

Apache

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

Процес налаштування стиснення

  1. Аналіз поточної конфігурації сервера (Nginx/Apache) для виявлення нестисненого контенту.
  2. Вибір рівня стиснення (Gzip 6, Brotli 6 — баланс між CPU та стисненням).
  3. Налаштування винятків (нестисливі формати: PNG, JPEG, MP4, WebP, AVIF).
  4. Генерація pre-compressed файлів у збірці (Vite, Webpack) для статичних ресурсів.
  5. Перевірка заголовків відповідей (Content-Encoding, Vary: Accept-Encoding).
  6. Моніторинг навантаження на CPU та коригування рівня стиснення при потребі.

Що входить у роботу

  • Налаштування Gzip та Brotli на сервері (Nginx/Apache) з урахуванням типів MIME.
  • Конфігурація pre-compressed статики (якщо використовується збірник).
  • Перевірка заголовків і тестування стиснення через curl або DevTools.
  • Документація з внесеними змінами.
  • Рекомендації щодо рівнів стиснення під ваш трафік.

Наші інженери мають 5+ років досвіду (з 2018 року) та реалізували 100+ успішних проєктів, знижуючи LCP та TTFB на 40-60%. Хочете так само? Замовте налаштування під ключ: термін виконання 1 день, вартість від 3000 грн. Послуга включає аудит, налаштування Gzip/Brotli, pre-compressed статику та перевірку заголовків. Пишіть для безкоштовної оцінки проєкту — оцінимо ваш сайт та запропонуємо оптимальне рішення.