前提
在當前的環境中關于web server的主流開發基本上都是java、php之類的,其中java spring系列基本上占了大頭,而python之流也在奮起直追,但別忘了nodejs也是可以做這個服務的,只是位置有點尷尬,現在就來探究下nodejs做web server的當前現狀。
nodejs簡介
- Node.js 是一個基于 Chrome V8 引擎的 JavaScript 運行環境。 Node.js 使用了一個事件驅動、非阻塞式 I/O 的模型。
- Node.js底層用C++實現的,大部分模塊都使用JavaScript編寫,含大量的內置模塊,使得程序可以脫離Apache、Nginx、IIS等web服務器,作為獨立的服務器運行;
nodejs優勢
- 高效:Node.js使用事件驅動和非阻塞I/O模型,使其在處理大量并發連接時表現出色。
- 輕量:Node.js的內存占用小,適合處理大量短小的請求。
- 靈活:Node.js可以使用JavaScript進行全棧開發,前端和后端可以使用同一種語言。
- 社區活躍:Node.js有著龐大的社區和豐富的第三方庫。
node.js 和 其他語言(java,python等)比較
nodejs 是單線程,其他語言為多線程,由于設計的底層架構不一樣,這也就導致nodejs在大并發處理上看似有著天生的弱勢。但nodejs引入了非阻塞 I/O 操作、事件循環、異步編程、線程池、集群模塊等多方面的設計,進一步拉近了與其他語言的距離,至少在大中型項目中的表現不會比java等項目差,若是大并發,也可以通過負債均衡,分發,主從數據庫等運維方面相關緩解,亦可以通過引入部分其他語言來處理一部分業務,畢竟現在前后端分離,無需考慮接口從哪來,再加上微服務架構的出現,跨語言的開發、聯合、與分離也是一件很方便快捷的事情了,因此無需擔憂nodejs的使用問題。(騰訊,阿里這種大公司都同樣在使用呢!)
而使用nodejs的好處則是,項目開發簡單快速,功能迭代將更加迅捷,前后端統一語言開發效率將大大提升。
nodejs框架比較
Express、koa等框架時代
Express、koa等框架的出現讓js開發后端變得更加的快捷與簡單,兩者的出現亦讓nodejs后端的開發提升了一個檔次。因此也出現了大量相關開發示例與項目。但這個時代項目都存在一個問題,那就是項目通常較小。亦或者越開發越覺得項目難以管理
Midway、nestjs等框架時代
這兩種類型的框架,在express/koa等基礎之上引入了新的知識與概念,也因此讓nodejs框架開發后端越發趨于完善
Nest (NestJS) 是一個用于構建高效、可擴展的 Node.js 服務器端應用的框架。它使用漸進式 JavaScript,構建并完全支持 TypeScript(但仍然允許開發者使用純 JavaScript 進行編碼)并結合了 OOP(面向對象編程)、FP(函數式編程)和 FRP(函數式反應式編程)的元素。
Midway 基于 TypeScript 開發,結合了面向對象(OOP + Class + IoC)與函數式(FP + Function + Hooks)兩種編程范式,并在此之上支持了 Web / 全棧 / 微服務 / RPC / Socket / Serverless 等多種場景,致力于為用戶提供簡單、易用、可靠的 Node.js 服務端研發體驗。
引入typescript讓js的弱類型逐漸變成偏強類型語言,使其在大型項目管理與合作開發上越發的成為了可能,引入新的開發方式與規范,讓nodejs后端的開發形成了一個新的可能性。類似java spring的誕生,使得nodejs終于走出了重要的一步
nodejs的使用
若你的項目比較中小型,需要快速迭代,若你的項目沒有多大的人手,若你的項目需要想要使用非阻塞 I/O 操作、異步編程等。亦或者是中大型項目的部分業務改造,其實都可以選擇nodejs來開發后端了。畢竟中小項目無需擔心nodejs出問題,大型項目也抗的住,而超大型,巨型的項目到時候想要切換語言還會缺這點人,怕這點事嗎?
nestjs學習: https://nest.nodejs.cn/
midway官網: https://www.midwayjs.org/docs
個人更喜歡nestjs,不為別的就那編寫方式與springboot類型的風格就讓我喜歡。同時也更容易切換成java