优势不大吧,作为用Node.js做后端项目超过四年的人来说一下自己的感受。
经历了最初项目采用node 0.10.x 版本(callback hell问题)
升级到4.x(比较短暂的一个新项目,最终没继续做)
升级到6.x(使用co + yield来解决回调的问题)
最近终于升级到10.x(可以采用原生async + await了)
先说说优点:
第一点,Node.js原生提供了单进程的I/O高并发的能力,无需开发者处理多线程之类的问题;只要能理解回调,就能开发高性能的web后端程序;另外由于V8引擎的优秀,Node.js在脚本语言里的性能是相当优秀,对于编译型的C/C++或者golang而言,也没有慢太多。
然后是语法简单,开发真的很快,而且对于web后端,传输JSON来讲,JS对于JSON的解析处理真的很爽快,Object包打天下,也不需要像C/C++,或Java那样定义结构体或类;但相对的如果项目初期没有好的规划、规范,最终的代码的可维护性非常差(所谓动态语言一时爽,重构/维护 火葬场)。就我们的项目而言,如果一个功能是同一个同学开发的那么从controller到service层一路object往下传,也没有注释,回头别的地方想要复用的话,就必须完全阅读、理解原先函数的实现,需要传哪些参数,返回哪些数据才行。
社区繁荣,但不够清晰;尽管npm已经是世界上最大的包平台了,但node并没有统一/主流的技术全家桶
比如Java,spring boot -> spring cloud基本一统天下
而Node.js无论在前端领域,还是后端领域,都是每个公司一套自己的解决方案。
再说一些额外的问题,用Node.js市面上精通这块的人非常少,你遇到了一些底层的问题,可能解决起来非常麻烦(内存泄露、V8的调优等等)