Anthropic 为 Bun 1.1.13 修复内存问题,回应开发者泄漏投诉

Bun JavaScript 运行时与工具包发布了新版本,带来了增强的测试支持和改进的内存管理。内存管理的改进对开发者而言至关重要,此前已有多名开发者反映内存泄漏在生产环境中造成了严重问题。

Bun 于 2025 年 12 月被 Anthropic 收购,它既是一款用于将 TypeScript 或 JavaScript 应用编译至浏览器端的打包工具,也是一款服务器端代码运行时。它与历史悠久的 Node.js(最新版本为 25.9)以及由 Node.js 创始人 Ryan Dahl 开发的 Deno 形成竞争关系。

1.1.13 版本的新功能

此版本对测试运行器进行了多项改进,旨在与广受欢迎的 Jest 测试框架保持兼容。新版本引入了隔离标志(isolate flag),可在全新环境中运行每个测试;并行标志(parallel flag)则支持跨用户自定义数量的进程并发运行测试。此外,还新增了分片标志(shard flag),可将测试拆分至多个测试运行器,语法与 Jest 保持一致。

在压缩性能方面,Bun 现已采用 zlib-ng(下一代 zlib),这是 zlib 的优化分支版本,在无需修改任何代码的情况下,压缩速度最高可提升五倍。

内存管理改进

然而,此次版本中最受关注的,或许是对内存问题的专项处理。Bun 的发明者 Jared Sumner 表示,运行时的内存使用量降低了 5%,升级后的内存分配器配合 Libpas 清道夫(scavenger)的实现,能够更快地将未使用的内存归还给操作系统。据 Sumner 介绍,这两项改动"降低了基础内存占用,并修复了一类导致长期运行进程挂起和崩溃的问题"。

这一改进意义重大,因为 Bun 内存占用过高一直是开发者的普遍投诉。

一位 Reddit 用户表示:"Bun 在生产环境中还不够稳定,速度也不比 Node 快。"他将原因归结为内存泄漏。将 Bun 作为工具包使用的开发者可能感受不到这一问题,但将其用作生产运行时则意味着"长时间运行的工作负载会放大那些短期基准测试中从未暴露的问题"。

OpenCode 创始人 Jay V 在 X 平台上表示,他的产品是一款开源 AI 智能体,他们正在"从 Bun 和 Tauri 迁移至 Node 和 Electron"。Tauri 是一个用于跨平台桌面应用的 Rust 框架。他补充道:"Bun 不适合用户量大的应用,应该坚持使用 Node。"他列举的理由包括内存问题、崩溃以及"糟糕的 Windows 支持"。

尽管如此,Bun 凭借其速度优势和丰富的功能集仍备受好评,并非所有部署都存在问题。"自从切换到 Bun 之后,我非常满意,它速度快,标准库也很出色。"一位用户如此评价。

然而,投诉数量已足以提醒开发者在将 Bun 用于长期运行进程时保持谨慎。已有报告指出,垃圾回收(GC)在某些函数执行时似乎出现失效,最终导致内存溢出(OOM)错误。

自 2023 年 9 月首个正式版本发布以来,Bun 的开发进展极为迅速。部分用户希望放缓新功能的推出节奏,将更多精力投入到稳定性优化上。

Q&A

Q1:Bun 1.1.13 版本在内存管理方面做了哪些具体改进?

A:Bun 1.1.13 通过两项关键改动优化内存管理:一是升级了内存分配器;二是引入了 Libpas 清道夫机制,能够更快地将未使用内存归还给操作系统。这两项改动使运行时基础内存占用降低了 5%,并修复了一类导致长期运行进程挂起和崩溃的问题,对在生产环境中使用 Bun 的开发者来说具有重要意义。

Q2:Bun 适合在生产环境中长期运行使用吗?

A:目前仍需谨慎评估。部分开发者反映 Bun 存在内存泄漏、崩溃及 Windows 支持较差等问题,在长期运行的生产工作负载下表现尤为明显。OpenCode 等团队已因此从 Bun 迁移回 Node.js。不过,也有开发者对 Bun 的速度和标准库给予好评,短期或工具链场景下的使用体验相对较好。

Q3:Bun 1.1.13 的测试功能有哪些新变化?

A:Bun 1.1.13 对测试运行器进行了多项更新,新增了三个标志:isolate flag 可让每个测试在独立环境中运行;parallel flag 支持跨多个进程并发执行测试;shard flag 则允许将测试拆分至多个运行器,语法与主流测试框架 Jest 保持一致,进一步提升了与 Jest 的兼容性。

作者声明:作品含AI生成内容
举报/反馈
分享到: 微博 QQ 空间
对本文内容有合作意向?
我们将在 1 个工作日内与您联系
留言咨询