Nodejs與Java 在C層方面的對比
架構(gòu)
- Nodejs已經(jīng)有很多生產(chǎn)環(huán)境可用的開發(fā)框架,如eggjs,thinkjs。相關(guān)的進(jìn)程管理,部署,安全,日志系統(tǒng),定時任務(wù),應(yīng)用性能監(jiān)控、orm已有成熟的解決方案。
- 使用typescript+lint工具,提供類型檢查、代碼規(guī)范,使用jest等工具實現(xiàn)自動化測試,保證應(yīng)用的開發(fā)效率、穩(wěn)定性、可維護(hù)性。
- Nodejs天生實現(xiàn)了跨平臺,開發(fā)應(yīng)用不需要考慮系統(tǒng)兼容。Java的跨平臺依賴于JVM。
- Nodejs的部署相當(dāng)方便,多進(jìn)程模型和進(jìn)程通信設(shè)計也非常友好,異常處理和異步語法幾乎可以做到無痛開發(fā),心智負(fù)擔(dān)較低。國際化方面也很好實現(xiàn)。Java開發(fā)需要考慮的更多,線程切換消耗資源,也給開發(fā)者帶來更多的負(fù)擔(dān)。
- Nodejs可以使用面向?qū)ο蟮姆绞綄崿F(xiàn)靈活的代碼復(fù)用,也支持函數(shù)式編程。使用typescript也可以類似類型注解、重載、泛型、接口、命名空間、裝飾器等特性,為開發(fā)提供豐富的語法支持。Java則是完全的面向?qū)ο?,對開發(fā)者有一些限制。
易用性
- Nodejs和前端同樣使用JavaScript,使用同樣的包,代碼上可以有一定的復(fù)用,比如網(wǎng)絡(luò)層:axios,用typescript定義同樣的接口...同樣受益于豐富的npm生態(tài),代碼規(guī)范,測試框架都可以復(fù)用。 Java的C層無法與前端做任何復(fù)用。
- Nodejs沒有類型系統(tǒng)的約束,開發(fā)效率很高,可以快速響應(yīng)異變的前端需求。需要使用類型系統(tǒng)時也可以使用typescript約束,保證服務(wù)的穩(wěn)定性。Java相比下做C層的開發(fā)效率相對較低,限制也比較多。
- Koa/express/eggjs的中間件機(jī)制可以對請求和響應(yīng)各個環(huán)節(jié)做更改,可以非常容易的實現(xiàn)數(shù)據(jù)校驗、權(quán)限檢查、統(tǒng)一報錯等功能
性能
- 性能上nodejs采用谷歌的V8引擎,使用C++編寫部分底層庫,天生的異步IO,可以實現(xiàn)高性能的應(yīng)用。使用cluster可以部署多個進(jìn)程,充分利用CPU資源
-
天生異步IO可以保證整個線程大部分時候不阻塞,非常容易實現(xiàn)高并發(fā),適合IO密集型的應(yīng)用開發(fā)。一般調(diào)用odl接口只有網(wǎng)絡(luò)層幾十ms的消耗。
性能對比
5000個并發(fā)連接下的情況下,Node的響應(yīng)數(shù)與Java差不多。
生態(tài)
- Nodejs使用npm進(jìn)行第三方包的管理,npm上關(guān)于nodejs的包已有上百萬個,可以為我們的開發(fā)提供豐富的生態(tài)支持。
- Nodejs在阿里、騰訊、paypal已經(jīng)有大規(guī)模的實踐,也為社區(qū)提供了很多成熟的解決方案。
