#1 Data Analytics Program in India
₹2,499₹1,499Enroll Now
4 min read
Question 43 of 62medium

How 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 compression
code.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);