前言:
身邊越來越多的同事談論Nodejs,談其異步IO、事件回調、前后臺統一一門語言,創業的朋友的第一個創業項目也選擇了Nodejs,期望能夠使用一種語言節省成本快速完成需求開發。與其他項目組的同事聊項目選型JAVA時被他們嘲笑了一把,怎么這么不與時俱進怎么還在用Java。而且發現,越來越多的前端同事通過Nodejs輕松上手后端功能開發,作為后端開發工程師倍感壓力。
借新項目的機會系統了解了下Nodejs的知識體系,本文對了解到的Nodejs技術作了總結,同時將其與Java的相關技術進行了總結對比,為其他考慮兩種語言選型的架構師提供選型的決策依據。為了避免爭議,本文避免對選型語言的推薦,也不對未來的發展趨勢做出預測。
語言背景分析:
簡單對兩門語言進行“拼爹”對比,發現有技術深度的事情還是博士比較擅長,計算機專業的技術又未必是計算機專業的人貢獻:

語言及SDK分析:
Nodejs選擇JavaScript語法導致了其靈活、面向過程、單進程單線程執行的基本特性。然而得意其語言的靈活性,一些面向對象的特征也可以通過邏輯代碼實現,但受阻于ECMAScript的發展速度,整體上Nodejs向企業級應用語法轉型還暫時較慢。Nodejs主打的異步IO事件回調使其更適合服務器的編程,其單進程單線程的特質使得開發變得簡單。得意與社區的活躍語言處于高速發展、SDK不斷地發展穩定豐富。
相比之下,Java是面向對象的具備了面向對象的全部特征,經歷了20年的發展沉淀越發的強大、穩健。與Nodejs相比Java是個在各個領域作精作深的技術巨人,然而也正因如此,學習Java的成本要比Nodejs高很大一個臺階,每一個小的技術方面都能找到很厚的一本書來。面對異步IO事件回調的新技術Java也在其新的SDK中提供支持與時俱進,相關Java的開源項目也及時跟進。

三方開源框架選型:
語言選型后面即框架選型,好的框架可以去除很多不必要的重復工作使項目輕松獲取強大的功能。當然三方開源框架的引入也帶來的相應的學習成本,同樣的,Nodejs框架由于發展時間相對較短學習成本相對較低,開發人員更容易了解到更多底層的實現源碼,但相對的部分框架容易出現穩定性兼容性問題,加之NPM開發人員水平不一而又沒有很好的審核機制,選擇一些模塊(尤其是C/C++模塊)時需要慎重。Java三方開源框架大都已被大量企業大量使用、成熟穩定,提供強大能力的同時作了很好的封裝分層,開發人員付出較高的學習成本后更多的是“傻瓜“式的使用。就WEB開發體系而言,兩者都可以找到很多可服用引入的開源框架。

產品化分析:
就產品化而言,Nodejs雖然在各個方面都有建設,但相對Java還有很多需要繼續完善發展的地方,如系統監控和性能分析領域還不如Java體系那么完善,受限于單進程單線程模式穩定性部署方面還不如Java那么靈活,靈活的腳本語言加上Nodejs發展時間相對較短使得系統的安全性還需要經受更多的考驗。同時,前后端代碼都可以使用到js并同時保存在一個開發分支時,單純的依賴目錄去區分前后端代碼,容易造成前后端代碼的混淆,相對不夠清晰。但相信爭議和問題都是暫時的,高速發展的Nodejs會逐步完善完美。

執行引擎分析:
在瀏覽器方面V8引擎大名鼎鼎贊不絕口,這也是Nodejs選型V8這個最快的Javascript執行引擎的原因。然而另一方面,V8引擎專門針對瀏覽器的設計也嚴重限制了Nodejs在服務器領域的大有作為,仿佛帶著手鏈腳鏈在高速奔跑。因V8引擎的創始人和技術都是來自Java虛擬機,使用了部分Java虛擬機技術適配瀏覽器業務實現,所有相比之下Java虛擬機更加的成熟完善,也必然相對的復雜沉重。

其他一些對比:
其他一些簡單對比如下:

結束:
Nodejs的異步IO、事件回調雖是殺手锏能力,但其他程序開發語言也都有相應的跟進支持,但Node成功將前后端統一一門語言開發,這絕對是無人能及,吸引了大批的開發者加入。得益但又受限于V8引擎,其發展還帶著包袱,但Nodejs還年輕還處在高速發展中,相信隨著IO.js與Node.js合并、越來越多的開發者進行共建,Node會越來越穩定成熟。
相比之下Java是編程領域的巨人,20年的發展,越發的成熟穩定,形成完善的體系完善的生態,Android的流程再次將這門語言推到了巔峰,架構選型永遠是個重點選項。
希望本文能幫助到您!
點贊+轉發,讓更多的人也能看到這篇內容(收藏不點贊,都是耍流氓-_-)
關注 {我},享受文章首發體驗!
每周重點攻克一個前端技術難點。更多精彩前端內容私信 我 回復“教程”!
原文鏈接:https://yq.aliyun.com/articles/54118?spm=5176.10695662.1996646101.searchclickresult.430d6b70LRw1Hk
作者:泉石