不多说,先上图
Koa 1:
Koa 1 with bluebird-co:
Koa 2:
以上三图均采用koa自带的benchmarks下run脚本测试,koa 1 with bluebird-co 为改动后把koa内置的co替换成bluebird的coroutine后的测试结果,在这个benchmark里性能几乎翻倍,甚至远超koa 2。当然这个测试脚本可能有一定局限性,但不能不说明一些问题,bluebird的效率不容置疑 详情请参见bluebird评测的bluebird的coroutine和co效率对比: https://github.com/novacrazy/bluebird-co/tree/master/benchmark
代码见 https://github.com/andyhu/koa/tree/bluebird-co 已经发布为npm包,感兴趣的话可以进一步测试 https://www.npmjs.com/package/koa-bluebird-co
经测试,性能提升完全来自替换了内置的Promise为bluebird。如果全局替换global.Promise = requrie('bluebird')
的话效率比直接用bluebird-co还要高
哈哈哈,换了个co库,没准koa的性能就上去了
@yinxin630 没贴反,Koa 1 + bluebird 比 Koa 2 快
@andyhu 那如果把koa2也替了,会不会有更大提示?
@i5ting 测试过,如果在koa2项目里,global.Promise = require('bluebird')
,的确是更快的
抛开co
不说,node native promise
相比 bluebird
就是慢,bluebird
作者的解释:
node
中的Promise
虽然来自v8
但其实现是js
而不是C
。即使用C
也并不会快多少,因为promise
基本都是在操作js
对象和通信node
中使用new Promise
的方式,这一下就差了3个开销很大的closures
在自己的框架代码里面真正尝试过,不加bluebird和加bluebird的性能差距真的是1倍多 用了babel,包index.js只能这样写了
//rewite promise, bluebird is more faster
global.Promise = require('bluebird');
require('babel-runtime/core-js/promise').default = Promise;
@richenlin 不错的方法,不过纠正下英语语法 more much faster