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 A
和module 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是落後於時代的。
我能想到最糟糕的缺點有這兩點,不知道大家還有沒有新增的