Skip to content

Benchmarks

Benchmarks are only benchmarks, but they are important to us.

Routers

We measured the speeds of a bunch of JavaScript routers. For example, find-my-way is a very fast router used inside Fastify.

  • @medley/router
  • find-my-way
  • koa-tree-router
  • trek-router
  • express (includes handling)
  • koa-router

First, we registered the following routing to each of our routers. These are similar to those used in the real world.

ts
export const routes: Route[] = [
  { method: 'GET', path: '/user' },
  { method: 'GET', path: '/user/comments' },
  { method: 'GET', path: '/user/avatar' },
  { method: 'GET', path: '/user/lookup/username/:username' },
  { method: 'GET', path: '/user/lookup/email/:address' },
  { method: 'GET', path: '/event/:id' },
  { method: 'GET', path: '/event/:id/comments' },
  { method: 'POST', path: '/event/:id/comment' },
  { method: 'GET', path: '/map/:location/events' },
  { method: 'GET', path: '/status' },
  { method: 'GET', path: '/very/deeply/nested/route/hello/there' },
  { method: 'GET', path: '/static/*' },
]

Then we sent the Request to the endpoints like below.

ts
const routes: (Route & { name: string })[] = [
  {
    name: 'short static',
    method: 'GET',
    path: '/user',
  },
  {
    name: 'static with same radix',
    method: 'GET',
    path: '/user/comments',
  },
  {
    name: 'dynamic route',
    method: 'GET',
    path: '/user/lookup/username/hey',
  },
  {
    name: 'mixed static dynamic',
    method: 'GET',
    path: '/event/abcd1234/comments',
  },
  {
    name: 'post',
    method: 'POST',
    path: '/event/abcd1234/comment',
  },
  {
    name: 'long static',
    method: 'GET',
    path: '/very/deeply/nested/route/hello/there',
  },
  {
    name: 'wildcard',
    method: 'GET',
    path: '/static/index.html',
  },
]

Let's see the results.

On Node.js

The following screenshots show the results on Node.js.

bench

bench

bench

bench

bench

bench

bench

bench

On Bun

The followings show the results on Bun.

bench

bench

bench

bench

bench

bench

bench

bench

Cloudflare Workers

Hono is the fastest, compared to other routers for Cloudflare Workers.

Hono x 402,820 ops/sec ±4.78% (80 runs sampled)
itty-router x 212,598 ops/sec ±3.11% (87 runs sampled)
sunder x 297,036 ops/sec ±4.76% (77 runs sampled)
worktop x 197,345 ops/sec ±2.40% (88 runs sampled)
Fastest is Hono
✨  Done in 28.06s.

Deno

Hono is the fastest, compared to other frameworks for Deno.

  • Machine: Apple MacBook Pro, 32 GiB, M1 Pro, Deno v1.22.0
  • Scripts: benchmarks/deno
  • Method: bombardier --fasthttp -d 10s -c 100 'http://localhost:8000/user/lookup/username/foo'
FrameworkVersionResults
Hono3.0.0Requests/sec: 136112
Fast4.0.0-beta.1Requests/sec: 103214
Megalo0.3.0Requests/sec: 64597
Faster5.7Requests/sec: 54801
oak10.5.1Requests/sec: 43326
opine2.2.0Requests/sec: 30700

Another benchmark result: denosaurs/bench

Bun

Hono is one of the fastest frameworks for Bun. You can see it below.

Released under the MIT License.