DEV Community

Cover image for Top 5 Tips to Supercharge Your Express.js App for Lightning-Fast Performance
Rigal Patel
Rigal Patel

Posted on

Top 5 Tips to Supercharge Your Express.js App for Lightning-Fast Performance

Express.js is one of the most popular frameworks for building Node.js applications. Its lightweight nature makes it fast, but as your app grows, performance bottlenecks can creep in. In this blog, I’ll share five practical tips to optimize your Express.js app for speed and scalability.

1. Optimize Middleware Usage

Middleware is the backbone of any Express.js app, but unnecessary or poorly implemented middleware can slow things down.

Only load required middleware: Avoid global middleware for routes that don’t need it.
Example: Apply body-parser only to routes expecting a JSON payload.

const express = require('express');
const app = express();
const bodyParser = require('body-parser');

// Use body-parser only for specific routes
app.post('/api/data', bodyParser.json(), (req, res) => {
  res.send('Data received');
});

Enter fullscreen mode Exit fullscreen mode

2. Leverage Caching

Caching reduces the need for repeated database queries or API calls. Tools like redis or HTTP caching headers can dramatically improve response times.

Example with Redis:

const redis = require('redis');
const client = redis.createClient();
const app = require('express')();

app.get('/api/resource', (req, res) => {
  const cacheKey = 'resource';
  client.get(cacheKey, (err, cachedData) => {
    if (cachedData) {
      res.send(JSON.parse(cachedData));
    } else {
      const data = fetchDataFromDatabase(); // Simulated DB call
      client.setex(cacheKey, 3600, JSON.stringify(data)); // Cache for 1 hour
      res.send(data);
    }
  });
});

Enter fullscreen mode Exit fullscreen mode

HTTP Caching:

app.use((req, res, next) => {
  res.set('Cache-Control', 'public, max-age=3600'); // Cache for 1 hour
  next();
});

Enter fullscreen mode Exit fullscreen mode

3. Use Compression

Large payloads can slow down response times. Enabling Gzip compression can reduce payload size and improve speed.

const compression = require('compression');
const express = require('express');
const app = express();

app.use(compression()); // Compress all routes

Enter fullscreen mode Exit fullscreen mode

This simple addition can reduce response sizes by up to 70%!

4. Optimize Database Queries

Slow database queries are often the main culprit behind poor app performance.

Tips:

  • Index frequently queried fields in your database.
  • Use pagination or limit for large datasets.
  • Avoid N+1 query problems by using joins or batch fetches. Example with Mongoose:
const User = require('./models/User');

// Instead of fetching all users
app.get('/users', async (req, res) => {
  const users = await User.find().limit(20).skip(0); // Use pagination
  res.send(users);
});

Enter fullscreen mode Exit fullscreen mode

5. Enable HTTP/2 and Use a CDN

HTTP/2 allows multiplexing and header compression, reducing latency for static assets. Pairing this with a CDN further speeds up delivery by caching static assets closer to users.

Setup for HTTP/2 with Express:

const http2 = require('http2');
const fs = require('fs');
const express = require('express');

const app = express();
const options = {
  key: fs.readFileSync('./ssl/key.pem'),
  cert: fs.readFileSync('./ssl/cert.pem'),
};

http2.createSecureServer(options, app).listen(8443, () => {
  console.log('HTTP/2 server running on port 8443');
});

Enter fullscreen mode Exit fullscreen mode

By efficiently managing middleware, caching, compressing responses, and optimizing database queries, you can significantly improve performance. Implement these tips and ensure your app is blazing fast!

If you found this blog helpful, hit the ❤️ icon and follow me for more JavaScript tips and tricks!

Top comments (0)