Node.js前景与优劣比对

2,750 阅读3分钟

!非专业文章,文章大部分内容仅为原文章的译文,仅供参考。欢迎批评和指点!

Node.js前景概述

Stack Overflow 2020年开发者调查1的结果显示,Node.js在网页应用开发工具和框架(the most popular web framework for Web app development)荣登榜首,获得51.9%的投票率。2020年开始,越来越多的公司迅速转型Node.js,如雅虎、沃尔玛、Uber等。

img

选择Node.js的原因

Node.js帮助企业解决一系列生产过程中的问题和挑战,其中有一部分是平台相关的(platform-related),还有一部分与资源利用(resource utilization)有关。Netflix、Paypal、Linkedin等都表示Node.js可以节省60%以上的启动时间2

下图是开发者对于Node.js对开发影响的统计数据。可以看到,大部分开发者认为Node.js能提高开发速度,减少开发支出,以及提升应用的性能。此外,22%的开发者认为使用了Node.js后更容易招聘到合适的员工,这说明Node.js比其他语言(如Java、PHP、.NET)更容易上手,相比于Java的Spring,更加轻量和简易。SIMFORM做了一个调查报告,列举了15家公司对Node.js的看法3

img

Node.js 的优势

img

高性能的实时应用

Node.js的一大优势就是可以快速地构筑(build)应用并显示结果。Node.js之所以强大,是因为它以谷歌浏览器(Chrome's V8)引擎为基础,并使用C++编写,它以超高的效率将函数编译为机器码。为了保证持续的提升,谷歌采用V8基准套件来保证更快的执行速度、更优秀的编译器、安全补丁和高可伸缩性(scalability),进而提升Node.js的性能。

更易伸缩的现代应用

前沿的技术带来数以千计的特性,如集群模块(cluster module)。它促进了多核CPU的负载均衡,使其通过更小的模块来实现需求变得更容易,且不会烧坏内存进程。此外,Node.js采用非阻塞时间循环机制,提高了可伸缩性,使服务器能无缝地处理请求。

从发展的眼光看,Node.js可以很好地支持微服务,让程序被划分为更小的部分。Node.js和微服务允许现代应用程序根据需求进行伸缩,帮助公司使用更少的资源实现更高的性能。

容易学习和快速上手

Javascript是WEB开发人员社区中最流行、使用最广泛的编程语言之一,适应和学习Node.js对于WEB开发者而言非常轻松,编写代码所需的时间更少。根据Node.js 2016年用户调查4,Javascript是最受欢迎的前端开发语言,学习和使用Node.js需要的时间和经历更少。根据StackOverflow最近的一项调查,参与投票的专业开发人员中有惊人的49.9%选择Node.js作为最常用的技术。

Node.js 的不足

img

  1. 在处理复杂的计算任务时性能下降:当Node.js事件循环中接收到相当大的CPU驱动的任务时,它会使用动用全部的CPU资源去完成之。(可以用其他语言完成Node.js不擅长的复杂计算。)
  2. API不稳定导致沉重的代码更迭开销:Node.js经常不向下兼容,当更新到新版本时,需要进行大幅度的改动。(Node.js是比较新的语言,仍然在蓬勃发展中。)
  3. 异步编程导致代码难以维护:四个字——回调地狱(callback hell)。(注:现在已经被Promise解决,但在没有出现Promise前一些库可能会出现这种问题,建议用较新的、长期维护的库。)
  4. 缺乏库的支持可能影响代码质量:NPM上有很多低质量和烂尾的库,并且缺乏相应的文档,因此可能导致产品的代码混乱和不规范。

Footnotes

  1. insights.stackoverflow.com/survey/2020

  2. hackernoon.com/how-netflix…

  3. www.simform.com/companies-u…

  4. nodejs.org/static/docu…