Bun v1.3.7更新短评
Bun 1.3.7版本发布,带来多项性能优化和新功能:包括Buffer.from提速50%、async/await提速35%、保留HTTP请求头大小写、新增Bun.wrapAnsi()彩色终端输出、Markdown格式的CPU性能分析报告、原生JSON5支持、JSONL流式解析优化、S3预签名URL增强等功能。该版本继续强化Bun在性能、开发便利性和现代功能支持方面的优势,为开发者提供更高效的Ja
大家好,我是农村程序员,独立开发者,前端之虎陈随易,技术群与交朋友请在个人网站 👇 联系我 ✌️
- 个人网站 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.padStart和string.padEnd快了90%array.flat快了3倍ARM64上面性能提升
fetch 发送 HTTP 请求时保留头部大小写
await fetch('https://api.example.com/data', {
headers: {
Authorization: 'Bearer token123', // 发送 "Authorization"
'Content-Type': 'application/json', // 发送 "Content-Type"
'X-Custom-Header': 'value' // 发送 "X-Custom-Header"
}
});
const headers = new Headers();
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字符
const config = Bun.JSON5.parse(`{
// Database configuration
host: 'localhost',
port: 5432,
ssl: true,
}`);
// JSON5字符串化
const output = Bun.JSON5.stringify({ name: 'app', version: 1 });
// 直接导入JSON5文件
import settings from './config.json5';
JSON5 是 JSON 的超集,增加了开发者友好的特性,如注释、尾随逗号、未加引号的键、单引号字符串和十六进制数字。
它被 Chromium、Next.js、Babel 和 WebStorm 等主要项目使用。
JSON5 特别适用于配置文件,其中注释和尾随逗号可以提高可读性和可维护性。
Bun.JSONL 用于流式解析 JSONL
const results = Bun.JSONL.parse('{"name":"Alice"}\n{"name":"Bob"}\n');
// [{ name: "Alice" }, { name: "Bob" }]
// Uint8Array 也能正常工作 (UTF-8 BOM 自动忽略)
const buffer = new TextEncoder().encode('{"a":1}\n{"b":2}\n');
const records = Bun.JSONL.parse(buffer);
// [{ a: 1 }, { b: 2 }]
Bun 现在内置支持解析 JSONL(换行符分隔的 JSON)。
该解析器使用 JavaScriptCore 的优化 JSON 解析器以 C++实现,为完整输入和流式使用场景提供快速解析。
我能想到的一个场景就是,json格式的日志分析,应该会很方便。
const chunk = '{"id":1}\n{"id":2}\n{"id":3';
const result = Bun.JSONL.parseChunk(chunk);
result.values; // [{ id: 1 }, { id: 2 }]
result.read; // 17 — characters consumed
result.done; // false — incomplete value remains
result.error; // null — no parse error
在流式场景中, parseChunk 尽可能解析多个完整值,并返回解析的进度——当从网络流逐步接收数据时很有用。
S3 presign() 现在支持 contentDisposition 和 type 选项
import { S3Client } from 'bun';
const s3 = new S3Client({
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'
});
const file = s3.file('report.pdf');
const url = 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.json
const fs = require('fs');
const pkg = JSON.parse(fs.readFileSync('package.json', 'utf8'));
delete pkg.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
import inspector from 'node:inspector/promises';
const session = new inspector.Session();
session.connect();
await session.post('Profiler.enable');
await session.post('Profiler.start');
const { profile } = await session.post('Profiler.stop');
await session.post('Profiler.disable');
Bun 现在通过 Chrome DevTools Protocol 实现了 node:inspector Profiler API,用于 CPU 分析。
增加最大 HTTP 头数量
请求和响应中允许的最大 HTTP 头数量已从 100 增加到 200。
这提高了与发送大量头的服务的兼容性,例如具有广泛元数据的 API 或附加多个转发头的代理。
WebSocket URL 凭证支持
// 凭证会自动转发
const ws = new WebSocket('ws://username:password@example.com/socket');
// 用户提供的授权标头具有优先权
const ws2 = new WebSocket('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 头部发送。
以上就是本次更新内容,我是编程记者陈随易,给大家分享行业热点,代码技术,编程资讯等,欢迎关注~
更多推荐


所有评论(0)