Performance: Rate limiting with express-rate-limit
This affects server response time and user experience by controlling request frequency to prevent overload.
Jump into concepts and practice - no test required
import rateLimit from 'express-rate-limit'; const limiter = rateLimit({ windowMs: 15 * 60 * 1000, // 15 minutes max: 100, // limit each IP to 100 requests per window standardHeaders: true, legacyHeaders: false }); app.use(limiter);
app.use((req, res, next) => {
// Custom naive rate limiting
if (!req.session.requests) req.session.requests = 0;
req.session.requests++;
if (req.session.requests > 100) {
res.status(429).send('Too many requests');
} else {
next();
}
});| Pattern | DOM Operations | Reflows | Paint Cost | Verdict |
|---|---|---|---|---|
| Custom naive rate limiting | N/A (server-side) | N/A | N/A | [X] Bad |
| express-rate-limit middleware | N/A (server-side) | N/A | N/A | [OK] Good |
express-rate-limit in an Express app?express-rate-limit doesexpress-rate-limit in an Express app?require is correct for many Express apps.rateLimit with an options object like { windowMs: 60000, max: 5 } to set limits.const rateLimit = require('express-rate-limit');
const limiter = rateLimit({ windowMs: 60000, max: 5 });
app.use(limiter);const rateLimit = require('express-rate-limit');
const limiter = rateLimit({ max: 10 });
app.use(limiter);windowMs option is needed to specify the time frame for the limit.max but does not set windowMs, so the time window is undefined.windowMs option to define the time window -> Option Bexpress-rate-limit only to /login?app.use('/login', middleware) applies the middleware only to the /login path.rateLimit with options returns middleware to pass to app.use.