1 回答

TA貢獻1824條經(jīng)驗 獲得超5個贊
你可能看到了 node.js 的種種優(yōu)點,但卻忽略了它存在的各種問題:
在虛擬機層面 node.js 基于的 v8 VM 看起來很不錯,但和 Java 的 VM 一比,差距甚遠。在服務(wù)器領(lǐng)域,特別是擁有眾多 CPU 和大量內(nèi)存的環(huán)境下,Java 的 VM 幾乎是你能在地球上找到的最好的 VM。而 v8 既不能充分利用多 CPU 的性能,也不能將內(nèi)存充分利用。你唯一能做的事情就是開很多個 node.js 實例來緩解,但這進一步帶來了更多的問題。
在語言層面 JavaScript 本身的設(shè)計讓你感覺很靈活,因為它基本上是不對類型進行約束的,只有當運行過程中發(fā)生了錯誤才會提示你,畢竟在瀏覽器環(huán)境內(nèi),這算不上什么問題;但在一個團隊內(nèi)進行協(xié)作時,你會深刻的明白類型系統(tǒng)如果能在運行前就幫你找出那些低級的類型錯誤問題,將會節(jié)省你多少的時間和金錢。特別是別忘了,系統(tǒng)總是在演進的,一個稍微復(fù)雜些的業(yè)務(wù)系統(tǒng)就擁有幾十個乃至上百個類型,而類型修改又往往很頻繁,想想這個過程里會發(fā)生些什么你就明白了。
在領(lǐng)域應(yīng)用層面 node.js 在 Web 開發(fā)領(lǐng)域特別是其中的前端部分已經(jīng)達到了驚人的繁榮程度,甚至有不少重要系統(tǒng)的后端部分也基于 node.js 完成。但如果僅憑這些就輕易的認為 node.js 將會一統(tǒng)全棧打敗包括 Java 在內(nèi)的其它語言是很幼稚的。首先,在一個大型的系統(tǒng)架構(gòu)中,整個系統(tǒng)是拆分成很多很小的業(yè)務(wù)系統(tǒng)的,這些系統(tǒng)往往通過消息隊列(如 RabbitMQ、Kafka 等等)相互連接起來。也許在小型 Web 站點中,你從來沒用過這些。但相信我,在但凡稍微大一些的業(yè)務(wù)系統(tǒng)中,都是這么干的。這些消息隊列服務(wù)存在的理由就是將各個子系統(tǒng)解耦。這樣一來,你可以在前端部分應(yīng)用 node.js 進行快速開發(fā),在業(yè)務(wù)處理部分使用 Java 來完成。數(shù)據(jù)分析系統(tǒng)卻可以使用 Python/Scala (例如基于 Spark)實現(xiàn)。大型業(yè)務(wù)系統(tǒng)的架構(gòu)者們都是些經(jīng)驗豐富的老手,他們知道每個語言/系統(tǒng)的利弊,也知道世界總在變,今天是 node.js、明天也許就是另一個新秀,因此在整個業(yè)務(wù)系統(tǒng)中,你要做的根本不是“統(tǒng)一”,反而是“分離”。這樣的設(shè)計才能夠預(yù)留出擴展和變更的機會。
綜上所述,我相信 node.js 會擁有大量的用戶,但其未來發(fā)展也存在天花板,適用領(lǐng)域有局限性。
- 1 回答
- 0 關(guān)注
- 549 瀏覽
添加回答
舉報