Node.js要完了吗?

2020 年 5 月 25 日

Node.js要完了吗?

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


原文链接:


https://www.geekyhacker.com/2020/05/19/is-node-js-dying/


2020 年 5 月 25 日 20:0711224
用户头像
蔡芳芳 InfoQ高级编辑

发布了 502 篇内容, 共 228.0 次阅读, 收获喜欢 1365 次。

关注

评论 3 条评论

发布
用户头像
所以Rust的时代将要来临了?
2020 年 06 月 20 日 21:10
回复
用户头像
deno 还是有点简陋
2020 年 06 月 07 日 22:38
回复
用户头像
国内总是迟点,nodejs不会消亡,只会越来越好
2020 年 05 月 30 日 21:49
回复
没有更多评论了
发现更多内容

基于Ambari的大数据平台搭建

数据社

大数据 hadoop ambari

设计模式-技术专题-建造者模式(Builder)

李浩宇/Alex

Java 设计模式

【数据结构与算法】用动图解说数组、链表、跳表原理与实现

三钻

数组 链表 数据结构与算法 跳表

5. JsonFactory工厂而已,还蛮有料,这是我没想到的

YourBatman

Jackson Fastjson JSON库 JsonFactory

PHP中的错误和异常

书旅

php 异常 常见错误

火眼云CEO张陆鹏:A轮融资5000万,解密国内ABM生态首位玩家

ToB行业头条

LeetCode题解:11. 盛最多水的容器,双循环暴力法,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

IOTA架构下的数据采集

易观大数据

MySQL-长事务详解

Simon

MySQL mysql事务

如何选择一台打印机

别把虾米不当海鲜

市值管理量化机器人,做市机器人,自动刷单机器人

WX13823153201

比特币 数字货币

MySQL视图介绍

Simon

MySQL

揭秘MySQL主从数据不一致

Simon

MySQL 主从复制

通过波士顿矩阵模型做产品定位

GuOjixIE

数据分析 产品定位 波士顿矩阵模型

Spring-技术专题-Bean的生命周期简介

李浩宇/Alex

spring

python自动生成一整月的排班表

openbytes

Python

如何让我的简历有价值、有亮点

escray

学习 面试 简历 面试现场

哥尼斯堡七桥问题

InfoQ_aef2dd810f7f

性能优化-技术专题-top和jstack分析高CPU问题

李浩宇/Alex

JVM

芯片破壁者(十三):台湾地区半导体的古史新证

脑极体

PM2 管理node.js开机自启动(非root用户)

openbytes

node.js

影响音视频延迟的关键因素(二): 采集、前处理、编解码

ZEGO即构

H264 API 3A算法

37岁程序员被裁,想用6月工资跪舔领导划掉被裁名额,结果蒙了!

程序员生活志

史上最强DIY,手工制作一只会说话的机器狗

华为云开发者社区

聊天机器人 nlp 华为云 语言识别 语言合成

因为套用这个模板,我成了公司最佳员工

华为云开发者社区

网站架构 华为云 网站搭建 匀速建站 SEO

更改用户host留下的坑

Simon

MySQL

关于自增id 你可能还不知道

Simon

MySQL MySQL自增ID

90后程序员小姐姐在线征婚!年薪70w!拥有五套房!她却担心自己因为年龄大嫁不出去!

程序员生活志

程序员

[8.20]leetcode每日一题,

一起搞稽

算法 DFS

LeetCode题解:66. 加一,倒序遍历+可中途退出,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

质量门禁:Verigreen开启Git的Commit门禁

陈磊@Criss

Node.js要完了吗?-InfoQ