Handling Compression

1. Installing compression Package

Example: Install

npm i compression

2. Enabling Response Compression

Example: Default

import compression from "compression";
app.use(compression());
Note: In production, compression is often best handled by the reverse proxy (Nginx, CloudFront, Cloudflare) — terminate compression at the edge.

3. Setting Compression Level

LevelTrade-off
1Fastest, lowest ratio
6 (default)Good balance
9Best ratio, highest CPU

Example: Custom level

app.use(compression({ level: 6 }));

4. Filtering Compressible Responses

Example: Custom filter

app.use(compression({
  filter: (req, res) => {
    if (req.headers["x-no-compression"]) return false;
    return compression.filter(req, res);  // default: compressible MIME types
  }
}));

5. Setting Compression Threshold

Example: Skip small bodies

app.use(compression({ threshold: 1024 }));  // bytes (default 1024)

6. Using Brotli Compression

Example: shrink-ray-current (Brotli + gzip)

import shrinkRay from "shrink-ray-current";
app.use(shrinkRay());  // auto-negotiates br > gzip > identity
EncodingNotes
br (Brotli)~20% better than gzip; modern browsers
gzipUniversal fallback
zstdEmerging — supported by Cloudflare etc.

7. Disabling Compression for Specific Routes

Example: Skip SSE

app.get("/sse", (req, res, next) => { res.setHeader("X-No-Compression", "1"); next(); }, sseHandler);
Warning: Streaming endpoints (SSE, chunked downloads) should usually skip compression — buffering breaks real-time delivery.

8. Checking Content Encoding Headers

HeaderSet by
Accept-EncodingClient
Content-EncodingServer (gzip, br, zstd)
Vary: Accept-EncodingServer — for caches

9. Testing Compressed Responses

Example: curl

curl -H "Accept-Encoding: gzip" -I https://api.example.com/users
# Look for: Content-Encoding: gzip

10. Optimizing Compression Performance

TipEffect
Compress at edge (CDN)Offload CPU from origin
Pre-compress static assetsServe .gz/.br directly
Skip already-compressed (jpg, mp4)Avoid CPU waste
Use Brotli for textSmaller payloads