4 min read
•Question 43 of 62mediumHow to compress data in Node.js?
Using zlib for compression and decompression.
What You'll Learn
- Gzip compression
- Deflate/Inflate
- Streaming compression
Basic Compression
code.jsJavaScript
const zlib = require('zlib');
const { promisify } = require('util');
const gzip = promisify(zlib.gzip);
const gunzip = promisify(zlib.gunzip);
// Compress
const compressed = await gzip('Hello World');
console.log(compressed); // Buffer
// Decompress
const decompressed = await gunzip(compressed);
console.log(decompressed.toString()); // 'Hello World'Streaming Compression
code.jsJavaScript
const fs = require('fs');
const zlib = require('zlib');
// Compress file
fs.createReadStream('input.txt')
.pipe(zlib.createGzip())
.pipe(fs.createWriteStream('input.txt.gz'));
// Decompress file
fs.createReadStream('input.txt.gz')
.pipe(zlib.createGunzip())
.pipe(fs.createWriteStream('output.txt'));Express Response Compression
$ terminalBash
npm install compressioncode.jsJavaScript
const compression = require('compression');
const express = require('express');
const app = express();
// Enable gzip compression for all responses
app.use(compression({
level: 6, // compression level (0-9)
threshold: 1024, // only compress if > 1KB
filter: (req, res) => {
if (req.headers['x-no-compression']) {
return false;
}
return compression.filter(req, res);
}
}));Compare Compression Methods
code.jsJavaScript
const data = 'Hello World'.repeat(1000);
// Gzip (general use)
const gzipped = zlib.gzipSync(data);
// Deflate (slightly faster)
const deflated = zlib.deflateSync(data);
// Brotli (better compression, modern browsers)
const brotli = zlib.brotliCompressSync(data);