nodejs刚出来的时候是以性能著称的,为了追求性能,他把所有阻塞操作都用回调异步来实现,再加上v8,在三年前来看,这性能跟PHP,java,python比那是杠杆的。但现在已经没有任何性能优势了,尤其是go,fibjs等新语言,新框架出现之后,性能的实际情况可以看响马大哥的测试
就连PHP都在大力提高性能。现在实际上也没有多少人再提nodejs的性能优势了。性能优势没有了,甚至落后了,现在宣扬的重点是生态,是巨量的库,是前后端统一。当然有的人会说,我不在乎性能,公司刚起步,nodejs性能足够了。说这种话的人是正确的,nodejs就是适合创业公司,人手不多,前后端语言统一,快速原型开发迭代。但nodejs绝对不是银蛋,他适合干的事情,也就是中小项目的原型开发,前端工具库,模板渲染等。**阿里系拿nodejs主要用来做前后端分离的,把原来不该是后端的活交给nodejs去干,后端只要提供数据,nodejs负责渲染就行**。这种开发模式对大公司而言就减少了沟通成本,将取后端数据的API给nodejs层调用就是,网页渲染成什么样由nodejs决定,这部分代码原来是后端的人写,显示效果又是由前端决定的,这中间就存在沟通成本,现在全由前端干了,自然效率就提高了很多。顺带的,nodejs还能提供性能上相对于PHP或java的好处。这是对nodejs正确的用法,要么是中小项目,要么是阿里这样作为渲染层,要么为前端提供各种工具链。
就nodejs本身而言,坑太多了,javascript语言本身就是个坑,这就决定了他不适合大型,对稳定安全有一定要求的项目。阿里自己的人说nodejs可能需要5-10年来弥补和java的差距。我并不清楚这种判断的依据,但肯定是经历过,对比过才会有的结论。
javascript语言现在已经进入了快速进化期,ES6跟ES5比,加入了很多新特性,很多语法糖,新特性和语法糖起的作用有好有坏,好是很多新特性的确能够简化代码,坏是语言越来越复杂的同时,还继续保持了对老版本的兼容性,javascript原本自由的语法问题会被新增的复杂度迅速放大,如果不做一定的硬性编码规定,团队作战将是一个极大的考验。nodejs巨量库,大多是精巧的个人项目,或许是对javascript这个语言特性最好的注解。我举个例子,继承,是用ES5的原型继承(ES5的原型继承就有好几种),还是用ES6的class语法糖?这需要强约束。异步,我可以用callback,promise,generator/yield,async/await,这也需要强约束。
javascript大量的用户本身也是坑,nodejs最不缺的是人,但最缺的也是人。会javascript的人茫茫多,但用的真正好的却很少,javascript是典型的入门容易精通难。大量从前端转nodejs的人,没有一定的基础,搞了小项目就觉得自己是后端大牛了,这样的人不在少数,把nodejs当银弹的人或公司不在少数。大家看看nodejs项目核心贡献有多少中国人就明白了,几乎是等于零蛋,阿里的人在Node.js 在双十一中有哪些应用,表现如何?再一次讲了实话,大家可以去看看。
javascript大量用户中坑不少,那巨量的库中的坑有多少大家只能自己去体会了。并不是说**高质量的库没有,而是少**。精华就那么几个,其他数量众多能有什么用?敢随便用么?其实并不敢。