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

2024年 6月 21日 47.4k 0

在最近的一则推文中,计算机科学家 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 生态系统的进步。

相关文章

塑造我成为 CTO 之路的“秘诀”
“人工智能教母”的公司估值达 10 亿美金
教授吐槽:985 高校成高级蓝翔!研究生基本废了,只为房子、票子……
Windows 蓝屏中断提醒开发者:Rust 比 C/C++ 更好
Claude 3.5 Sonnet 在伽利略幻觉指数中名列前茅
上海新增 11 款已完成登记生成式 AI 服务

发布评论