Node.js 真的要走向衰败了吗?

发表时间: 2020-05-26 12:02

Deno 1.0 发布之后的这些天,关于 Node.js 的讨论也甚嚣尘上。在社交媒体和技术论坛中,许多开发人员都在谈论 Node.js 的命运走向。甚至有人断言 Node.js 即将迎来终结,至少这一天迟早会到来。我并不是什么先知,但在本文中我会与大家分享一些看法。本文主要尝试回答“Node.js 是否要完”这个问题。我会向大家解释,为什么现在我们不必在意那些对 Node.js 命运的悲观预测,即便这种预测并非空穴来风。

本文最初发布于 Geeky Hakcer 博客,经原作者授权由 InfoQ 中文站翻译并分享。

引言

每当一种新的语言或技术诞生时,马上就会有很多人谈论它的终结。不信?只需打开谷歌并输入:

(随便选一种语言或技术)快要完蛋了吗?

不管你输入的是哪种技术都可以搜出来一大堆文章来,其中很多无疑写的就是垃圾。就算是 Kubernetes 之类的新技术也不能幸免,Node.js 自然也不例外。但最近炒热“Node.js 要完”这个话题的是 Deno 1.0 版本的发布。

如果你还不知道什么是 Deno,请继续阅读下一节内容。这样你就会知道现在弥漫的恐慌情绪是从何而来的了。

什么是 Deno?

Deno 是由 Node.js 创建者 Ryan Dahl 编写的 Javascript 运行时。它的名字是“Node”一词的变体

这个项目是 Dahl 在 2018 年的演讲“我对 Node.js 感到遗憾的十件事”中宣布的。相比以 C/C++ 编写的 Node.js 而言,Deno 是用 Rust 编写的。

在撰写本文时,Deno 只有一个执行文件,压缩后的大小约为 15MB。

漂亮的 Deno


此外,它没有类似 NPM 的或独立的外部包管理器。它的包管理是内置的。

Deno 运行在沙盒模式下(意味着无法直接访问文件、网络和其他 IO),因此任何权限都需要显式授予才行。

对于 TypeScript 爱好者的一个好消息是,Deno 默认支持 TS。

为什么要讨论 Node.js 的消亡?

之所以社区突然开始认定 Node.js 要完,主要是因为 Deno 的 1.0 版已于 2020 年 5 月 13 日正式发布。虽然这个项目已经开发了两年多时间,但这个正式版本在社交媒体中引发了 Node 开发人员的恐慌。

不用说,Deno 和 Node.js 之间有很多区别。而且 Deno 不一定是 Node.js 的替代品(目前为止是这样),但不管怎样许多人都感到惊慌失措。我对他们恐惧的原因归了一下类,并分别做了探讨。

相同的创造者

造成现在这种局面的一大因素是两种产品有着相同的创造者。而且许多人认为 Ryan Dahl 不会再在 Node 上浪费时间了。于是乎,Node.js 要完。

这个假设看似有理,其实大错特错。Node.js 拥有一个庞大的社区,比其他许多社区都大得多。所以这并不是什么个人项目。

有人在反驳时将 Dahl 对 Node.js 的意义和 Linus Torvalds 对 Linux 的意义做了类比。我要说的是,这根本不是正确的对比。

首先,Dahl 自 2012 年以来就没再参与 Node.js 的开发了。但在过去的 30 年来,Torvalds 一直在以某种形式参与 Linux 的相关工作。

其次,就算是 Torvalds 离开了 Linux 的内核社区,也不能说 Linux 就会完蛋。而且也不要把 Torvalds 的退出与 Linux 社区在 2018 年 9 月的混乱局面划等号。2018 年的那次混乱是一桩原因复杂的黑暗事件,其中只有一部分和 Torvalds 的退出有关系。

最后,Torvalds 还创建了 Git,但并未参与其维护工作。他把 Git 全盘交了出去,可是 Git 完蛋了吗?

Node.js 社区是一片墓地,遍布着没人维护的库

众所周知,Node.js 社区是无人维护的库的墓地。不夸张地说,社区中每天诞生或死亡的库的数量超过了每个人的细胞数量。

