← Home Türkçe →
Blog · English

Is Express really slow

A Node.js × Express performance benchmark

2.5×
With zero code changes — only moving from Node 18 to 26 — Express throughput jumps by this much.

Correction: an earlier version of this post said ~2.3× by mistake. The correct figure is ~2.5×.

One of the most common complaints about Express goes like this: Express is slow — use Hono, use Elysia, use Fastify. To test that claim with real numbers, we measured Express 4.22.2 and Express 5.2.1 on Node.js 18, 20, 22, 24, and 26. On Node 26 we also compared them with Hono 4.12.32 and Elysia 1.4.29.

The result was not what we expected.

Express is not slow. Your Node version is.

How we measured
We ran everything on a dedicated 2-core AMD EPYC Hetzner server under Ubuntu 26.04. Every framework exposed the same three endpoints: a simple JSON response, a user lookup that reads a route parameter, and a JSON body echo. Load testing used autocannon with 20 connections, a 5-second warmup, then 55 seconds of measurement. Each row is the average of hundreds of thousands of requests.

The real variable is your Node version

When we closed every other variable, this was the only difference that mattered.

Below is requests per second for Express 4 and Express 5 by Node version.

On Node 18, 20, and 22 the results sit close together — roughly 3,200 to 4,000 requests per second. The moment you move to Node 24, the number nearly doubles, crossing 8,000 req/s. The jump shows up the same way on both Express 4 and Express 5.

Latency tells the same story.

On Node 18, Express 4’s p99 latency is 13.47 ms. On Node 26, the same Express 4 app drops to 5.95 ms. Same code, same middleware, same routes.

The only thing that changed is the Node version underneath. The problem is not the library — it is the runtime.

The fact that Express 4 and Express 5 improve by roughly the same ratio is an important clue. This is not an Express issue. It is the result of improvements in Node’s own engine (V8) and http module. Any framework running on an older Node release will hit a similar ceiling.

So why are Hono and Elysia faster?

We tested them on the same Node 26 with the same three endpoints.

Hono handles nearly twice as many requests as Express. Elysia is close behind. This is not a hit piece on either of them — both are well-designed, modern tools.

But understanding where the gap comes from matters. Express has been continuously developed since 2010 and carries an unusually wide compatibility surface. It wraps Node’s classic http module and preserves middleware patterns, older routing styles, and compatibility with thousands of third-party packages accumulated over more than a decade. Hono and Elysia were written from scratch on modern web-standard Request and Response objects, with no legacy surface to carry. A thinner abstraction layer does less work, so it runs faster.

So Express’s relative slowness is not laziness or bad engineering. It is the cost of backward compatibility. The next section explains why that cost is often worth paying.

Performance is not everything

Choosing a library by requests per second alone is an incomplete approach.

What has kept Express standing for more than fifteen years is not raw speed — it is stability. Express brings these advantages:

Backward compatibility is not a weakness — it is a feature. An Express project written five years ago can still run today with small changes. Pick a newer, faster framework and you do not always get that guarantee. Hono and Elysia are excellent tools, but they have not yet passed the same long maturity test as Express.

If a project needs five or ten years of maintenance, whether the library still works cleanly five years from now matters far more than a few thousand requests per second.

Is Express bad? Not at all

So far we looked at where Hono and Elysia pull ahead. Here is the other side of the coin.

On memory, Express sits very close to Hono and well ahead of Elysia. More precisely, Elysia uses substantially more memory — about sixty percent more than Express.

On startup time, Express 4 lands second right behind Hono and beats Elysia by more than 3.5×. Elysia is designed for Bun and runs on Node through a compatibility layer, which shows up in both startup time and memory use.

On CPU, all four frameworks land between about 98% and 101% — no practical difference; they saturate a single core at similar rates. On latency, Express trails Hono and Elysia, but its p99 on Node 26 is still under 6 milliseconds. In the real world, an API call’s total time is usually dominated by database queries, network latency, and external services. A few milliseconds from the framework rarely create a visible difference in production.

Finally, the gap between Express 4 and Express 5 is remarkably small and inconsistent. On some Node versions Express 4 leads slightly; on Node 24, Express 5 pulls ahead. Which Express major you pick is not a decisive performance factor.

Conclusion

If your Express app feels slow, check your Node version before you switch frameworks. Moving from Node 18, 20, or 22 to Node 24 or 26 can roughly 2.5× your throughput with no code changes. That is cheaper and far less risky than rewriting onto a new framework.

Modern frameworks like Hono and Elysia are genuinely fast and well designed. If raw performance is the priority and the project is short-lived or small in scale, they can be great choices.

But Express is still highly competitive on latency, memory, CPU, and startup time. On top of that it offers more than fifteen years of maturity, a massive ecosystem, and an unmatched long-term support track record. If you are building something meant to last, survive team changes, and stay easy to maintain, Express is still one of the healthiest choices on the market.

Measured with Express 4.22.2 and Express 5.2.1, Node.js 18.20.8, 20.20.2, 22.23.1, 24.18.0 and 26.5.0, Hono 4.12.32 and Elysia 1.4.29. All tests ran on a single 2-core server with client and server on the same machine.