Working with Zlib (Compression)
1. Compressing with gzip (zlib.gzip)
Example
import { gzip } from "node:zlib";
import { promisify } from "node:util";
const compressed = await promisify(gzip)(Buffer.from(text));
2. Decompressing with gunzip (zlib.gunzip)
| API | Use |
|---|---|
zlib.gunzip(buf, cb) | Decompress gzip |
zlib.unzip(buf, cb) | Auto-detect gzip/deflate |
3. Using Deflate Compression (zlib.deflate)
| API | Use |
|---|---|
zlib.deflate / inflate | Standard zlib |
zlib.deflateRaw / inflateRaw | No zlib header |
4. Using Inflate Decompression (zlib.inflate)
5. Using Brotli Compression (zlib.brotliCompress)
| API | Notes |
|---|---|
zlib.brotliCompress / Decompress | Best ratio for text |
zlib.createBrotliCompress() | Stream variant |
| Quality | 0–11 (default 11 = slowest, smallest) |
6. Creating Compression Streams (zlib.createGzip)
Example
import { pipeline } from "node:stream/promises";
await pipeline(createReadStream("a.txt"), zlib.createGzip(), createWriteStream("a.txt.gz"));
7. Setting Compression Level
| Level | Effect |
|---|---|
0 | No compression |
1 | Fastest |
6 (default) | Balanced |
9 | Best ratio |
8. Compressing HTTP Responses
Example: Negotiate encoding
const accept = req.headers["accept-encoding"] ?? "";
if (accept.includes("br")) {
res.setHeader("Content-Encoding", "br");
pipeline(src, zlib.createBrotliCompress(), res);
} else if (accept.includes("gzip")) {
res.setHeader("Content-Encoding", "gzip");
pipeline(src, zlib.createGzip(), res);
} else { pipeline(src, res); }
9. Using Promises API (zlib.promises)
| Note | Detail |
|---|---|
No zlib/promises | Use util.promisify |
10. Handling Compression Errors
| Error | Cause |
|---|---|
Z_DATA_ERROR | Corrupt input |
Z_BUF_ERROR | Insufficient buffer |
| Truncated stream | Watch for unexpected end |