开源社区每隔三两天就会诞生一个新的框架,新框架或许会风骚一时,然后突然就没人维护了。随便搜一下,你就能在 GitHub 中找到几十个 Star 数众多但没人维护的项目。

可能有人会说,如果这就是社区中的日常,那么我们如何断定 Node.js 就不会遭遇同样的命运呢?

答案是不好说。Node.js 的命运取决于社区和企业的支持。重点不在于项目筹集了多少资金,而在于它是否能得到更多的贡献和支持。如果大量使用 Node.js 的那些公司能雇用一些人为这个项目做出积极贡献,那么 Node.js 几乎不可能迎来末日。举个例子,Java 已经存在 25 年了。Java 之所以如此长寿,除了它可以在几乎所有设备上广泛使用的优势之外,另一个原因就是众多公司的支持。它得到的支持不仅来自于 Oracle,而且还有 Amazon、IBM 和其他许多公司。

但请不要忘记,许多使用 Node.js 的公司都是寿命短、预算紧的初创公司。我们不能指望这些公司做出多大贡献。Node.js 需要的是像 Facebook 或谷歌这样钱包鼓鼓的巨头的支持。

如果社区走向分裂,和 / 或大公司不再支持 Node,那么我们就有理由担忧 Node 正走在衰落之路上了。

Deno 比 Node.js 更好

当然,这一点没有疑问。在构建 Node.js 的过程中,人们获得了丰富的经验和知识,所以 Deno 能做得更好也不奇怪。但是,要评估一项技术的前景不能只看它的能力。那只是其中一个因素。普及率和支持水平是更重要的因素。而且 Deno 在这些方面并无优势,因为它还很年轻。因此,Node.js 不会这么快死掉的。

但我们还可以假设最坏的情况,然后会发生什么呢?继续看下一节

如果 Node.js 死掉了会怎样?

我调查时发现,有些人讨论 Node.js 的终结就好像在谈论一个人刚刚死掉一样。问题是,编程语言或技术的消亡过程并不像人类的死亡那样。这种消亡不是一夜之间发生的事情。

技术的更新换代通常需要花费多年时间,因为公司无法在一夜之间或一个月内换掉现有的产品,然后迁移到新产品上。Node 也不例外。Node.js 库不能用在 Deno 中,为 Deno 开发新库是需要花时间的。另外,不要忘记专业知识的可用性。现在很少有人熟悉如何使用 Deno 来构建生产规模的产品。所有这些至少需要几年的时间。

Node 没机会了!


即便 Node 的消亡时间比预期的要早,市场也会长期需要相关的岗位。当然它不会像 COBOL 那样。但至少在接下来的 5 年中 Node 的开发人员都能找到工作。这应该可以为 Node 开发人员提供足够的缓冲期来转换方向。另外,由于 Deno 和 Node 都是 JS 世界的成员,因此从一个切换到另一个的过程并不会那么烦人。

结论

Node.js 至少在未来五年内不会消亡,而当下在社交媒体中关于它死期的争论毫无意义。尽管有一些关于它走下坡路的判断,但到目前为止我们还没有一个明确的结论。就算我们对 Node.js 假设最坏的情况,而对 Deno 假设最光明的未来,各家公司要切换到新技术上依旧需要很长的时间,而且 Deno 的库生态建立起来也需要时间。如果你忧心忡忡,或者对新技术充满好奇,我强烈建议你尝试一下 Deno。

最后,我想声明一下,我对 Deno 没有偏见。这是一个前景光明的好项目。我写这篇文章的目的不是要讨论 Deno 的未来,而是要减轻 Node.js 开发人员的压力。

作者介绍:

Kasra Madadipouya 是一位软件工程师,对软件架构和设计、简洁代码和机器学习充满热情。他很享受用 Java、Scala、Python 和 JavaScript 编程的乐趣。喜欢博客、写作、机器学习、音乐、步行和天文学。i3WM 粉丝。Linux 和免费开源软件(FOSS)的资深支持者。对 Deno 感兴趣的话,可以看一看作者最新的教学资料:如何使用 Deno 和 Oak 构建 REST API 。邮箱:kasra@madadipouya.com