slot deposit pulsa slot mahjong slot gacor slot gacor slot gacor resmi slot gacor 2025 slot gacor terpercaya slot gacor 2025 slot gacor hari ini slot gacor hari ini slot gacor hari ini
Deno 与 Node.js:一场没人要求但人人都需要的对决
17611538698
webmaster@21cto.com

Deno 与 Node.js:一场没人要求但人人都需要的对决

前端 0 325 2025-03-22 12:11:29

现在,请大家想象一下:现在是晚上 11 点,我喝着一杯既冰冷又滚烫的咖啡(这是我掌握的一项独特技能),然后我陷入了JavaScript 运行时的兔子洞中。

是的,我知道,星期五晚上很疯狂,对吧?但是,嘿,当你是一名软件工程师时,你对“乐趣”的想法有时包括比较 Deno 和 Node.js,而你的猫则在房间的另一边评判你。

关于这个概念,我多年来一直在研究Node.js。

它就像你衣柜里那些破旧的衣服,你似乎无法扔掉,因为它们仍然处于工作(质量)状态。它很舒服,但有时,你会想买一些市场上流行的类似流行款式——你知道的,有改进版和新款。

图片

回到正题,进入Deno.js,每个人都在热议的现代竞争对手。多年来,我已经习惯了 Node.js,对我来说,深入探索这个元素并亲自检查它是否值得大肆宣传,或者它是否具有同等甚至更好的运行时间,这只是一种自然的本能。那么,我们应该把它分解一下,以便更好地掌握它吗?

第一印象:谁给这些东西起的名字?


早在 2000 年代后期,当技术还处于起步阶段时,Node.js 自 2009 年起就出现在行业中。基于Chrome 的 V8 引擎构建的Node.js 一直在稳步帮助我们构建可扩展的应用程序。你可以将其理解为 Javascript 的那个版本,它非常可靠并且受到所有人的青睐。


最新消息是,Deno 于 2018 年推出。没错,它也是由流行的 Node.js 的原创者Ryan Dahl开发的。情节很曲折,对吧?他回来后指出了他认为 Node 的所有问题,然后说:“等我拿咖啡。我来修复它。” Deno 以安全性、简单性和现代功能为核心。如果你想知道它的名字……老实说,我不知道。但 Deno 是 Node 的字母重写,所以变成了这样。


第一轮:安全性


让我们来谈谈安全性,因为如果您和我一样,你至少会遇到一次“哦不,我不小心暴露了一个 API 密钥”的情况。


Node.js 将安全性留给开发人员,这表示着最好了解如何使用.env文件和权限 — — 否则。那么 Deno 呢?它就像我们所有人都有的那些坚持反复检查锁的偏执朋友之一。无论如何,默认情况下,Deno 在受保护的沙箱中工作,除非获得明确许可,否则不允许代码访问网络、文件系统甚至环境变量。


以下是一个代码例子:

const fs = require('fs');fs.writeFileSync('./hello.txt', 'Hello, World!');console.log('File written successfully!');

但是如果你尝试在没有权限的情况下运行该 Deno 代码,

const encoder = new TextEncoder();await Deno.writeFile('hello.txt', encoder.encode('Hello, World!'));console.log('File written successfully!');

你会收到一条很大的错误消息:PermissionDenied:需要 对“hello.txt”具有写访问权限 。

PermissionDenied: Requires write access to "hello.txt".

是的,Deno 不会乱来。你需要像--allow-write运行脚本时一样明确传递标志。这有点烦人吗?当然。但它能避免你意外引发混乱吗?当然。

第二轮:性能表现


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


Node.js 和 Deno 都使用JavaScript V8 引擎,因此速度都很快。但 Deno 是用 Rust 编写的,这使其在性能和可靠性方面略胜一筹。Rust 的内存安全功能和并发模型使其成为强大的引擎。话虽如此,Node.js 已经存在了很长时间,其性能优化也经过了实战检验


我运行了一些基准测试,因为,呃,我是个书呆子:)


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

const http = require('http');
const server = http.createServer((req, res) => { res.writeHead(200, { 'Content-Type': 'text/plain' }); res.end('Hello from Node.js!');});
server.listen(3000, () => console.log('Node server running on port 3000'));

Deno 中的基本 HTTP 服务器实现:

import { serve } from "https://deno.land/std/http/server.ts";
const server = serve({ port: 3000 });console.log("Deno server running on port 3000");
for await (const req of server) { req.respond({ body: "Hello from Deno!" });}


结果如何?Deno 在处理请求方面稍快一些,但我们这里说的是毫秒级的差异。

对于大多数实际应用程序来说,这种差异不会改变游戏规则——除非你试图构建下一个 Twitter(或 X?我们现在是这样称呼它的吗?)。

第三轮:开发者体验


好吧,这部分让我很受触动。如果你一直在使用 Node.js,你就会知道 npm 是你项目的命脉。它就是你安装软件包、管理依赖项的方式,而且当文件node_modules大小增长到 2 GB 时,你偶尔会对着屏幕大喊大叫。


Deno 说:“不,我们这里不做 npm。”相反,它使用分布式的模块系统。你可以通过 URL 直接导入模块,如下代码所示:


import * as _ from "https://deno.land/x/lodash/mod.ts";
console.log(_.chunk([1, 2, 3, 4], 2));

一开始,我心想:“等等,什么?”但后来我意识到它有多酷。

我不再有臃肿的 node_modules 文件夹!不再担心软件包版本不匹配!只需干净、直接地导入就可以。

不过,我承认:我很怀念 npm 的便利性和它提供的软件包的多样性,真是旧习难改。

快速比较


下面快速并列展示一下 Deno 和 Node.js 在语法和风格上的差异:


读取文件


Node.js:

const fs = require('fs');const data = fs.readFileSync('./file.txt', 'utf8');console.log(data);

Deno.js:

const data = await Deno.readTextFile('./file.txt');console.log(data);


那么,你应该选择哪位呢?


让我们花点时间进行更多分析。因此,假设您正在全力投入 Node.js 项目,请考虑您的优先事项;如果一切顺利,则无需更换船。Node.js 现在已经成熟,拥有庞大的生态系统,可以完成所有工作。但是,如果您想重新开始或构建一些强调安全方面的东西,Deno 值得考虑。它就像 Node 更酷、更现代的表亲,在独立乐队成名之前会听他们的歌。


对我来说?我可能会继续尝试这两种语言。目前,Node.js 对我来说就像家一样,但 Deno 具有闪亮的新玩具吸引力。更重要的是,我实际上被编写保证更具未来性的代码的概念所吸引。 


把这些都忘掉之后,我现在需要移动并清理我的显示器,因为它现在大约 90% 被错误弹出窗口和随机代码片段的屏幕截图占据。典型的情况,对吧?


现在,轮到你了!


你已经尝试过 Deno 了吗,还是你仍然坚持使用 Node.js?请在下面发表你的想法,我们总是乐于进行精彩的技术辩论哦!


作者:场长

参考:

https://github.com/errilaz/awesome-js-runtimes

评论