koa-tree-router 高性能的 koa 路由
发布于 3 年前 作者 steambap 2534 次浏览 来自 分享

最近有个非常火的框架叫Fastify。它自称自己高性能的杀手锏之一就是使用了他们自己研发的路由find-my-way。这个路由说是利用基数树的数据结构,查找时间为 O(k),比基于正则的路由要快很多。

我好奇的看了一下他们的实现,居然是基于 Golang 里面一个叫做 echo 的框架的路由修改的。而 Golang 的路由实现当中,当属 julienschmidt/httprouter 这个项目里面的实现性能最高,比 echo 快 3~5 倍。所以我就做了一个小的实验,基于 httprouter 修改一版基数树的路由,但结果一般:

  node version: v8.9.1, date: Tue Jan 02 2018 09:49:23 GMT+0800 (CST)
  Starting...
  3 tests completed.

  koa-router  x   515,004 ops/sec ±0.39% (92 runs sampled)
  find-my-way x 2,745,259 ops/sec ±0.27% (96 runs sampled)
  tree-router x 7,088,108 ops/sec ±0.50% (96 runs sampled)

只比 find-my-way 快了两倍多,考虑到他们的实现肯定会有为他们的框架妥协的部分,就算改进了,也不会给他们的框架总体带来多大的提升。

其实现在 Node 社区用的最多的还是 express 和 koa。express 的路由是内置的基于正则的路由,应该不会轻易改动,而 koa 是没有基于基数树的路由的,所以我把我实验性的路由改成专门适配 koa 的。

实现了基本功能之后,我决定使用意大利人开发的autocannon试试效果。

意大利炮

autocannon -c 100 -d 40 -p 10 localhost:8080/test

  • koa-router
Stat         Avg     Stdev  Max     
Latency (ms) 2.42    6.43   58      
Req/Sec      40147.2 495.89 40671   
Bytes/Sec    6.14 MB 69 kB  6.29 MB
  • koa-tree-router
Stat         Avg     Stdev  Max     
Latency (ms) 2.09    5.44   45      
Req/Sec      46221.6 718.95 46559   
Bytes/Sec    7.14 MB 152 kB 7.34 MB

可以看出 io 有明显提升。

项目地址

4 回复

挺好的,加油

@steambap 来阿里北京不?

@i5ting 可以试试,我把简历发到你的邮箱?

回到顶部