曾几什么时候,在Nodejs 8之前的年代,咱们被JS的回调机制虐得死去活来,想说爱并无那么容易。而Koa的出现,尤为是co模块,让咱们趋之若鹜。精简的代码风格,高效的性能,以及可使用JS的新语法。都是广大JSer的向往。正如Koa介绍的那样【Expressive middleware for node.js using ES2017 async functions】node
随着Nodejs 10的到来,咱们不再须要使用【--harmony】,而Koa的一大优点也就再也不是优点了。express
在V8 6.0+版本的加持下,Express的性能也开始和Koa拉齐。下面是测试代码:并发
// version 2.11.0
const Koa = require('koa');
const app = new Koa();
app.use(ctx => {
ctx.body = 'Hello Koa';
});
app.listen(3000);
复制代码
// version 4.17.1
const express = require('express');
const app = express();
app.use((req, res) => {
res.end('hello express');
})
app.listen(3000);
复制代码
参看下面数据(MacOS10.12.6,Nodejs v10.17.0):app
框架 | 请求数 | 并发数 | QPS每秒请求数 | TPR平均时间 |
---|---|---|---|---|
Koa | 5000 | 100 | 5500 - 6400 | 14-18ms |
Koa | 5000 | 200 | 6500 - 7700 | 26-35ms |
express | 5000 | 100 | 5300 - 6100 | 16-20ms |
express | 5000 | 200 | 5700 - 7600 | 24-32ms |
因为个人电脑比较垃圾,最多只支持200并发症,若是多了ab就卡死了。以上数据是通过屡次使用ab压缩取得的平均数据。框架
ab -n 5000 -c 200 http://localhost:3000/
复制代码
而Koa在面向将来的语法兼容上,因为Nodejs的发展,已经和其余框架没有任何区别。koa
曾经咱们为了追求那一点点极致性能而选择Koa,尤为是高并发下,若是是1000w的并发,一个请求快那么十几毫秒,那么久能够节约出几万秒的总处理时间,能够多处理几十万的请求,可是,如今已经大可没必要了。async
曾经咱们能够为了体验更新的JS语法挑战Koa,为了解决回调地狱挑战Koa,被Koa缺少官方支持的中间件的生态下磨砺前行。也为你们增添了很多乐趣。痛苦并快乐着。可是如今Nodejs自己已经支持超过99%的新语法。高并发
这是一个伪命题,曾经在IBM期间,我与Nodejs核心团队成员(TSC)共事,有幸和他讨论过koa和express的问题,他问我:”你用Nodejs写Web服务会不须要Router吗?会不须要BodyParse吗?会不须要Cookie解析吗?不,不会。那你用一个极简的框架,而后还要把他们安装回来弄得和express同样。那他极简解决了什么问题?“,而企业级应用通常是不在意那十几毫秒的性能的。性能
Koa是否仍是咱们的第一选择呢?在我这里,他一直都不是最优选择。我是Express的忠实用户,其实也主要得益于早年接触Express就是先从接触它的维护团队开始的。并且个人业务场景大多都是企业级应用为主,稳定性,成熟是第一要素。测试
可是Koa带给我不少快乐是express给不了的。新的视野和乐趣。由于Koa缺少不少中间件的支持,所以大部分中间件都要本身去写。这期间我的获得了很是大的成长。可是并非全部团队都能Hold的住。我是亲眼目击一些团队被Koa拖慢了脚步,甚至最后还有翻船的。而Egg在这方面确实解决了不少技术实力比较薄弱,又想尝试Nodejs技术栈的技术团队的大问题。