Koa仍是那個Koa,可是Nodejs已經再也不是那個Nodejs

曾經

曾幾什麼時候,在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語言新特性?

曾經咱們能夠爲了體驗更新的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技術棧的技術團隊的大問題。

相關文章
相關標籤/搜索