摘要: Node三駕馬車。
Fundebug經授權轉載,版權歸原作者所有。
簡介
Node.js是10年前首次推出的,目前它已經成為世界上最大的開源專案,在GitHub上有+59,000顆星,下載次數超過10億。流行度快速增長的部分原因是Node.js允許開發人員在應用程式的客戶端和伺服器端部分使用相同的語言:JavaScript。Node.js是一個開源和跨平臺的JavaScript執行時環境,專為構建可擴充套件的伺服器端WEB應用而設計,自身具有高併發、擴充套件性強等特點。由於社群其呈指數級增長和普及,因此建立了許多框架來提高生產力。在本文中,我們將探討Node.js中三個最流行的框架之間的差異:Express,Koa和Hapi。在以後的文章中,我們將研究Next,Nuxt和Nest。
比較基於:
- GitHub Stars和npm下載
- 安裝
- 基本的Hello World應用程式
- 好處
- 缺點
- 效能
- 安全
- 社群參與
Express
Express是一個最小且靈活的Web應用程式框架,為Web和移動應用程式提供了一組強大的功能,它的行為就像一箇中介軟體,可以幫助管理伺服器和路由
-
star
- GitHub star:+43,000
- npm每週下載 6,881,035
-
安裝
確保你已經安裝node和npm
// 你可以將express安裝到專案依賴 npm install express --save // 如果要臨時安裝Express而不是將其新增到依賴項列表,則可以使用 npm install express --no-save 複製程式碼
-
Hello World
這是關於如何建立一個偵聽埠3000並響應“Hello World!”的快速應用程式的最基本示例
// 這裡只建立根目錄 其他目錄返回404 const express = require('express') const app = express() const port = 3000 app.get('/', (req, res) => res.send('Hello World!')) app.listen(port, () => console.log(`Example app listening on port ${port}!`)) 複製程式碼
-
好處
- 幾乎是Node.js Web中介軟體的標準
- 簡單,簡約,靈活和可擴充套件
- 快速開發應用程式
- 完全可定製
- 學習曲線低
- 輕鬆整合第三方服務和中介軟體
- 主要關注瀏覽器,模板和渲染整合開箱即用
-
缺點
儘管Express.js是一個非常方便且易於使用的框架,但它有一些可能影響開發過程的小缺點。
- 組織需要非常清楚,以避免在維護程式碼時出現問題
- 隨著程式碼庫大小的增加,重構變得非常具有挑戰性
- 需要大量的手工勞動,因為您需要建立所有端點
-
效能
Express是對web應用的一層基本封裝,繼承了Node.js的特性
當天也有一些express效能的最佳實踐包括:
- 使用gzip壓縮
- 不要使用同步功能
- 正確記錄(用於除錯,使用特殊模組,如除錯,應用程式活動使用winston或bunyan)
- 使用try-catch或promises正確處理異常
- 確保您的應用程式使用流程管理器自動重新啟動,或使用systemd或upstartinit等系統
- 在群集中執行您的應用。您可以通過啟動程式叢集來大大提高Node.js應用程式的效能
- 快取請求結果,以便您的應用不會重複操作以反覆提供相同的請求
- 使用負載均衡器執行它的多個例項並分配流量,如Nginx或HAProxy
- 對靜態資源使用反向代理。它可以處理錯誤頁面,壓縮,快取,提供檔案和負載平衡等
- 更多效能最佳實踐
一個簡單的“Hello World”應用程式每秒具有以下效能請求:
-
安全
Node.js漏洞直接影響Express,因此確保使用最新的穩定版Node.js
- 檢視express 最佳安全實踐
-
社群參與
- 貢獻者數量:220
- Pull Requests:821
- Express社群定期活動包括 Gitter,IRC channel, issues, Wiki等等
最後,express可能是Node.js最流行的框架,還有許多其他流行的框架都是基於Express構建的。
koa
Koa 是一個新的 web 框架,由 Express幕後的原班人馬打造,致力於成為web應用和API開發領域中的一個更小、更富有表現力、更健壯的基石。 通過利用 async 函式,Koa幫你丟棄回撥函式,並有力地增強錯誤處理Koa並沒有捆綁任何中介軟體而是提供了一套優雅的方法,幫助您快速而愉快地編寫服務端應用程式
-
star
- GitHub star:+25,000
- npm每週下載:+ 300K
-
安裝
Koa需要nodev7.6.0以上版本支援,因為內部使用了ES6的特性
npm i koa node my-koa-app.js 複製程式碼
-
Hello World
建立一個web服務,監聽3000埠返回‘Hello World’
const Koa = require('koa'); const app = new Koa(); app.use(async ctx => { ctx.body = 'Hello World'; }); app.listen(3000); 複製程式碼
-
好處
- Koa提高了互操作性,健壯性,使編寫中介軟體變得更加愉快。
- 整合了大量的web API,但是沒有繫結中介軟體
- 非常輕量,核心的Koa模組只有大約2K行程式碼
- 擁有非常好的使用者體驗
- 通過try / catch更好地處理錯誤
- 非同步控制流,程式碼可讀性更高
-
缺點
- Koa社群相對較小
- 與Express風格的中介軟體不相容(目前還有遇到與其他框架相容的中介軟體)
-
效能
Koa本身是一個非常輕量級的框架,可以構建具有出色效能的Web應用程式。程式碼可讀性和維護性都相對較高
當然一些效能的最佳實踐也是必不可少的,例如:
- 叢集
- 並行執行
- 在程式碼中使用非同步API
- 保持程式碼小而輕
- 以及使用gzip壓縮 等等
一個簡單的“Hello World”應用程式每秒具有以下效能請求:
-
安全
Koa有大量的中介軟體,提供相應的功能 貼圖一張
-
社群
- 貢獻者數量:169
- Pull Requests:577
- 關於koa的一些討論
最後,Koa專注於核心中介軟體功能,設計顯式地利用了async/ waiting使非同步程式碼可讀性更高
Hapi
Hapi是基礎功能相對豐富的框架。開發人員更專注於業務,而不是花時間構建基礎架構。配置驅動的模式,區別於傳統的web伺服器操作。他還有比一個獨特功能,能夠在特定的IP上建立伺服器,具有類似的功能onPreHandler。再需要的時候你可以攔截特地的請求做一些必要的操作
-
star _ GitHub Stars: +11000
- npm 周下載: +222,293
-
安裝
確保你已經安裝node
npm install hapi 複製程式碼
-
Hello World
以下示例是使用hapi的最基本的hello world應用程式:
'use strict'; const Hapi=require('hapi'); // 建立一個服務監聽8000埠 const server=Hapi.server({ host:'localhost', port:8000 }); // 新增路由 server.route({ method:'GET', path:'/hello', handler:function(request,h) { return'hello world'; } }); // 啟動服務 const start = async function() { try { await server.start(); } catch (err) { console.log(err); process.exit(1); } console.log('Server running at:', server.info.uri); }; start(); 複製程式碼
-
好處
- 提供了一個強大的外掛系統,允許您快速新增新功能和修復錯誤
- 可擴充套件的API
- 對請求處理有更深層次的控制。
- 建立(REST)api的最佳選擇,提供了路由、輸入、輸出驗證和快取
- 一次編寫適配各端
- 詳細的API參考和對文件生成的良好支援
- 與任何前端框架(如React,Angular和Vue.js)一起使用來建立單頁面應用程式
- 基於配置的偽中介軟體
- 提供快取,身份驗證和輸入驗證
- 提供基於外掛的擴充套件架構
- 提供非常好的企業外掛,如joi,yar,catbox,boom,tv和travelogue
-
缺點
- 程式碼結構複雜
- 外掛不相容,只能使用指定的外掛如:catbox joi boom tv good travelogue等
- 端點是手動建立的,必須手動測試
- 重構是手動的
-
效能
017年對Node框架的研究表明hapi相對於其他框架的表現最差
一個簡單的“Hello World”應用程式每秒具有以下效能請求:
-
安全
hapi安全性主要依賴於外掛 外掛選擇
-
社群
- 貢獻者數量:184
- Pull Requests:1176
最後Express仍然是當下最為流行,koa因擁抱ES6正在崛起,hapi還是大型專案的第一選擇
不管是Express,Koa還是Hapi目前都是非常成熟的框架。幾乎都能滿足你的需求,沒有最好,只有最合適
Choosing the right Node.js Framework: Express, Koa, or Hapi?
關於Fundebug
Fundebug專注於JavaScript、微信小程式、微信小遊戲、支付寶小程式、React Native、Node.js和Java線上應用實時BUG監控。 自從2016年雙十一正式上線,Fundebug累計處理了10億+錯誤事件,付費客戶有Google、360、金山軟體、百姓網等眾多品牌企業。歡迎大家免費試用!