Bun 的五月更新:性能提升与内存优化


在刚刚过去的五月,Bun团队只发布了三个小版本更新(v1.1.8、v1.1.9和v1.1.10),在不断优化性能和提升稳定性的同时,也为开发者带来了许多新的功能和改进。这些更新不仅修复了大量的bug,还对关键功能进行了显著的优化,尤其是fetch函数的内存使用效率。

主要更新内容概述

这三次更新总共修复了超过140个bug,涉及从Windows平台稳定性到Node.js兼容性的各个方面。以下是几个关键改进:

  1. 异常处理改进:添加了对process.on("uncaughtException")process.on("unhandledRejection")的支持,提升了应用程序的错误处理能力。
  2. 性能优化:多项功能性能提升显著,例如JSON.parse速度加快,atob()函数提速8倍,toString('base64url')提速5倍,fetch()函数提速并减少内存使用。
  3. 新功能添加:新增了dns.prefetch() API和expect().toBeReturned() matcher,进一步丰富了Bun的功能集。
  4. Windows改进:解决了多个Windows平台上的兼容性问题,提升了安装、路径加载等操作的可靠性。特别是bun install在未缓存的情况下速度提高了2倍,显著提升了开发者在Windows平台上的体验。
  5. Bun Shell和Bun APIs更新:添加了对[Symbol.dispose]的支持,修复了许多Bun Shell相关问题。

fetch内存使用优化

在最新的v1.1.10版本中,Bun团队重点优化了fetch函数的内存使用,使其在处理HTTP请求时更加高效。以下是具体的优化过程:

  1. Promise与Response管理:在进行HTTP请求时,Promise对象必须一直保留,直到HTTP状态码和头信息被接收。因此,在Bun v1.1.9及以前版本中,Response和其主体在整个响应过程中都被保留。这种方式虽然简单,但导致了不必要的内存占用。

  2. 弱引用与强引用结合:为了优化内存使用,Bun利用了JavaScriptCore的JSC::WeakJSC::Strong引用机制。首先在获取HTTP头信息和状态码后释放Promise的强引用,接着通过弱引用和终结器函数管理Response对象的生命周期。

  3. 引用计数机制:仅依靠弱引用并不足以完全管理Response对象的生命周期,特别是在处理流式数据时。为此,Bun引入了引用计数机制。当存在未处理的数据时,通过增加引用计数来保持Response对象;当垃圾回收器通知Response对象已被回收时,若引用计数为零,则释放相关资源。

这些优化措施大幅减少了fetch函数的内存占用,使其在处理大规模数据和高并发请求时更加高效。

结语

Bun团队在五月的三个版本更新中,通过修复大量bug、优化性能和提升稳定性,进一步增强了Bun作为现代JavaScript运行时的竞争力。特别是fetch内存优化的引入,以及bun install在Windows平台上速度的显著提升,显示了Bun团队在性能调优方面的不懈努力。期待未来Bun能继续带来更多创新和改进,助力开发者构建更加高效和可靠的应用。


相關推薦

2023-11-05

转译器和包管理器于一身的 Bun 发布了1.0.8版本。在这次更新中,Bun 团队修复了138个错误,并获得了257个来自社区的👍。这不仅体现了Bun团队对社区需求的重视,也展示了Bun作为一个开源项目的活跃和健康发展态势。 值得一提

2023-08-26

ole.log(`Listening on unix:///tmp/my-socket.sock!`); 性能优化是这次更新的另一个重要内容。在v0.8.0中,存在一个性能退化的问题,事件循环调度工作得不够好,造成读取请求体时未能及时处理微任务队列。但是在v0.8.1中,这个问题得到了

2024-05-07

个多月里,Bun 开发团队持续高频率地推出了多个小版本更新,从 1.1.1 一直到最新的 1.1.7,累计修复了上百个 bug,满足了大量用户的需求。 在这一系列的更新中,Bun 的安装依赖速度和可靠性得到了显著提升,尤其是在 Windows 平

2023-12-25

版本1.0.19为JavaScript和TypeScript运行环境带来了一系列重要更新。这个版本在性能、兼容性和可用性方面进行了显著改进,解决了多个问题,并提高了整体的开发者体验。 增强的TypeScript支持:@types/bun Bun 1.0.19中的一个突出更新是

2022-10-18

Bun 是采用 Zig 语言编写的高性能 “全家桶” JavaScript 运行时,官方称其为 "all-in-one JavaScript runtime"。 所谓 "all in one",是因为 Bun 提供了打包、转译、安装和运行 JavaScript & TypeScript 项目的功能,内置原生打包器 (n

2024-01-11

年多时间就以其独特的魅力吸引了众多开发者。这一次的更新再次印证了Bun背后的团队充满激情与执着,他们一如既往地致力于让Bun成为JavaScript开发的“瑞士军刀”。那么,这一期的更新又带来了哪些惊喜呢?让我们来一一揭晓

2023-07-23

、转译器和包管理器于一体,追求极致的运行速度。此次更新主要集中在与Node.js的兼容性提升和新功能支持上。 首先,Bun宣布与流行的前端打包工具Vite实现了初步兼容。开发者现在可以使用Bun直接运行Vite项目,享受热更新等

2024-01-18

理器多重功能的JavaScript工具,在日前迎来了1.0.23版本的更新。本次更新针对社区反馈修复了40个bug,共计获得了194个赞。更新使Bun在打包部署等方面的易用性有所提升。 引入SQLite数据库:轻松管理数据 Bun v1.0.23的一大亮点是引

2023-06-15

m 客户端,以及 fetch、WebSocket等 Web API。 最近 Bun 的更新比较频繁,6 月才过一半就发了三个新版本。 昨天发布的 Bun 0.6.9 进一步优化了性能,包括降低Bun.serve()的内存使用。据称使用 Bun 的 HTTP 服务器发送字符串可使用更

2024-04-03

者们瞩目已久的Bun 1.1版本终于正式发布了!这次大版本更新带来了一系列令人兴奋的新特性和显著的性能提升,将为开发者们提供更加顺畅、高效的开发体验。 首先,让我们为Bun 1.1支持Windows而欢呼吧!是的,你没有看错,现

2023-09-10

、测试框架等功能融合在一个工具中,提供开箱即用的高性能体验。 Bun兼容现有的Node.js生态,几乎所有Node程序可以无缝迁移。更令人振奋的是,Bun的启动速度可达Node的4倍,运行TypeScript的速度比esbuild+Node快5倍!原因在于其使

2024-02-05

更改都与Windows相关,但由于尚未正式发布,因此在此次更新日志中并未涉及。 Bun的这些更新显示了它作为一个现代JavaScript工具的持续成长和完善。对于开发者而言,这意味着更高的效率和更稳定的开发体验。随着Windows版本的

2024-06-22

ode.js 被迫将纯 ASCII 字符串转换为 UTF-16,导致了不必要的性能损失。 Lemire 的分析显示,Base64 解码过程仅占总运行时间的五分之一,而字符复制过程则占据了将近一半的时间。这种多余的转换不仅浪费了资源,还使得整个解码

2023-10-26

cks 等其他系统协同工作。Iceberg 可为所有这些系统提供高性能的表格式,同时支持完整的模式演进、数据压缩和版本回滚。Iceberg 是许多现代开放数据湖的关键组成部分。 Apache Superset 多年来,Apache Superset 一直是数据可视化领