B
Backend Ready | IT
@backend_ready7.3K подп.
495просмотров
6.8%от подписчиков
23 марта 2026 г.
Score: 545
Zlib — сжимаем трафик и экономим на трафике в Node.js 📦 Когда твой API отдает огромные JSON-ответы или текстовые файлы, пользователи долго ждут загрузки, а счета за облачный трафик растут. Встроенный модуль zlib позволяет сжимать данные на лету с помощью алгоритмов Gzip или Brotli. Шаг 1 — сжимаем файл (Gzip): Используем стримы (помнишь прошлый пост?), чтобы упаковать файл в архив без нагрузки на память. const zlib = require('zlib'); const fs = require('fs'); const { pipeline } = require('stream/promises'); async function compress() { await pipeline( fs.createReadStream('server.log'), zlib.createGzip(), fs.createWriteStream('server.log.gz') ); console.log('Готово! Файл стал в 5-10 раз меньше.'); } Зачем это нужно? 🚀 — Ускорение API: Текстовые данные (JSON, HTML, CSS) сжимаются очень эффективно. Пользователь получит 100 КБ вместо 1 МБ. 🏎️ — Экономия места: Логи и бэкапы в сжатом виде занимают копейки на диске или в S3-хранилище. — Brotli (br): Современный алгоритм от Google, который сжимает еще лучше, чем Gzip (поддерживается в Node.js через zlib.createBrotliCompress()). Как это работает в HTTP-сервере? 🌐 Клиент присылает заголовок Accept-Encoding: gzip, br. Сервер проверяет его и, если умеет, отдает сжатый ответ. const http = require('http'); http.createServer((req, res) => { const raw = fs.createReadStream('index.html'); const acceptEncoding = req.headers['accept-encoding'] || ''; if (acceptEncoding.includes('br')) { res.writeHead(200, { 'Content-Encoding': 'br' }); raw.pipe(zlib.createBrotliCompress()).pipe(res); } else if (acceptEncoding.includes('gzip')) { res.writeHead(200, { 'Content-Encoding': 'gzip' }); raw.pipe(zlib.createGzip()).pipe(res); } else { raw.pipe(res); } }).listen(3000); Методы, которые стоит знать: 📝 — zlib.gzip() / zlib.gunzip() — простые асинхронные методы для небольших объектов (Buffer). — createGzip() / createGunzip() — для работы со стримами. — createBrotliCompress() — для максимального сжатия текстовых ресурсов. 💎 — zlib.constants — настройки уровней сжатия (от самого быстрого до самого плотного). > Важный нюанс: Сжатие требует ресурсов CPU. Если данных мало (меньше 1 КБ), сжимать их нет смысла — накладные расходы на заголовок и процессорное время будут выше профита. ✅ ⚙ Backend Ready | #уроки
495
просмотров
2455
символов
Да
эмодзи
Нет
медиа

Другие посты @backend_ready

Все посты канала →
Zlib — сжимаем трафик и экономим на трафике в Node.js 📦 Ког — @backend_ready | PostSniper