news 2026/4/18 12:30:00

Bun v1.3.7更新短评

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Bun v1.3.7更新短评

大家好,我是农村程序员,独立开发者,前端之虎陈随易,技术群与交朋友请在个人网站 👇 联系我 ✌️

  • 个人网站 1️⃣:https://chensuiyi.me
  • 个人网站 2️⃣:https://me.yicode.tech

我的所有文章均为古法手写,无 AI 添加剂,请放心食用,如果你觉得本文有用,一键三连 (点赞评论转发),就是对我最大的支持~


距离v1.3.6发布应该不到半个月吧,v1.3.7已经发布了,Bun的发版节奏真是比火箭还快。

发版快就算了,更牛的是,每次都能带来一些亮眼的功能,本文就来简单盘点一下。

快,快,快

性能是Bun的主打方向,这次也不例外,带来了大量的性能提升。

  • Buffer.from快了50%
  • JavaScriptCore升级到最新版
  • async/await快了35%
  • Array.from快了2倍
  • string.padStartstring.padEnd快了90%
  • array.flat快了3倍
  • ARM64上面性能提升

fetch 发送 HTTP 请求时保留头部大小写

awaitfetch('https://api.example.com/data',{headers:{Authorization:'Bearer token123',// 发送 "Authorization"'Content-Type':'application/json',// 发送 "Content-Type"'X-Custom-Header':'value'// 发送 "X-Custom-Header"}});constheaders=newHeaders();headers.set('Content-Type','text/plain');// 发送 "Content-Type"

这个我挺喜欢的,编程就应该要具备确定性,虽然http协议不区分头部属性的大小写,但你明明传了Authorization,服务端接受却变成了authorization,还是怪别扭的。

新增 Bun.wrapAnsi()

Bun已经内置了npm包wrap-ansi的实现,这是在终端显示转义字符,彩色输出的方法。

我之前写过的一篇文章盘点Bun内置了哪些npm包功能现在又能新增一个内置可替换的npm包了。

我特别喜欢这种全包干,为啥呢?因为很多东西本就简单,几乎万年不变的,内置到运行时里面,方便又快捷。

同时呢,内置实现一般性能更高,比如Bun.wrapAnsi就比wrap-ansi快了33倍-88倍,也减少了很多找库,找包的时间,非常Nice。

Markdown CPU Profile 输出

# 仅生成 Markdown 配置文件bun --cpu-prof-md script.js# 生成 Chrome DevTools JSON 和 Markdown 格式bun --cpu-prof --cpu-prof-md script.js# 生成与 V8 兼容的堆快照(在 Chrome 开发者工具中打开)bun --heap-prof script.js# 生成 Markdown 堆配置文件(用于使用 grep/sed/awk 进行 CLI 分析)bun --heap-prof-md script.js# 指定输出位置bun --heap-prof --heap-prof-dir ./profiles --heap-prof-name my-snapshot.heapsnapshot script.js

重磅功能,老铁们,AI友好的性能分析,调优,直接得到一个性能方面的md文档,扔给AI,项目性能问题,内存泄漏,一清二楚,估计这个功能其他几个运行时,包括其他语言也会很快跟上。

原生 JSON5 支持

// 解析JSON5字符constconfig=Bun.JSON5.parse(`{ // Database configuration host: 'localhost', port: 5432, ssl: true, }`);// JSON5字符串化constoutput=Bun.JSON5.stringify({name:'app',version:1});// 直接导入JSON5文件importsettingsfrom'./config.json5';

JSON5 是 JSON 的超集,增加了开发者友好的特性,如注释、尾随逗号、未加引号的键、单引号字符串和十六进制数字。

它被 Chromium、Next.js、Babel 和 WebStorm 等主要项目使用。

JSON5 特别适用于配置文件,其中注释和尾随逗号可以提高可读性和可维护性。

Bun.JSONL 用于流式解析 JSONL

constresults=Bun.JSONL.parse('{"name":"Alice"}\n{"name":"Bob"}\n');// [{ name: "Alice" }, { name: "Bob" }]// Uint8Array 也能正常工作 (UTF-8 BOM 自动忽略)constbuffer=newTextEncoder().encode('{"a":1}\n{"b":2}\n');constrecords=Bun.JSONL.parse(buffer);// [{ a: 1 }, { b: 2 }]

Bun 现在内置支持解析 JSONL(换行符分隔的 JSON)。

该解析器使用 JavaScriptCore 的优化 JSON 解析器以 C++实现,为完整输入和流式使用场景提供快速解析。

我能想到的一个场景就是,json格式的日志分析,应该会很方便。

constchunk='{"id":1}\n{"id":2}\n{"id":3';constresult=Bun.JSONL.parseChunk(chunk);result.values;// [{ id: 1 }, { id: 2 }]result.read;// 17 — characters consumedresult.done;// false — incomplete value remainsresult.error;// null — no parse error

在流式场景中, parseChunk 尽可能解析多个完整值,并返回解析的进度——当从网络流逐步接收数据时很有用。

S3 presign() 现在支持 contentDisposition 和 type 选项

import{S3Client}from'bun';consts3=newS3Client({region:'us-east-1',endpoint:'https://s3.us-east-1.amazonaws.com',accessKeyId:process.env.AWS_ACCESS_KEY_ID,secretAccessKey:process.env.AWS_SECRET_ACCESS_KEY,bucket:'my-bucket'});constfile=s3.file('report.pdf');consturl=file.presign({method:'GET',expiresIn:900,contentDisposition:'attachment; filename="quarterly-report.pdf"',type:'application/octet-stream'});

修复了一个问题,即在生成预签名 URL 时 S3File.presign() 会忽略 contentDisposition 和 type 选项。

这些选项现在被正确地包含为 response-content-disposition 和 response-content-type 查询参数。

这在你希望浏览器将文件作为附件下载而不是内联显示时特别有用。

bun pm pack 现在会尊重来自生命周期脚本对 package.json 的更改

// package.json{"name":"my-package","version":"1.0.0","scripts":{"prepack":"node prepack.js"},"description":"Original description","devDependencies":{/* ... */}}// prepack.js - 打包之前改变package.jsonconstfs=require('fs');constpkg=JSON.parse(fs.readFileSync('package.json','utf8'));deletepkg.devDependencies;pkg.description='Production build';fs.writeFileSync('package.json',JSON.stringify(pkg,null,2));

bun pm pack 在运行 prepack 、 prepare 和 prepublishOnly 脚本后重新读取 package.json ,确保这些脚本所做的任何修改都包含在 tarball 中。

node:inspector 分析器 API

importinspectorfrom'node:inspector/promises';constsession=newinspector.Session();session.connect();awaitsession.post('Profiler.enable');awaitsession.post('Profiler.start');const{profile}=awaitsession.post('Profiler.stop');awaitsession.post('Profiler.disable');

Bun 现在通过 Chrome DevTools Protocol 实现了 node:inspector Profiler API,用于 CPU 分析。

增加最大 HTTP 头数量

请求和响应中允许的最大 HTTP 头数量已从 100 增加到 200。

这提高了与发送大量头的服务的兼容性,例如具有广泛元数据的 API 或附加多个转发头的代理。

WebSocket URL 凭证支持

// 凭证会自动转发constws=newWebSocket('ws://username:password@example.com/socket');// 用户提供的授权标头具有优先权constws2=newWebSocket('ws://user:pass@example.com/socket',{headers:{Authorization:'Bearer custom-token'// 这将替换默认转发的 Authorization}});

WebSocket 连接现在正确地将 URL 中嵌入的凭证作为基本授权头转发,与 Node.js 行为一致。

当连接到一个包含凭证的 WebSocket URL(如 ws://user:pass@host )时,Bun 现在会自动提取凭证,并在 WebSocket 升级握手过程中将其作为正确编码的 Authorization: Basic 头部发送。


以上就是本次更新内容,我是编程记者陈随易,给大家分享行业热点,代码技术,编程资讯等,欢迎关注~

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 8:29:11

VS Code 和Visual Studio:简单易懂的区别

一句话概括: VS Code 是轻量级的文本编辑器(像高级记事本),Visual Studio 是重型开发套件(像工厂生产线)。 🎯 给小白的最简单理解: VS Code(推荐给你) 就像…

作者头像 李华
网站建设 2026/4/18 8:50:49

基于SpringBoot+Vue+web的学生学业质量分析系统(源码+lw+部署文档+讲解等)

课题介绍 本课题旨在设计实现基于SpringBootVueWeb的学生学业质量分析系统,聚焦学校教师、教务管理人员、学生及家长对学业数据研判、薄弱环节定位、成长趋势追踪及个性化指导核心需求,破解传统学业分析依赖人工统计、维度单一、反馈滞后、数据碎片化等痛…

作者头像 李华
网站建设 2026/4/18 5:42:25

破解信创改造痛点:国产DevOps平台选型的核心逻辑与实践路径

在数字化转型与信创替代双重浪潮下,企业IT架构面临全面重构。DevOps作为连接研发与业务价值交付的关键枢纽,其平台选型直接决定信创改造的成效与企业数字化转型的深度。然而,当前企业信创改造中普遍存在工具链割裂、合规要求严苛、新旧架构适…

作者头像 李华
网站建设 2026/4/18 1:06:09

开发基于大模型的金融专业考试题目生成器

开发基于大模型的金融专业考试题目生成器 关键词:大模型、金融专业考试题目生成器、自然语言处理、金融知识、考试系统 摘要:本文围绕开发基于大模型的金融专业考试题目生成器展开。详细阐述了其开发的背景、核心概念、算法原理、数学模型等内容。通过使用Python代码给出了具…

作者头像 李华
网站建设 2026/4/17 13:35:55

大数据时代的数据中台架构设计与实践

大数据时代的数据中台架构设计与实践关键词:数据中台、架构设计、数据治理、业务赋能、大数据技术栈摘要:在企业数字化转型的浪潮中,数据中台已从“概念热词”变为“企业刚需”。本文以“中央厨房”为类比,用通俗易懂的语言拆解数…

作者头像 李华