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是落后于时代的。
我能想到最糟糕的缺点有这两点,不知道大家还有没有添加的