panorama

HTTP routes and Orama

MIT License

Stars
0

Paronama

Getting Started

This repository is just for fun. Please don't use this in production.

Benchmark

 npm run bench:node

> bench:node
> tsx ./src/bench.mts

cpu: Apple M1 Pro
runtime: node v20.8.1 (arm64-darwin)

benchmark                                 time (avg)             (min  max)       p75       p99      p995
---------------------------------------------------------------------------- -----------------------------
 short static - GET /user
---------------------------------------------------------------------------- -----------------------------
Hono RegExpRouter                      66.54 ns/iter  (60.24 ns  190.32 ns)  67.04 ns 141.79 ns 161.75 ns
Hono TrieRouter                       215.55 ns/iter (206.72 ns  276.29 ns) 216.84 ns 262.63 ns 273.33 ns
@medley/router                         95.97 ns/iter  (90.79 ns  168.05 ns)  98.29 ns 110.49 ns 156.28 ns
find-my-way                            88.52 ns/iter  (80.81 ns  110.63 ns)  91.25 ns 104.88 ns 106.92 ns
koa-tree-router                        80.98 ns/iter   (75.89 ns  99.22 ns)  83.79 ns  92.27 ns     96 ns
trek-router                           109.44 ns/iter (103.45 ns  135.21 ns) 111.64 ns 123.22 ns  124.6 ns
express (WARNING: includes handling)    1.06 s/iter     (1.05 s  1.11 s)   1.07 s   1.11 s   1.11 s
koa-router                               440 ns/iter (433.48 ns  470.75 ns)  440.2 ns 465.46 ns 470.75 ns
radix3                                 85.67 ns/iter   (79.6 ns  136.27 ns)  87.93 ns 105.31 ns 112.62 ns
panorama                              574.07 ns/iter (554.92 ns  659.09 ns) 576.93 ns 659.09 ns 659.09 ns

summary for short static - GET /user
  Hono RegExpRouter
   1.22x faster than koa-tree-router
   1.29x faster than radix3
   1.33x faster than find-my-way
   1.44x faster than @medley/router
   1.64x faster than trek-router
   3.24x faster than Hono TrieRouter
   6.61x faster than koa-router
   8.63x faster than panorama
   15.99x faster than express (WARNING: includes handling)

 static with same radix - GET /user/comments
---------------------------------------------------------------------------- -----------------------------
Hono RegExpRouter                      78.19 ns/iter   (73.66 ns  96.71 ns)  82.17 ns  89.15 ns  90.11 ns
Hono TrieRouter                       251.27 ns/iter (240.25 ns  270.02 ns) 252.36 ns 268.09 ns 268.49 ns
@medley/router                        146.08 ns/iter (139.68 ns  167.28 ns) 149.78 ns 157.93 ns 161.99 ns
find-my-way                           157.67 ns/iter (149.55 ns  171.04 ns) 160.97 ns  169.7 ns 170.63 ns
koa-tree-router                       121.23 ns/iter (113.66 ns  140.35 ns) 124.59 ns 132.03 ns 135.52 ns
trek-router                           168.15 ns/iter  (159.3 ns  186.15 ns) 171.27 ns 181.74 ns 184.55 ns
express (WARNING: includes handling)    1.11 s/iter      (1.1 s  1.15 s)   1.12 s   1.15 s   1.15 s
koa-router                            455.39 ns/iter (447.27 ns  481.87 ns) 456.25 ns 478.88 ns 481.87 ns
radix3                                  93.7 ns/iter  (88.32 ns  113.88 ns)   97.5 ns 103.44 ns 110.52 ns
panorama                              635.86 ns/iter (617.44 ns  893.51 ns) 637.33 ns 893.51 ns 893.51 ns

summary for static with same radix - GET /user/comments
  Hono RegExpRouter
   1.2x faster than radix3
   1.55x faster than koa-tree-router
   1.87x faster than @medley/router
   2.02x faster than find-my-way
   2.15x faster than trek-router
   3.21x faster than Hono TrieRouter
   5.82x faster than koa-router
   8.13x faster than panorama
   14.24x faster than express (WARNING: includes handling)

 dynamic route - GET /user/lookup/username/hey
---------------------------------------------------------------------------- -----------------------------
Hono RegExpRouter                      145.7 ns/iter (138.37 ns  158.86 ns) 148.39 ns 156.21 ns 158.36 ns
Hono TrieRouter                       391.67 ns/iter (362.98 ns  809.78 ns) 389.16 ns 771.54 ns 809.78 ns
@medley/router                        202.51 ns/iter (192.63 ns  351.07 ns) 205.35 ns 229.45 ns 237.77 ns
find-my-way                           242.38 ns/iter  (228.2 ns  264.68 ns) 249.39 ns 261.75 ns 263.56 ns
koa-tree-router                       180.86 ns/iter (165.56 ns  206.73 ns) 185.24 ns 196.98 ns 197.19 ns
trek-router                           298.51 ns/iter (265.26 ns  851.76 ns) 299.12 ns 678.12 ns 851.76 ns
express (WARNING: includes handling)    1.83 s/iter     (1.75 s  1.97 s)   1.83 s   1.97 s   1.97 s
koa-router                            471.32 ns/iter  (453.4 ns  529.69 ns) 474.53 ns 525.58 ns 529.69 ns
radix3                                421.78 ns/iter  (407.16 ns  455.6 ns) 427.89 ns 454.62 ns  455.6 ns
panorama                              758.17 ns/iter   (679.69 ns  1.61 s) 737.16 ns   1.61 s   1.61 s

