您现在的位置是:首页 > 文章详情

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

日期:2024-05-31点击:200

在刚刚过去的五月,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能继续带来更多创新和改进,助力开发者构建更加高效和可靠的应用。

原文链接:https://www.oschina.net/news/295130
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章