Nodejs差不多也到頂峰了吧?

aokihu發表於2018-10-16

Javascript現在應該是很火的語言了,特別是受到了Node.js的照顧後,已經是前後端通吃的地步了,甚至連嵌入式領域也開始涉足。但是慢慢隨之而來的弊端也開始出現了,本文不打算說Node.js的優點,因為幾乎網上都是優點,而只是來說說Node.js的缺點。

缺點1 龐大的NPM包

NPM是隨著Node.js一同出來的庫管理軟體,這種一鍵式下載第三方庫的出現,立即將Node.js帶入了快車道,目前NPM上面的第三方庫應該是所有語言裡面最多的了,至少有30萬的庫在那裡,而且每天都在不斷的增加當中。

但是這麼方便的工具卻也帶來了不少麻煩,第一就是龐大的體積,由於NPM沒有對包依賴做扁平化處理,因此同一個包會被反覆安裝,比如說module A需要module C,而module B也需要module C,這時候其他語言應該是隻下載一個module C,但是NPM會分別給module Amodule B都下載一遍,這樣我們的軟體體積就會重複的增加,還好NPM後來加入了扁平化手段,但麻煩的是,你需要手動執行操作,而不會自動去執行。

其次NPM的第三方包的體積也越來越大,常用的lodash或者是ramda這樣的包一旦載入就要吃到10MB的記憶體,而我們有可能僅僅使用了它百分之一的功能而已,隨著一些包的版本升級,體積是越來越大,記憶體也是越吃越多,而開發者更無奈的是我們居然沒有選擇權了!

最後NPM的一個缺點就是,包實在是太多太多了,究竟那些是優質包,那些是濫竽充數的不試試根本不知道,而且有些庫已經幾年沒有維護了。

缺點2 Node.js吃記憶體

Node.js很好的繼承了Google的優良傳統,吃記憶體!有沒有注意到,Node.js根本沒有動態庫,全部的程式只有一個node.js?,知道這意味著什麼嗎?那就是你每啟動一個Node.js程式,你就要全部載入一遍,現在node.js大小有10MB,也就是說你的程式什麼都不幹已經10MB的記憶體沒有了,如果你開個10個,20個,50個程式,記憶體將會迅速消耗殆盡,而其他語言會使用動態庫來解決這種問題,第一個程式記憶體可能佔用的多,但是後面的程式會共享同一個動態庫,從而減少了記憶體的消耗。不知道Node.js為什麼要這樣設計,難道是為了更好的記憶體隔離嗎?可是動態庫的技術已經很成熟了,也沒有出現什麼問題過,感覺在這一點上Node.js是落後於時代的。

我能想到最糟糕的缺點有這兩點,不知道大家還有沒有新增的

相關文章