summary for dynamic route - GET /user/lookup/username/hey
  Hono RegExpRouter
   1.24x faster than koa-tree-router
   1.39x faster than @medley/router
   1.66x faster than find-my-way
   2.05x faster than trek-router
   2.69x faster than Hono TrieRouter
   2.89x faster than radix3
   3.23x faster than koa-router
   5.2x faster than panorama
   12.56x faster than express (WARNING: includes handling)

 mixed static dynamic - GET /event/abcd1234/comments
---------------------------------------------------------------------------- -----------------------------
Hono RegExpRouter                     148.02 ns/iter (139.11 ns  280.45 ns) 151.66 ns 190.08 ns 221.55 ns
Hono TrieRouter                       407.86 ns/iter  (396.9 ns  471.78 ns) 412.69 ns 436.63 ns 471.78 ns
@medley/router                        170.29 ns/iter (148.63 ns  202.95 ns) 176.36 ns 197.46 ns 198.55 ns
find-my-way                           209.58 ns/iter (198.15 ns  242.74 ns) 215.03 ns 237.38 ns 241.27 ns
koa-tree-router                       152.56 ns/iter  (140.46 ns  195.8 ns) 156.91 ns 178.95 ns 183.28 ns
trek-router                           246.44 ns/iter (230.65 ns  290.93 ns) 253.98 ns  277.8 ns 281.76 ns
express (WARNING: includes handling)    1.97 s/iter     (1.89 s  2.28 s)   1.98 s   2.28 s   2.28 s
koa-router                            499.17 ns/iter (473.68 ns  542.42 ns)  508.4 ns 537.86 ns 542.42 ns
radix3                                404.98 ns/iter (388.88 ns  428.18 ns) 410.98 ns 422.97 ns 428.18 ns
panorama                               730.7 ns/iter   (668.41 ns  1.83 s) 728.76 ns   1.83 s   1.83 s

summary for mixed static dynamic - GET /event/abcd1234/comments
  Hono RegExpRouter
   1.03x faster than koa-tree-router
   1.15x faster than @medley/router
   1.42x faster than find-my-way
   1.66x faster than trek-router
   2.74x faster than radix3
   2.76x faster than Hono TrieRouter
   3.37x faster than koa-router
   4.94x faster than panorama
   13.32x faster than express (WARNING: includes handling)

 post - POST /event/abcd1234/comment
---------------------------------------------------------------------------- -----------------------------
Hono RegExpRouter                     136.61 ns/iter (127.65 ns  162.55 ns) 142.64 ns 156.53 ns 160.72 ns
Hono TrieRouter                       418.45 ns/iter (402.88 ns  467.76 ns) 425.62 ns 456.46 ns 467.76 ns
@medley/router                         165.9 ns/iter (150.04 ns  379.45 ns) 167.65 ns 262.03 ns 307.88 ns
find-my-way                           208.58 ns/iter (195.84 ns  362.84 ns)  214.2 ns 323.75 ns 329.98 ns
koa-tree-router                       145.35 ns/iter (130.99 ns  241.59 ns) 149.62 ns  184.1 ns 188.24 ns
trek-router                           208.83 ns/iter (192.34 ns  340.73 ns) 215.86 ns 240.22 ns 242.57 ns
express (WARNING: includes handling)    1.99 s/iter     (1.93 s  2.08 s)   2.02 s   2.08 s   2.08 s
koa-router                            484.72 ns/iter (466.78 ns  518.33 ns) 490.43 ns 514.47 ns 518.33 ns
radix3                                403.49 ns/iter  (385.78 ns  447.2 ns) 409.11 ns 445.81 ns  447.2 ns
panorama                              685.32 ns/iter  (663.42 ns  931.8 ns)  687.6 ns  931.8 ns  931.8 ns

summary for post - POST /event/abcd1234/comment
  Hono RegExpRouter
   1.06x faster than koa-tree-router
   1.21x faster than @medley/router
   1.53x faster than find-my-way
   1.53x faster than trek-router
   2.95x faster than radix3
   3.06x faster than Hono TrieRouter
   3.55x faster than koa-router
   5.02x faster than panorama
   14.54x faster than express (WARNING: includes handling)

 long static - GET /very/deeply/nested/route/hello/there
