精华 koa 2 vs koa 1 vs express 压测性能大比拼
发布于 2 个月前 作者 i5ting 1936 次浏览 来自 分享

koa-benchmark

源码 https://github.com/17koa/koa-benchmark

比较koa和koa2和express性能

preview.png

  • 基本结论koa 2 > koa 1 > express
  • koa 2- async效率中间件越多越低,暂时还有问题,不建议使用

Prerequisites

for OSX

brew install wrk

Test

首次测试,需要安装依赖,会比较慢

make all

不安装依赖,重复测试

make test

查看中间件请求测试

make test -f Makefile2

Results

➜  koa-benchmark git:(master) ✗ node -v
v4.0.0
➜  koa-benchmark git:(master) ✗ npm -v 
2.14.2
➜  koa-benchmark git:(master) ✗ npm test 
benchmark koa-1

  1 middleware
  5976.88

  5 middleware
  3495.61

  10 middleware
  5494.52

  15 middleware
  5444.90

  20 middleware
  5631.77

  30 middleware
  5091.48

  50 middleware
  3657.46

  100 middleware
  4712.93
  
benchmark koa-2

  1 middleware
  5959.41

  5 middleware
  5653.19

  10 middleware
  5652.32

  15 middleware
  5882.88

  20 middleware
  5929.52

  30 middleware
  5700.04

  50 middleware
  5852.57

  100 middleware
  5211.41

benchmark express

  1 middleware
  5500.16

  5 middleware
  5783.63

  10 middleware
  5561.32

  15 middleware
  5253.31

  20 middleware
  5305.64

  30 middleware
  4950.02

  50 middleware
  4472.47

  100 middleware
  4077.43
  

压力测试模型

假设支持100w
每个用户每天访问a次 (web.tools.com)
每天次数:100w * a
按照80/20原则,80%的访问集中在20%的时间内
100w * a * 80%  / 4.8小时
假设对用户来说每次访问6秒钟是可以接受的
(100w*a*80%/4.8h)*6=测试用并发数据

List

可以在线查看性能对比,点击可以排序的

19 回复

另外sdk里的promise可以使用bluebird替换,性能还会有提升

thinkjs给出的测试结果

koa 1 比express低,这个不完全,我测试的结果是2者差不多,但总体koa 1要好一点点

各位的测试数据会跟电脑配置有直接关系

问下,压力测试一般怎么测的? 有现成的第三方工具,还是自己写啊

中间件能否根据条件载入,而不是每次请求,所有中间件都挨个问一遍

@yakczh 你这是逃避问题,压测效率的时候是不能这样的,如果是项目里这样是可以的

@yakczh router不就是某种意义上的按需加载中间件嘛

来自酷炫的 CNodeMD

@i5ting

讲道理的话

从Express到Koa1-2,应该只是callback style 到 Promise style,其它部分基本没什么改变吧

业界普遍认为使用Promise替代callback会损失一部份性能

所以我觉得有点好奇,有没有分析出,性能的差距是怎么来的?

@i5ting 可以测下用 bluebird 替换 Promise 后,koa2-async 的性能

感谢,这结果很满意

@CoderIvan 语法糖意味着你要多几层function传递

@wwj559 嗯,所以我的意思是说不知道koa(koa2)比express快在哪

@i5ting 打扰一下,您觉得KOA2的项目有预编译的必要吗

@Micua 预编译效果都不好,更何况不预编译呢?哈哈

@Micua 等原生支持了,性能好了,我还是很期待async/await的

回到顶部