Недавно снова вспомнила про Compression Streams API — и это тот случай, когда платформа уже умеет то, ради чего раньше тянули библиотеку. 🤭
Это встроенное потоковое API для сжатия и распаковки данных в форматах gzip и deflate. Работает поверх Streams, то есть данные обрабатываются по частям, без загрузки всего в память.
Если коротко: теперь можно сжимать и распаковывать данные прямо в клиенте — без сторонних зависимостей.
🧩 Что важно запомнить?
✔️ Форматы: gzip, deflate;
✔️ Классы:
CompressionStream и DecompressionStream;✔️ Работает поверх Streams — данные идут по частям, без загрузки всего в память;
✔️ Используется через
pipeThrough() — вписывается в любую стрим-цепочкуReadableStream → CompressionStream → WritableStream — и всё это идёт «на лету».🧩 Пример: сжимаем в
gzip
async function compress(text) {
const encoder = new TextEncoder();
const stream = new Blob([encoder.encode(text)]).stream();
const compressed = stream
.pipeThrough(new CompressionStream("gzip"));
return await new Response(compressed).blob();
}
🧩 Где это полезно?
⏺️ сжимать данные перед отправкой на сервер;
⏺️ осохранять/обрабатывать большие JSON / CSV / логи;
⏺️ уменьшать зависимость от библиотек — особенно при больших файлах
Из минусов: поддерживаются только
gzip и deflate (без ZIP-архивов), нельзя настраивать уровень сжатия, а в старых браузерах API может быть недоступно. 😕В итоге, это удобная и незаметная фича платформы — для большинства простых задач сжатия её хватает. 👍