---------------------------------------------------------------------------- -----------------------------
Hono RegExpRouter                      86.97 ns/iter  (79.85 ns  199.43 ns)  87.93 ns 117.09 ns 151.95 ns
Hono TrieRouter                       352.34 ns/iter (337.67 ns  378.64 ns) 358.01 ns 378.64 ns 378.64 ns
@medley/router                        124.86 ns/iter (116.95 ns  150.74 ns) 128.86 ns  144.1 ns 147.11 ns
find-my-way                           211.06 ns/iter  (200.7 ns  241.44 ns) 216.44 ns 231.95 ns 233.75 ns
koa-tree-router                       121.91 ns/iter   (113.1 ns  144.9 ns) 125.03 ns 139.85 ns 140.82 ns
trek-router                           142.23 ns/iter (131.32 ns  167.95 ns) 145.98 ns  166.2 ns 166.65 ns
express (WARNING: includes handling)    1.45 s/iter      (1.42 s  1.5 s)   1.48 s    1.5 s    1.5 s
koa-router                            480.32 ns/iter (445.43 ns  600.94 ns) 493.58 ns 565.38 ns 600.94 ns
radix3                                 93.63 ns/iter  (86.71 ns  128.02 ns)  95.07 ns 114.85 ns 118.68 ns
panorama                              625.85 ns/iter    (594 ns  992.22 ns) 629.46 ns 992.22 ns 992.22 ns

summary for long static - GET /very/deeply/nested/route/hello/there
  Hono RegExpRouter
   1.08x faster than radix3
   1.4x faster than koa-tree-router
   1.44x faster than @medley/router
   1.64x faster than trek-router
   2.43x faster than find-my-way
   4.05x faster than Hono TrieRouter
   5.52x faster than koa-router
   7.2x faster than panorama
   16.73x faster than express (WARNING: includes handling)

 wildcard - GET /static/index.html
---------------------------------------------------------------------------- -----------------------------
Hono RegExpRouter                     155.42 ns/iter  (143.1 ns  184.48 ns) 161.12 ns 180.11 ns 184.26 ns
Hono TrieRouter                        297.4 ns/iter (280.96 ns  329.79 ns) 307.12 ns 325.06 ns 329.79 ns
@medley/router                        128.08 ns/iter (115.88 ns  162.95 ns) 132.95 ns 157.04 ns 160.54 ns
find-my-way                           185.84 ns/iter (172.37 ns  217.08 ns) 192.22 ns 212.17 ns 213.53 ns
koa-tree-router                       154.56 ns/iter  (144.36 ns  236.2 ns) 158.75 ns 219.68 ns 227.44 ns
trek-router                           184.43 ns/iter (175.95 ns  241.24 ns) 190.27 ns  207.9 ns 211.18 ns
express (WARNING: includes handling)    2.17 s/iter     (2.11 s  2.23 s)   2.19 s   2.23 s   2.23 s
koa-router                            466.57 ns/iter (443.57 ns  508.18 ns) 478.63 ns 506.48 ns 508.18 ns
radix3                                399.73 ns/iter  (379.43 ns  440.9 ns) 407.33 ns 437.81 ns  440.9 ns
panorama                              548.74 ns/iter (529.64 ns  711.27 ns) 550.77 ns 637.73 ns 711.27 ns

summary for wildcard - GET /static/index.html
  @medley/router
   1.21x faster than koa-tree-router
   1.21x faster than Hono RegExpRouter
   1.44x faster than trek-router
   1.45x faster than find-my-way
   2.32x faster than Hono TrieRouter
   3.12x faster than radix3
   3.64x faster than koa-router
   4.28x faster than panorama
   16.93x faster than express (WARNING: includes handling)

 all together
---------------------------------------------------------------------------- -----------------------------
Hono RegExpRouter                      416.2 ns/iter (403.47 ns  431.68 ns) 420.13 ns 431.03 ns 431.68 ns
Hono TrieRouter                         2.02 s/iter     (1.99 s  2.13 s)   2.03 s   2.13 s   2.13 s
@medley/router                        712.83 ns/iter (667.78 ns  827.71 ns) 723.25 ns 827.71 ns 827.71 ns
find-my-way                              1.1 s/iter     (1.06 s  1.24 s)   1.12 s   1.24 s   1.24 s
koa-tree-router                       648.13 ns/iter  (611.23 ns  721.5 ns) 668.67 ns  721.5 ns  721.5 ns
trek-router                             1.01 s/iter   (986.65 ns  1.05 s)   1.02 s   1.05 s   1.05 s
express (WARNING: includes handling)   11.45 s/iter  (10.67 s  219.42 s)  11.38 s  14.13 s  15.21 s
koa-router                              3.21 s/iter     (3.08 s  3.34 s)   3.28 s   3.34 s   3.34 s
radix3                                  1.64 s/iter     (1.59 s  1.72 s)   1.65 s   1.72 s   1.72 s
panorama                                4.58 s/iter      (4.35 s  5.4 s)   4.64 s    5.4 s    5.4 s

summary for all together
  Hono RegExpRouter
   1.56x faster than koa-tree-router
   1.71x faster than @medley/router
   2.42x faster than trek-router
   2.65x faster than find-my-way
   3.94x faster than radix3
   4.86x faster than Hono TrieRouter
   7.72x faster than koa-router
   11.01x faster than panorama
   27.52x faster than express (WARNING: includes handling)

Testing

npm test

License

MIT

Badges
Extracted from project README
Tests