Bun 在解码 Base64 方面比 Node.js 22 快得多,但两者都依赖于相同的库


在最近的一则推文中,计算机科学家 Daniel Lemire 指出,JavaScript 运行时 Bun 在解码 Base64 输入时,比 Node.js 22 快了数倍。尽管两者都依赖于同一个底层库 simdutf 来进行实际解码,但 Node.js 在与其底层 JavaScript 引擎 v8 交互时遇到了瓶颈。

Lemire 详细解释了问题的根源在于 Node.js 在开始解码字符串之前,需要通过调用 String::Value 函数来获取字符串的值。这一步操作会在 Node.js 内部分配一个数组,并要求 v8 将内容复制到这个数组中。由于无法直接访问 v8 中存储的字符串,Node.js 被迫将纯 ASCII 字符串转换为 UTF-16,导致了不必要的性能损失。

Lemire 的分析显示,Base64 解码过程仅占总运行时间的五分之一,而字符复制过程则占据了将近一半的时间。这种多余的转换不仅浪费了资源,还使得整个解码过程效率低下。

与此同时,Bun 通过不同的架构设计,避免了这些性能瓶颈。Bun 使用了 JavaScriptCore 引擎,并通过优化字符串处理路径,直接处理 8-bit 输入,避免了不必要的 UTF-16 转换。这样的设计使得 Bun 能够在 Base64 解码等操作中显著领先于 Node.js。

这则消息在开发者社区引发了广泛讨论。有开发者在 HackerNews 上分享了他们对 Bun 的使用体验,称其在速度和文档方面都表现出色,并推荐其他开发者尝试使用 Bun。尽管 Bun 仍然存在一些 API 和行为上的差异,但其性能优势和良好的开发体验使其成为 Node.js 的一个有力竞争者。

Bun 的开发团队也在不断努力,通过阅读和优化 JavaScriptCore 的代码,致力于提升 Bun 的性能和兼容性。Lemire 的分析不仅揭示了 Node.js 在性能优化上的挑战,也为 Bun 的发展提供了宝贵的参考。开发者们期待着 Node.js 和 Bun 在未来能够共同推动 JavaScript 生态系统的进步。


相關推薦

2024-04-03

macOS和Linux版本几乎完全一致。 说到速度,Bun 1.1在各个方面都有了大幅提升。在Windows上进行依赖安装时,Bun的表现尤其亮眼。以安装一个Vite React应用为例,使用Bun,安装速度比Yarn快18倍,比npm更是快了30倍之多!Bun还对Windows上

2023-10-26

分类、提取结构化数据、根据内容进行问答等。它在英语方面的训练最多,但在其他一系列常用语言方面也表现出色。Claude 还掌握了大量常用编程语言的知识。 Claude 从一开始就被训练成 helpful、honest 以及 harmless 的机器

2023-11-25

再加载JavaScript文件,以模仿tsc的行为,但更新确保了当两者都存在时,node_modules中会优先选择JavaScript文件。这一更改解决了某些npm包传送无法由转译器转译的TypeScript源文件的问题​​。 此外,Bun 1.0.14增强了构建失败时错误消

2023-10-23

Linux系统下生成的bun.lockb文件的一致性。 在Node.js兼容性方面,本版本修复了child_process的IPC通信可靠性问题,改善了With Next.js的兼容性。修复了net模块socket没有正确发送end事件的Bug。解决了napi模块中的内存泄漏问题。修复了strea

2024-02-05

题已经在1.0.26版本中得到了修复。 此外,关于错误处理方面,Bun修复了error.stack有时返回undefined的问题,并且解决了error.stack CallSite lineNumber有时为负数的问题。此外,Bun还修复了Error.prepareStackTrace默认未定义的问题,使其行为

2023-09-10

Windows操作系统提供原生支持,这意味着Windows用户无需再依赖Windows Subsystem for Linux(WSL),即可轻松体验Bun所带来的超光速开发乐趣。 Bun 1.0的发布预示着Javascript生态可能再次被颠覆和重塑。新老开发者们不妨试用Bun,体验其中

2023-09-13

人兴奋的新特性。 作者还论述了使用便捷性与安全等方面,最后结论比较中肯客观: 如果成熟度、庞大的生态以及社区支持是你最重视的,那么 Node.js 仍然是一个强有力的竞争者。 如果你寻求一个现代化、默认安全性

2024-06-01

过140个bug,涉及从Windows平台稳定性到Node.js兼容性的各个方面。以下是几个关键改进: 异常处理改进:添加了对process.on("uncaughtException")和process.on("unhandledRejection")的支持,提升了应用程序的错误处理能力。 性能优化:多项

2023-07-23

。接下来Bun有望兼容Next.js等流行框架。 在Node.js兼容性方面,Bun追加实现了事件循环中的定时器回调保证异步执行的特性,对命令行应用来说重要的标准输出流也增强了窗口尺寸查询支持。特别是在TLS网络方面,Bun改进了密钥

2023-09-24

步增强了 Bun 与 Node.js 的兼容性。 在私有 npm 仓库的支持方面,Bun 也做了大量的工作。现在,它已经与 Azure Artifacts 和 JFrog Artifactory 这样的私有 npm 仓库实现了更好的兼容性。用户可以使用 bunfig.toml 文件来配置这些私有

2023-08-08

fer.copy的bug。 修复了bun init路径问题。 修复了workspace:*依赖查找失败的bug。 增强Node.js兼容性 node:dns模块新增dns.getServers()。 node:module模块新增Module.wrap()。 多处Web API变为可写,增强与Angular兼容性。 Bun 0.7.3是一个值

2024-01-18

复了40个bug,共计获得了194个赞。更新使Bun在打包部署等方面的易用性有所提升。 引入SQLite数据库:轻松管理数据 Bun v1.0.23的一大亮点是引入了对SQLite数据库的支持。开发者现在可以直接在Bun中导入SQLite数据库,极大简化了在

2022-06-28

试中,不同版本的 JDK 性能没有太大差距。至于 JVM 性能方面,相对来说,OpenJ9 性能较好(针对 JDK 8/11 的 OpenJ9 构建),并且与最快的 OpenJDK 测试结果保持一致。而 JDK 18 与 GraalVM CE 构建相对来说则慢得多。 在稀疏矩阵乘法测

2022-09-14

中,值得用户关注的改进包括: FLAC 现在可以编码和解码 32 位采样的音频 预设 3 到 8 的压缩率有所提高,编码速度只有小幅下降,而预设 0、1 和 2 的速度变快了 在 64 位 ARMv8 上的压缩现在要快得多(例如在新的 Mac 电脑