{ const fullEndpoints = endpoints.map( (endpoint) => `http://127.0.0.1:${server.address().port}${endpoint}`, );"/>

电脑装配网

Node.js、Deno、Bun三个JS运行时哪个更胜一筹?

 人阅读 | 作者xiaolin | 时间:2023-10-04 06:25
{ const fullEndpoints = endpoints.map( (endpoint) => `http://127.0.0.1:${server.address().port}${endpoint}`, ); console.log(JSON.stringify({ BENCHMARKABLE_ENDPOINTS: fullEndpoints, }));});

测试结果如下图:

10 个并发用户(每秒请求数)

路径

Node.js

Deno

Bun

静态文件传递

1712.37

1761.87

2559.35

JSON 响应

2223.57

2772.39

4138.38

计算密集型任务

2377.44

3480.13

4321.48

100 个并发用户(每秒请求数)

路径

Node.js

Deno

Bun

静态文件传递

2153.87

2571.72

3468.01

JSON 响应

2344.44

3468.01

4555.89

计算密集型任务

2286.53

3609.09

4341.41

根据给定的条件和具体的基准测试运行结果:

Deno 比 Node.js 快大约 33%。Bun 比 Node.js 快大约 73%。

Bun 官方也给出了一个基准测试的数据:

React 服务端渲染(每秒 HTTP 请求数 (Linux x64)):WebSocket 聊天服务器(每秒发送的消息数(Linux x64,32 个客户端)):加载一个巨大的表(每秒平均查询次数)

可以看到, Bun 是 Deno 的速度两倍,是 Node.js 速度的四倍。

Node.js、Bun、Deno支持和社区对比

这三个运行时都是开源的,但并非所有项目都完全得到社区的支持。Node.js 由 OpenJS 基金会支持,并且严格以社区和志愿者为基础。Deno 和 Bun 得到了营利性组织和风险投资支持的项目的支持。

Node.js 有一个成熟的生态系统和庞大的社区。相比之下,Deno 和 Bun 则较为新颖,遇到问题时可能解决难度更大,但仍然有很多热情的开发者愿意分享相关知识。此外,Deno 1.28 引入了更好的与 npm 包兼容性,使得从 Node.js 迁移过来的开发者更容易接受。

下面是 Stack Overflow 上每个运行时标记的问题的数量(截至 2023 年 9 月):

运行时

问题数量

Node.js

466762

Deno

917

Bun

52

如你所见,Node.js 相关的问题最多,这也意味着当遇到问题时,更容易得到解决方案。

在 2022 年 State of JavaScript 调查中,有一个问题是关于参与者经常使用哪种运行时,有将近 30000 名受访者回答了这个问题。调查结果显示, Node.js 遥遥领先,Deno 得票数约为 5300,Bun 得票数约为 1200。也许我们会在 2023 年看到 Deno 和 Bun 出现一些新的趋势。

有兴趣的小伙伴们可以看看小编之前整理的:2022年JavaScript生态圈趋势报告

官方的 Node.js 文档包括各种指南、大量的 API 参考和入门信息。还提供了有关其依赖关系的信息。

Deno 的网站包括一个非常详细的手册,帮助你熟悉运行时并在项目中开始使用它。第三方模块页面很方便,可以了解生态系统中可用的内容。截至 2023 年 8 月,它包含了超过 6000 个模块,并提供一些示例代码。

Bun 的主页链接到了其 Discord、文档和 GitHub 页面。自从它发布以来,文档已经显著改善。现在官方文档中包含了各种主题的信息,例如入门指南、使用打包器和测试运行器以及 API 参考,甚至还有指南展示如何使用 Bun 完成常见任务。

如何从 Node.js 迁移到 Deno 或 Bun

用纯 JavaScript 或 TypeScript 编写的代码应该可以在任何运行时无缝运行。但是,如果使用过 Node.js 的特定功能,那么迁移到其他运行时可能会比较困难。

从 Node.js 迁移到 Deno

过去,Node.js 模块的兼容性是 Deno 迁移中的一个主要问题。不过,现在只需在导入语句前加上node:前缀即可。至于 npm 包,可以在它们前面加上npm:前缀,或者创建一个deno.js文件,描述 import maps 以供 Deno 解析它们。

迁移方法请见Deno官方文档:https://deno.land/manual@v1.36.1/basics/import_maps

如果正在构建软件包/库,可以查看 Denoify。这是一个旨在在迁移时自动更改某些文件,并使项目维护更加容易,适用于 npm 和 deno.land/x 的项目。

Denoify Github:https://github.com/garronej/denoify

deno.land/x :https://deno.land/x

从 Node.js 迁移到 Bun

Bun 实现了大多数 Node-API 函数。如果项目较小或仅使用常见函数,可能可以直接将其放入 Bun 中并开始使用。对于大型项目,可能需要重写代码来解决挑战。

Bun 还具有自己的 API。例如,Bun 使用自己的 API 来提供 Web 文件服务。

Bun.serve({ fetch(req) { return new Response("Hello!!!"); }, tls: { key: Bun.file("./key.pem"), cert: Bun.file("./cert.pem"), }});

可以看到,在迁移到 Deno 或 Bun 时,使用它们的原生 API 就意味着代码与在 Node.j s 中使用的代码有所不同。这是在转换现有项目时需要牢记的重要事项,同时在开始新项目时也要考虑到,因为如果遇到在 Node.js 中不存在的且难以解决的问题,可能会难以回退到 Node.js。

总结

Bun 显然是速度上的赢家,并且在功能上带来了很多创新。但由于它仍然很新,所以使用它存在风险。

Node.js 的一大优势在于其成熟度和生态系统的规模。其仍然是目前最安全的选择,并久经考验。

与 Node.js 相比, Deno 还具有很多优势,其强大的功能使开发更加顺畅,并且可以轻松构建高质量的复杂项目。它很安全,虽然比 Node.js 更快,但与 Bun 相比,它还是有点慢的。

总的来说,Node.js 仍然是目前最好的选择,Deno 具有很多现代化的功能,值得尝试。如果最关心速度或只是想了解新技术的前沿,那么 Bun 就是你的首选工具。

最后总结 Node.js、Bun、Deno 三个JS运行时特性上的比较,如下图:

Node.js、Bun、Deno 特性对比

除了表格上这些直观可以对比的特性,小编还列出了一些相关的值得关注的要点:

Bun 在一定程度上对 Windows 有作支持。Node 已开始搞权限模型。Node npm list 是有一个外部依赖视图的。Bun 有半内置的 REPL,需要时会进行下载。所有运行时都在不同程度上提供了 ARM64 支持,其中 Node.js 支持的平台范围最广。尽管 Deno 缺少传统的内置包管理器,但它可以通过 URL 导入、指定符导入、import_map 和 package.json 实现了自动包安装。据传 Deno 即将有一次重大更新,可能会带来一些令人兴奋的新特性。

小编还论述了使用便捷性与安全等方面,最后结论比较中肯客观:

如果成熟度、庞大的生态以及社区支持是你最重视的,那么 Node.js 仍然是一个强有力的竞争者。如果你寻求一个现代化、默认安全性高且开发体验一流并且日益成熟的运行时环境,那么 Deno 就是不二之选。如果你想要结合 Node.js 和 Deno 的优点,并注重尖端性能以及良好的开发体验,那么 Bun 可能就是你需要的答案。

大家对Node.js、Bun、Deno有什么想法,也可以留言参与讨论。

最后

一台电脑,一个键盘,尽情挥洒智慧的人生;

几行数字,几个字母,认真编写生活的美好;

一 个灵感,一段程序,推动科技进步,促进社会发展。

创作不易,喜欢的老铁们加个关注,点个赞,打个赏,后面会不定期更新干货和技术相关的资讯,速速收藏,谢谢!

你们的一个小小举动就是对小编的认可,更是创作的动力。


文章标签:

本文链接:『转载请注明出处』