CNode

新发现:改动1行代码 提升 Koa 性能接近一倍

分享
Aandyhu发布于10 年前最后回复10 年前8 回复10257 浏览0 收藏

不多说,先上图

Koa 1:

QQ图片20160715042440.png

Koa 1 with bluebird-co:

QQ图片20160715042430.png

Koa 2:

QQ图片20160715042420.png 以上三图均采用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还要高

查看回复

回复 (8)

Y
yinxin630#1·10 年前

我在想.. 图片是不是贴反了.. - - !

T
TimothyJin#2·10 年前

哈哈哈,换了个co库,没准koa的性能就上去了

A
andyhu#3·10 年前
引用 yinxin630我在想.. 图片是不是贴反了.. !

@yinxin630 没贴反,Koa 1 + bluebird 比 Koa 2 快

A
andyhu#4·10 年前
引用 i5ting@andyhu 那如果把koa2也替了,会不会有更大提示?

@i5ting 测试过,如果在koa2项目里,global.Promise = require('bluebird'),的确是更快的

S
sodawy#5·10 年前

抛开co不说,node native promise 相比 bluebird 就是慢,bluebird作者的解释:

  1. node中的Promise虽然来自v8但其实现是js而不是C。即使用C也并不会快多少,因为promise基本都是在操作js对象和通信
  2. node中使用new Promise的方式,这一下就差了3个开销很大的closures

附连接: http://programmers.stackexchange.com/questions/278778/why-are-native-es6-promises-slower-and-more-memory-intensive-than-bluebird

R
richenlin#6·10 年前

在自己的框架代码里面真正尝试过,不加bluebird和加bluebird的性能差距真的是1倍多 用了babel,包index.js只能这样写了

//rewite promise, bluebird is more faster
global.Promise = require('bluebird');
require('babel-runtime/core-js/promise').default = Promise;

I
i5ting#8·10 年前
引用 andyhu@yinxin630 没贴反,Koa 1 + bluebird 比 Koa 2 快

@andyhu 那如果把koa2也替了,会不会有更大提示?

参与回复
登录后即可参与回复。登录