溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Node與java作為后臺服務(wù)器的對比是怎樣的

發(fā)布時間:2021-11-20 16:04:37 來源:億速云 閱讀:169 作者:柒染 欄目:大數(shù)據(jù)

本篇文章為大家展示了Node與java作為后臺服務(wù)器的對比是怎樣的,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

Node.js究竟是什么?它是新的語言還是新的框架,是新的工具抑或只是一個簡單的JavaScript文件?

運行時環(huán)境

        我們眾所周知Java具有一個稱作JRE的運行時環(huán)境來使得java程序能夠順利運行。JRE有一個稱為JVM的虛擬機。JVM有許多組件,如垃圾回收器(GC),即時(JIT)編譯器,解釋器,類裝載器,線程管理器,異常處理器,用于在不同時間執(zhí)行不同的任務(wù)。JRE還有一系列的庫來幫助運行時的Java程序。

        我們?yōu)槭裁匆蝗粻砍兜絁RE運行時環(huán)境呢,其實正是為了與node作比較,Node不是一種語言,也不是框架,更不是工具,它是運行JavaScript應(yīng)用程序的運行時環(huán)境。Node.js有一個稱為JavaScript Virtual Machine的虛擬機。它為基于JavaScript的應(yīng)用程序生成機器代碼,以便在不同的平臺上啟用它。這個虛擬機就是Google的V8引擎,也有主要組件,如JIT和GC,分別用于執(zhí)行任務(wù),運行時編譯,和內(nèi)存管理。

