Performance: Compression middleware
Compression middleware affects the time it takes for the browser to receive and render content by reducing the size of data sent over the network.
import express from 'express'; import compression from 'compression'; const app = express(); // Compress only text-based responses app.use(compression({ filter: (req, res) => { const contentType = res.getHeader('Content-Type') || ''; return /text|json|javascript|css/.test(contentType); } })); app.get('/', (req, res) => { res.sendFile('large-image.png'); });
import express from 'express'; import compression from 'compression'; const app = express(); // Compress all responses including already compressed files app.use(compression({ filter: () => true })); app.get('/', (req, res) => { res.sendFile('large-image.png'); });
| Pattern | DOM Operations | Reflows | Paint Cost | Verdict |
|---|---|---|---|---|
| Compress all responses including images | No impact | No impact | No impact | [X] Bad |
| Compress only text-based responses | No impact | No impact | No impact | [OK] Good |
compression middleware in a Node.js Express app?compression() to get the middleware function.app.use(compression()); correctly calls the compression function and passes the middleware to Express.import express from 'express';
import compression from 'compression';
const app = express();
app.use(compression());
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.listen(3000);app.use(compression()), so all responses, including GET '/', will be compressed if the client supports it.const express = require('express');
const compression = require('compression');
const app = express();
app.use(compression);
app.get('/', (req, res) => {
res.send('Hello');
});
app.listen(3000);app.use(compression); which passes the compression function itself, not the middleware returned by calling it.compression() to return the middleware function, so it should be app.use(compression());.threshold, which accepts bytes.threshold: 1024 means compress responses only if size is greater than 1024 bytes (1KB).Pass the test and this pattern moves unknown