node相比传统服务端技术栈差在哪里?
更新:HHH   时间:2023-1-7



著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

原因

人:

用node的人很多,相当多,而且npm包数量冠绝全场,但是node主要使用者是前端,就比如express这个库,我觉得一半的下载量是用在了前端框架的服务端渲染和webpack的HMR了,并不是用在了真正的服务端挑大梁的开发中.

还有一点,除了少数node牛人,大部分node使用者服务端知识太匮乏,什么分层、多线程、并发、IPC基本没有,操作系统的知识可能仅仅停留在几个bash命令上,说白了node使用者虽然多但是并不是真正的服务端开发人员(绝大多数是前端顺手写个node),实际上工作中只靠node为生的服务端人员数量很少,导致其在工业界实践并不如向他社区那样火爆.

性能:

性能要分两方面看,一方面是io性能,一方面是计算性能,node安身立命的家伙就是i/o爆表,事件驱动的特性使得node的i/o十分卓越,不然当初它也不能被发明出来.

cpu计算性能的确是node的软肋,跟java/c#自然是不能比,但是web开发大多数情况下要命的是i/o,而且node的性能比java/c#差不代表比其他语言差,比ruby/python还是快出很多倍,而且可以调用c/c++模块来处理cpu密集型任务(python等性能较差语言的通常做法),以下是个性能参考网站.

总而言之node在i/o有其卓越的方面,cpu密集型任务是node的软肋但不致命.


类型:

我可不可以理解这个类型原因是因为静态强类型语言可以更好的规避错误,提高工程质量,我觉得这个原因应该是比较小的.

一方面typescript+node是很多公司的标配了,虽然typescript只是静态类型,但是写起来跟c#几乎跟亲兄弟一样,在这方面并不是node吃亏的地方.

另一方面,并不是说动态弱类型能否决一门语言,我大PHP不是世界上最好的语言吗?


积累:

这个问题可以跟这个原因结合在一起,node的社区一向火爆,但是在工业界的实践跟其社区火爆比起来差很多,当然不少国内外的大厂已经有一些实践,比如国内node最牛的阿里,但是让node独挑大梁的实践还是不足,很多情况下是作为渲染层出现,就比如淘宝真正的后端还是java挑大梁,node做渲染.

我们可以类比同时期出现的golang,golang的火爆是随着业界众多实践的成功逐渐火爆起来的,这使得golang在近几年一年比一年受开发者欢迎,Stack Overflow做的调查里使用者里最喜欢的语言是go,未使用者里最想尝试的语言也是go,go在云计算领域积累的足够多的实践加上docker这种杀手级应用的加持属于一步一个脚印火出来的.

node不同,属于一出来就红遍半边天,前端开发者们把整个社区引爆了,但是这么多年在工业界杀手级别的应用和实践跟其火爆程度不成正比,反而导致如今势头平淡了许多.


做个总结吧:

node随着发展已经摘掉了很多当初对他的黑点,比如单线程:其实cluster出来很久了多线程的实践是没问题的,比如回调地狱:这个随着es6+普及有无数个解决方案,比如动态类型,typescript很成熟了.

反而node有不少优点,比如i/o密集型,事件驱动,社区活跃,前后端语言统一等等.

node真正的问题不是语言或者类型的问题,而是真正node从业者太少(虽然使用者多),缺乏工业界大量成熟的实践.


ps: node相关的书也太匮乏了,目前看过最好的就是朴灵的<九浅一深node.js>还是4年前的作品,node原理相关,其它node相关的书不是讲的太浅就是平庸之作,大量的教你弄个聊天室教你弄个博客,反观人家java<java并发编程><深入java虚拟机><java编程思想>,你看看人家的书讲的都是啥?


返回web开发教程...