Что такое Compression Ratio?

Compression Ratio — это отношение размера исходных данных к размеру сжатых данных.
Формула:
Compression Ratio = исходный размер / сжатый размер
Пример:
- Исходный файл: 100 КБ
- После сжатия: 20 КБ
- Коэффициент сжатия = 100 / 20 = 5:1 (или просто 5)
Чем выше коэффициент, тем сильнее сжатие и тем меньше данных передаётся по сети
HTTP-сжатие (Gzip, Brotli, Deflate)
Сервер сжимает текстовые файлы (HTML, CSS, JS, JSON) перед отправкой клиенту.
Пример заголовка HTTP-ответа
Content-Encoding: gzip
Сжатие изображений (WebP, AVIF, JPEG XL)
Форматы изображений используют алгоритмы сжатия:
- Lossless (без потерь) — PNG, WebP (в режиме без потерь)
- Lossy (с потерями) — JPEG, WebP, AVIF
Пример:
Исходное PNG: 500 КБ → Сжатое WebP: 100 КБ (CR = 5:1)
Видео и аудио (H.265, Opus, AAC)
Видеокодеки (например, H.265) могут давать коэффициент сжатия 10:1 и выше по сравнению с несжатым видео
Базы данных и API-ответы
- JSON-ответы API можно сжимать через gzip/brotli
- Некоторые **NoSQL БД (например, MongoDB) поддерживают сжатие данных на лету
Алгоритмы сжатия
| Алгоритм | Коэффициент сжатия | Скорость | Поддержка браузерами |
|---|---|---|---|
| Gzip | 3:1 – 6:1 | Быстро | Все браузеры |
| Brotli | 5:1 – 10:1 | Медленнее, но лучше | Современные браузеры |
| Deflate | 2:1 – 5:1 | Быстро | Совместим с устаревающими |
Как включить сжатие на сервере?
nginx
gzip on;
gzip_types text/html text/css application/javascript;
gzip_min_length 256;
gzip_comp_level 6; # Уровень сжатия (1-9)
Node.js (Express)
const compression = require('compression');
app.use(compression({ level: 6 })); // Уровень сжатия Gzip
Практический пример: сравнение Gzip vs Brotli
Допустим, у нас есть файл bundle.js размером 1МБ
| Алгоритм | Сжатый размер | Коэффициент сжатия |
|---|---|---|
| Без сжатия | 1 МБ | 1:1 |
| Gzip (уровень 6) | 200 КБ | 5:1 |
| Brotli (уровень 11) | 150 КБ | 6.67:1 |
Вывод: Brotli даёт лучшее сжатие, но требует больше CPU
Как измерить Compression Ratio?
Chrome DevTools
- Откройте вкладку Network.
- Найдите файл (например, .js, .css).
- Посмотрите заголовки:
- Content-Length (сжатый размер)
- X-Original-Size (если сервер его отправляет)
Инструменты для аудита
- Lighthouse (вкладка “Performance”)
- WebPageTest (показывает экономию трафика)
Оптимизация сжатия в веб-проектах
✅ Используйте Brotli для статических файлов (лучшее сжатие)
✅ Gzip — для динамического контента (быстрее)
✅ Оптимизируйте изображения (WebP/AVIF + sharp в Node.js)
✅ Минифицируйте JS/CSS (Terser, CSSNano) перед сжатием
✅ Настройте кэширование (Cache-Control + CDN)
Пример оптимизации Vue.js проекта
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import viteCompression from 'vite-plugin-compression';
export default defineConfig({
plugins: [
vue(),
// Базовый вариант (Gzip)
viteCompression(),
// Или расширенная настройка для Brotli + Gzip
viteCompression({
algorithm: 'brotliCompress', // 'gzip' по умолчанию
ext: '.br', // Расширение для Brotli
threshold: 10240, // Минимальный размер файла (в байтах)
verbose: true, // Логировать процесс
deleteOriginFile: false, // Удалять оригинальные файлы после сжатия
filter: /\.(js|css|json|html|ico|svg)(\?.*)?$/i, // Какие файлы сжимать
}),
viteCompression({ algorithm: 'gzip' }), // Дублируем для Gzip
],
build: {
// Дополнительные настройки сборки
chunkSizeWarningLimit: 1600, // Увеличиваем лимит для чанков
},
});
Вывод
Compression Ratio — ключевой показатель эффективности сжатия данных в вебе.
Правильное сжатие ускоряет загрузку сайта и снижает затраты на трафик
- Хороший коэффициент для текста: 5:1 – 10:1 (Brotli)
- Для изображений: 3:1 – 20:1 (WebP/AVIF)
- Для видео: 10:1 – 100:1 (H.265)

