Deno vs. Node.js:没有人想要但每个人都需要的对决

好的,想象一下:现在是晚上11点,我手里拿着一杯咖啡,竟然既冷又烫(这是我掌握的技能),我正陷入关于JavaScript 运行时的深渊。是的,我知道,这真是疯狂的周五晚上,对吧?但是嘿,当你是一名软件工程师时,你的“乐趣”有时意味着在猫咪的审视下比较 Deno 和 Node.js。

为了更好地理解这个概念,我已经与Node.js斗争了好几年。就像你衣橱里那些磨损的衣服,你就是无法摆脱,因为它们仍然保持着(质量)状态。它很舒适,但有时你会想去买一些在市场上时尚的类似款 —— 你知道的,那些修订版和新变种。

回到主题,登场的是Deno,这个大家都在热议的现代对手。习惯了多年的 Node.js,我自然会本能地深入探索这个元素,亲自检查它是否值得所有的炒作,或者它是否有同等甚至更好的运行时。那么,我们要不要分解一下,以更好地理解它呢?

第一印象:这些东西到底是谁起的名字?

2000年代末,当技术还处于萌芽阶段时,Node.js自2009年起就已经在行业中存在。基于Chrome的V8引擎构建,Node.js一直在稳步帮助我们构建可扩展的应用程序。你可以将其理解为JavaScript的一个版本,深受大家青睐且备受信赖。

最新的消息是,Deno于2018年推出。而且,没错,它也是由同一个家伙Ryan Dahl开发的,他是广受欢迎的Node.js的原创者。看起来有点戏剧性,对吧?他回来了,指出了他认为在Node中搞砸的一切,然后说:“拿好我的咖啡,我来解决它。” Deno诞生了,以安全、简洁和现代功能为核心。如果你想知道这个名字的由来…老实说我也不知道。但Deno是Node的字谜,就是这样。

第一轮:安全

让我们谈谈安全性,因为如果你和我一样,至少曾经有过一次“哦不,我不小心暴露了一个API密钥”的时刻。(我们不再谈论那个项目了。)

Node.js 将 安全性交给开发者,这意味着你最好熟悉 .env 文件和权限——否则就麻烦了。但是 Deno 呢?它就像我们所有人中那些偏执的朋友,总是坚持要双重检查锁。无论如何,Deno 默认在一个受保护的沙盒中工作,除非明确给予权限,否则不允许你的代码访问网络、文件系统,甚至环境变量。

这里有一个例子:

Node.js

JavaScript

 

Deno

JavaScript

 

但是如果你试图在没有权限的情况下运行那段 Deno 代码,你会得到一个大大的错误信息:

JavaScript

 

没错,Deno 是不含糊的。你需要在运行脚本时明确传递像 --allow-write 这样的标志。这是否有点烦人?当然。但它确实能让你免于意外地释放混乱?绝对可以。

第二轮:性能

现在,我不是个速度狂人,但在运行时方面,性能很重要。你希望你的应用在你问“谁想吃披萨?”时比你的朋友们反应更快。

Node.js和Deno都使用V8引擎,因此它们都很快。但是Deno是用Rust编写的,这使得它在性能和可靠性方面略胜一筹。Rust的内存安全特性和并发模型使其在内部表现出色。尽管如此,Node.js已经存在更长时间了,它的性能优化经受住了考验。

我进行了一些基准测试,因为,嗯,我是个宅男:

Node.js中的基本HTTP服务器:

JavaScript

 

Deno中的基本HTTP服务器:

JavaScript

 

结果呢?Deno在处理请求时稍微快一点,但我们说的是毫秒级别的差异。对于大多数实际应用程序来说,这种差异不会改变游戏规则,除非你想要构建下一个Twitter(或者X?现在是这样称呼它吗?)。

第三回合:开发者体验

好了,这部分让我印象深刻。如果你一直在使用Node.js,你就会知道npm是项目的命脉。通过npm,你可以安装软件包,管理依赖关系,并偶尔在node_modules增长到2GB时对着屏幕大喊大叫。

Deno说:“不,我们这里不用npm。”相反,它使用了去中心化的模块系统。你可以通过URL直接导入模块,就像这样:

JavaScript

 

起初,我想,“等一下,这是什么?”但后来我意识到这有多酷。不再有臃肿的 node_modules 文件夹!不再担心包版本不匹配!只有干净、直接的导入。不过,我承认:我怀念 npm 的便利性和它提供的各种包。旧习难改。

快速比较

这里有一个快速的并排比较,展示 Deno 和 Node.js 在语法和风格上的不同:

读取文件

Node.js:

JavaScript

 

Deno:

JavaScript

 

发起 HTTP 请求

Node.js(使用 axios):

JavaScript

 

Deno(内置 Fetch):

JavaScript

 

那么,你应该选择哪个?

让我们花些时间进一步分析。所以,假设你正在全力以赴地进行 Node.js 项目,考虑一下你的优先事项;如果一切运转良好,就没有必要换船。Node.js 现在已经成熟,并拥有庞大的生态系统,可以完成所有工作。然而,如果你想重新开始或构建一些强调安全性的东西,Deno 值得考虑。它就像 Node 的更酷、更现代的表亲,在独立乐队成名之前就已经在听他们的音乐。

至于我?我可能会继续玩这两者。对我来说,Node.js 目前感觉像是家,但 Deno 具有那种闪亮的新玩具吸引力。更重要的是,我实际上被编写更具未来保障的代码的概念所吸引。

将这些都放在一边,我现在需要移动并清理我的显示器,因为它目前被大约90%的错误弹出窗口截图和随机代码片段占据着。经典案例,对吧?

轮到你了!

你尝试过Deno吗,还是坚持使用Node.js?在下面留下你的想法 — 我总是乐意参与一场有关技术的辩论(如果有相关的表情包更好)。

Source:
https://dzone.com/articles/deno-vs-nodejs-the-showdown-nobody-asked-for