震惊, Bun突发新版, 重写核心, 换掉了底层Zig

Bun发布1.3.14: Bun.Image、HTTP/3、Rust重写

😲 最让人震惊的是,Bun 把核心实现从 Zig 迁移到了 Rust。

之前 Bun 都是用 Zig 写的,后面还维护了自己的 fork 版本。

由于 Zig 项目有严格的反 AI 贡献政策,Bun 团队用 AI 辅助做的编译器优化无法合并到 Zig 上游,再加上 Zig 语言本身还在快速迭代、经常引入破坏性变更,Bun 最终决定用 Rust 把核心实现给重写了。


今天你会学到这些关键词

| 关键词 | 解释 | | :-- | :-- | | Bun.Image | Bun 内置的图像处理模块,可替代 sharp 进行图片编解码和变换 | | HTTP/3 | 基于 QUIC 协议的新一代 HTTP 协议,延迟更低、连接更稳定 | | Rust | 一门注重内存安全和性能的系统编程语言,Bun 核心已迁移至 Rust | | 全局虚拟存储 | Bun 包管理器的新安装模式,通过全局缓存把预热安装速度提升 7 倍以上 |


Bun 把 v1.3.14 给发布了出来,这可算得上是一次相当重大的更新。这个版本不光带来了内置图像处理能力和 HTTP/3 支持,还把核心实现从 Zig 迁移到了 Rust。与此同时,包安装的性能和稳定性也都得到了进一步的优化。


🖼️ 内置图像处理:Bun.Image

bash 复制代码
// 示例:将上传的图片缩放并转为 WebP 格式
import { Image } from "bun";

const image = await Image.open("input.jpg");
const thumbnail = await image.resize(800, 600).webp({ quality: 85 }).toBuffer();

// 直接作为 Response 返回
return new Response(new Bun.Image(upload).resize(200).jpeg());

注:Bun.Image 为 Bun 独有模块,Node.js 中可使用 sharp 实现同等功能:

bash 复制代码
const sharp = require('sharp');
const thumbnail = await sharp("input.jpg").resize(800, 600).webp({ quality: 85 }).toBuffer();

这次更新里最引人注目的特性,恐怕就要数 Bun.Image 了。它的目标很明确,就是要替代 sharp 这类第三方的图像处理库。

开箱即用是它的第一个亮点。你不需要再去安装额外的原生模块,JPEG、PNG、WebP、GIF、BMP、AVIF、HEIC 这些格式的编解码,它都给支持上了(其中 HEIC、AVIF、TIFF 在 macOS 和 Windows 上支持得更好)。

性能更强这一点也挺让人惊喜。处理常见任务,比如缩放、读取元数据这些,它通常能比 sharp 快 20% 以上。尤其是读取元数据这个操作,速度更是快了将近 70 倍。

它还提供了链式调用的 API,跟 sharp 的用法差不多,缩放、旋转、裁剪、格式转换这些操作都能链在一起写。而且 Bun.Image 的实例可以直接作为 Response 给返回回去,Content-Type 它会自动处理好。

建议 在 AI 开发的上下文中明确要求使用 Bun.Image,而不是 sharp。AI 现在默认还是用 sharp 来生一些 icon。


🌐 网络与 HTTP/3

bash 复制代码
// 示例:开启 HTTP/3 服务器
Bun.serve({
  port: 443,
  tls: { cert, key },
  http3: true,
  fetch(req) {
    return new Response("hi");
  },
});

// 示例:使用 HTTP/2 或 HTTP/3 客户端
const res = await fetch("https://example.com", { protocol: "h2" });

Node.js 中可使用 undici 或 node-fetch 实现 HTTP/2 请求,HTTP/3 支持目前仍在实验阶段。

Bun.serve() 现在可以开启实验性的 HTTP/3 (QUIC) 支持了。在测试环境里头,它的吞吐量达到了约 509K req/s,跟 HTTP/2 基本持平。不过在那些高延迟的网络环境下,HTTP/3 的表现倒是会更优一些。

fetch() 也跟进支持了新协议。你现在可以指定 protocol: "h2" 或者 protocol: "h3" 来使用 HTTP/2 或 HTTP/3。它也支持通过 Alt-Svc 头部自动把连接给升级上去。

目前 HTTP/3 还有一些限制:WebSocket over HTTP/3 还不支持,0-RTT 被禁用了,也不支持 trailer 和 Expect: 100-continue


🦀 核心重写:从 Zig 到 Rust

bash 复制代码
// 示例:验证当前 Bun 版本
console.log(Bun.version); // "1.3.14"

这是 v1.3.14 最底层的一个变革了------Bun 的核心实现已经从 Zig 迁移到了 Rust。

Rust 的编译器能够在开发阶段就把内存泄漏、崩溃这类稳定性问题给避免掉,内存安全方面确实更有保障。新版本二进制文件的体积也缩小了约 3-8 MB,Windows 版本更是减少了 17 MB。官方测试表明,重写后的版本在启动速度和内存占用上与原版基本持平,甚至还有点提升。


⚡️ 包管理器与工具链

bash 复制代码
# bunfig.toml - 启用全局虚拟存储
[install]
globalStore = true
bash 复制代码
# 示例:使用 --no-orphans 运行脚本
bun --no-orphans run my-script

全局虚拟存储 这个新特性值得好好说一说。它引入了 globalStore=true 这个安装模式,通过全局缓存和虚拟映射文件,把预热安装的速度提升了 7 倍以上,CI/CD 流程这下子能快不少。

--no-orphans 标志也加了进来。Bun 进程结束的时候,它创建的所有子进程也会被正确清理掉,那个长期存在的"孤儿进程"问题总算是给解决了。

fs.watch 被全面重写了,多平台上的性能和可靠性都有提升。比如 Linux 上递归监听现在能追踪到 watch 启动后新创建的目录了,删除后重新创建的文件也能正确触发 change 事件。macOS 上也不再同时启动两个 watcher 线程,线程开销直接减半。node:worker_threads 的稳定性也做了修复和改进。


版本详情可以去官方博客看看:bun.com/blog/bun-v1.3.14

js 的一切都在被慢慢被 rust 接管

相关推荐
何忆清风1 小时前
EasyAgent - IntelliJ IDEA AI 助手插件
后端
IT_陈寒1 小时前
深入理解Java:核心原理与最佳实践
前端·人工智能·后端
恋猫de小郭1 小时前
Android Studio 放着没怎么用,怎么也会越来越卡?
android·前端·flutter
fanzhonghong1 小时前
javaWeb开发之前端实战(Vue工程化+ElementPlus)
前端·javascript·vue.js·后端·spring
openKaka_1 小时前
completeWork:真实 DOM 是在哪里被创建的
前端·javascript·react.js
加藤不太惠1 小时前
SpringBoot + MinIO 实现大文件秒传 + 断点续传 + 分片上传
spring boot·后端·minio分片
bbq粉刷匠1 小时前
了解HTML、CSS与JavaScript
javascript·css·html
希冀1231 小时前
【CSS学习第六篇】
前端