發(fā)展?jié)摿?/h3>

        判斷Java和node的發(fā)展?jié)摿赡芤獜钠浔澈蟮纳鷳B(tài)社區(qū)和支持庫上切入,然而以Java為核心的傳統(tǒng)體系自然比不上node這樣的新勢力,簡而言之,Java成熟而龐大,node迅捷而活躍。java其功能性和實用性自然不必多說,但是java包含了大量的樣品代碼,擾亂了程序猿所想表達的意圖,就不如java三大框架之一的spring,程序猿在使用spring的時候servlet,數(shù)據(jù)持久,以及構(gòu)成系統(tǒng)的底層的東西,spring框架已經(jīng)封裝好會幫助你處理這一切,我們只需要專注于寫業(yè)務(wù)層代碼就足以。但是在Spring中,子系統(tǒng)一個接一個,哪怕你犯最微小的錯誤,它都會用讓你崩潰的異常來懲罰你??赡芫o接著你就會看到巨大的異常信息。里面包含著一個一個你根本不知道的封裝好的方法,Spring做了許多工作來實現(xiàn)代碼的功能。這種級別的抽象顯然需要大量的邏輯,長長的異常信息不一定是壞事,它指出了一個癥狀:這需要多少內(nèi)存和性能上的額外開銷?spring是怎么執(zhí)行的?框架需要解析方法名、猜測程序員的意圖、構(gòu)建類似于抽象語法樹的東西、生成SQL等等。這些事情的額外開銷有多大?所以說使用java掩蓋復(fù)雜性并不會因此簡單化,只會讓系統(tǒng)更復(fù)雜。java嚴格的類型檢查使得Java幫你避免許多類型的bug,因為不好的代碼無法通過編譯。Java的強類型的缺點就是太多樣板代碼。程序員要不斷進行類型轉(zhuǎn)換,程序員要花掉更多時間寫精確的代碼,使用更多的樣板代碼,以圖早期發(fā)現(xiàn)錯誤并改正。

        而node.js恰恰相反。線程會導(dǎo)致更復(fù)雜化的系統(tǒng)。所以Node.js采用輕量級,單線程的系統(tǒng),利用了js的匿名函數(shù)進行異步回調(diào),你只需要簡單的使用匿名函數(shù),也就是閉包。不需要搜索正確的抽象接口,只需要寫下業(yè)務(wù)代碼,沒有任何冗余。這就是使用Node.js的最大好處,不過異步回調(diào)自然也出現(xiàn)一個急需解決的問題:回調(diào)陷阱。

        在Node.js中,我們不斷嵌套回調(diào)函數(shù)的同時,很容易就陷入回調(diào)函數(shù)的陷阱中,每層嵌套都會讓代碼更復(fù)雜,使得錯誤處理和結(jié)果處理更困難。一個相關(guān)的問題就是js語言不會幫助程序員恰當?shù)乇磉_異步執(zhí)行。其實有些庫會使用Promise來簡化異步操作,但是看起來我們把問題簡單化了,但是事實上代碼層面更復(fù)雜化了,Promise用了許多樣板代碼,掩蓋了程序員的真實意圖。后來Node.js支持ES5與ES6,可以采用async/await函數(shù)重寫回調(diào)函數(shù)。還是同樣的異步結(jié)構(gòu),但使用了正常的循環(huán)結(jié)構(gòu)來書寫。錯誤和結(jié)果處理的位置也很自然,代碼更易于理解,更容易編寫,而且也可以很容易地理解程序員的意圖?;卣{(diào)陷阱并不是用掩蓋復(fù)雜性的方式解決的。相反,語言和范式的改變解決了回調(diào)陷阱的問題,同時還解決了過多樣板代碼的問題。有了async函數(shù),代碼就更漂亮了。簡單化的解決方法,將Node.js的缺點轉(zhuǎn)化為了優(yōu)點。

        但是JavaScript的類型很松散。而且在你書寫代碼的時候不會進行報錯,許多類型不需要定義,通常也不需要用類型轉(zhuǎn)換。因此代碼更清晰易讀,但存在漏掉編碼錯誤的風(fēng)險,只有在編譯的時候才會去檢查你語法以及邏輯是否存在問題,所以在Node.js中,為了更好的調(diào)試BUG,node支持將程序分成不同的模塊,因為有模塊的存在,將錯誤發(fā)生的范圍縮小到某個范圍內(nèi),使得Node.js模塊更容易測試。

包管理

        java最重要的問題之一就是沒有統(tǒng)一的包管理系統(tǒng),可能有人會和我說Maven.但是無論是用途、易用性還是功能上,Maven與Node.js的包管理系統(tǒng)相比簡直是天壤之別。npm 是 Node.js 官方提供的包管理工具,他已經(jīng)成了 Node.js 包的標準發(fā)布平臺,用于 Node.js 包的發(fā)布、傳播、依賴控制。npm 提供了命令行工具,使你可以方便地下載、安裝、升級、刪除包,也可以讓你作為開發(fā)者發(fā)布并維護包。最好的地方是npm代碼庫不僅供Node.js使用,也可以讓前端工程師使用。所有的前端JavaScript庫都以npm包的形式存在。許多前端工具如Webpack都是用Node.js編寫的。

性能

        java使用HotSpot這個超級虛擬機,它采用了多字節(jié)編譯策略。它會檢測經(jīng)常執(zhí)行的代碼,一段代碼執(zhí)行次數(shù)越多,就會應(yīng)用越多的優(yōu)化。因此HotSpot性能相對來說更快。Node底層選擇用c++和v8引擎來實現(xiàn)的,node.js的事件驅(qū)動機制,這意味著要面對大規(guī)模的http請求,node.js是憑借事件驅(qū)動來完成的,性能部分是不用擔心的,并且很出色。而且,由于V8引擎的改進,Node.js的每次發(fā)布都會帶來巨大的性能提升。

        雖然Node對高并發(fā)應(yīng)用有著極高的性能,但是Node.js也有著自己的缺點:

  1. Node不適合CPU密集型應(yīng)用,因為CPU密集型應(yīng)用如果有長時間的運算,不如大循環(huán),將會導(dǎo)致CPU時間片不能釋放,使得后續(xù)的IO操作全部暫停。

  2. 而且Node只支持單核CPU,不能充分利用CPU資源

  3. 可靠性低,一旦代碼某個環(huán)節(jié)崩潰,將會導(dǎo)致整個系統(tǒng)都崩潰,原因就在于Node是使用單進程。

  4. Node的開源組件庫質(zhì)量參差不齊,更新快,而且不向下兼容。

其實Node.js作為后端能實現(xiàn)幾乎所有應(yīng)用,只是我們選擇的時候考慮更多的是是不是適合用Node.

上述內(nèi)容就是Node與java作為后臺服務(wù)器的對比是怎樣的,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI