发布于 2026-01-06 1 阅读
0

NestJS:Bun 与 NodeJS 的比较

NestJS:Bun 与 NodeJS 的比较

什么是Bun?

Bun JS 或 Bun Sh 是一个功能全面的 JavaScript 和 TypeScript 工具包,它通过其命令行界面 (CLI) 提供强大的工具集,目前适用于 Linux、macOS 和 WSL 用户。要安装它,请运行:

curl -fsSL https://bun.sh/install | bash

要了解 Bun 是什么以及它能做什么,请查看官方文档

为什么要这样做?

我们都知道NodeJS处理得相当不错,但Bun真的很有潜力,所以为什么不试试呢?我们程序员喜欢测试,看看会发生什么,尤其喜欢尝试新事物!

入门

现在我们的 bun CLI 已经启动并运行了,接下来让我们使用 nest CLI 生成两个独立的项目。这两个项目将分别使用 npm 和 bun 进行完整安装、构建和运行,以便我们能够直观地看到它们之间的区别。

注意:所有基准测试都将使用 Arch Linux x86_64 环境下的wrk 工具进行。

1. 依赖项安装

在对这两个项目进行“嵌套新建”之后,是时候看看 Bun 上的第一个可用功能了,那就是包管理器。

npm 安装
面包安装

我们已经看到一些进步了!Bun 安装速度飞快,赢得了第一项挑战。

2. 开发服务器

我们不能忽视良好的开发体验对于框架而言至关重要。由于 Bun 和 Node 都支持诸如“npm run start”之类的运行时环境,我们需要比较一下在实时开发方面哪个更胜一筹。目前,NestJS 尚未使用 Bun.serve() 创建 Web 服务器,因此我们所有的比较都是基于 NestJS 的默认服务器提供程序。

让我们在不同的端口上运行这两个项目。Bun 将运行在 3333 端口,Node 将运行在 4444 端口,这样我们就可以轻松地观察它们的运行情况。
服务器已启动

不做任何修改,我们将它们与 wrk 进行比较。注意:我们没有同时运行它们,这意味着以下结果是在所有计算能力都集中用于一次只运行一个测试的情况下获得的。

在开发服务器上进行 HTTP 测试

我们可以看到,Bun不仅每秒处理的请求数量更多(几乎多出2400个请求),而且平均延迟也降低了30毫秒。这对Bun来说无疑是一大优势。

但这一部分还没结束,我们还有一项所有开发者都喜欢的功能:热重载。要在 Node.js 中使用 NestJS 启用热重载,我们需要像 nodemon 这样的服务来帮我们实现。而 Bun 框架则提供了 `--watch` 参数,可以在 `bun start` 命令中传递。Bun 框架本身就支持另一种热重载方式!不过,`--watch` 参数会在文件更改时触发(这对于需要实时更新的开发者来说是最佳选择)。

邦热重装机

我们的小中国面包 Bun 现在已经以 2 比 0 战胜了强大的 NodeJS。

3. 测试

由于我们太忙,无法从头开始编写测试文件,我想我们会使用 NestJS 自动生成的测试文件。

测试运行者

哇哦,看来 NodeJS 并没有认输。与 HTTP 请求之争不同,这次的差距非常小,我们不敢轻易使用 NodeJS。原本我们预期原生测试模块会是决定胜负的关键,但 NodeJS 和 Bun 都加载了测试运行器,而且由于我们只考虑 Jest 的测试结果,NodeJS 有可能胜出,使 Bun 的优势扩大到 2 倍。

4. 构建和部署

现在让我们构建一个庞大的 Hello World NestJS 应用程序,看看它在原始环境下分别使用“node dist/main.js”和“bun run dist/main.js”时的性能如何,以及构建时间如何。

构建时间

我们的对比结果中还有另一个微小的差异,Bun 只比我们慢了 500 毫秒!这种微小的差异可以理解,因为我们测试的是一个非常小的项目。不过值得一提的是,这还没结束!我们还需要比较编译后项目的性能。

构建运行中

拿不定主意时,就去对比一下!

构建过程中的 HTTP 测试

Bun 再次表现出色,值得注意的是,当处理编译后的 NestJS 时,Bun 处理的请求比在开发服务器上运行时多出近 1 万个,我的天哪!

此外,我们现在可以比较 Node 和 Bun 上的开发服务器和构建服务器。Bun 将平均延迟降低了一半,每秒请求数增加了一倍以上。Node 也表现出色,降低了延迟,并且在每秒最大请求数方面比 Bun 高出近 1000 次。

总的来说,Node 的性能相当不错,而 Bun 的性能则强得惊人。这次测试非常棒,但 Bun 在 3 倍性能测试中胜出。

结论

总的来说,Bun 在性能方面确实非常出色,能够带来一些令人惊艳的结果。但我们不能忘记它目前仍处于第一个版本,在生产环境中可能非常不稳定,因此我不建议在大型项目中用 Bun 替代 NodeJS。NodeJS 仍然是处理 JavaScript 应用最可靠、最值得信赖的运行时环境。然而,Bun 似乎正在一步步逼近 Node 的王座。我从 0.3 版本就开始关注 Bun 的早期开发,那时运行 `bun install` 甚至会导致段错误。能够看到它发展壮大,拥有自己的社区并与 NodeJS 这样的巨头竞争,真是令人欣慰。

感谢阅读,欢迎分享您的想法!

文章来源:https://dev.to/mourishitz/running-nestjs-server-with-bun-4cdl