百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Bun v0.6.9 发布!_bud最新版本下载3.16

haoteby 2025-08-26 17:21 2 浏览

家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!

今天给大家带来的主题是 Bun v0.6.9 版本的发布,带着大家看看在该版本中 Bun 运行时都带来了那些核心改动。话不多说,直接进入正题!

前言

阿特伍德定律(Atwood's Law)指出,任何可以用 JavaScript 编写的应用程序最终都将用 Javascript 编写。 这个预言是在 Node.js 诞生前两年提出的,结果证明也是非常正确的。 在浏览器上下文之外运行 JavaScript 环境的到来,鼓励开发者开始用纯 JS 编写服务器、CLI,甚至机器学习算法模型。

尽管 Node.js 是在 Server端运行 JavaScript 的事实标准,但并不是每个人都对它非常满意,所以在前端生态才涌现了其他优秀的 JS Runtime,比如 :Deno 、Bun。而 Bun 从一出生就引起了非常大的轰动,号称是最快的运行时。关于 JS 运行时的发展我也一直比较关注,我在头条开了一个合集重点关注前端不同 JavaScript 运行时的发展、新特性。下面是已经发布的部分文章传送门,更多文章可以在我的主页阅读。

本文将尝试解释 Bun v0.6.9 发布带来的诸多改动,话不多说,直接开始!

1.Bun 版本概览

Bun 是采用 Zig 语言编写的高性能 “全家桶” JavaScript 运行时,官方称其为 "all-in-one JavaScript runtime"。

所谓 "all in one",是因为 Bun 运行时提供了打包、转译、安装和运行 JavaScript & TypeScript 项目的功能,内置原生打包器 (native bundler)、转译器、task runner、npm 客户端,以及 fetch、WebSocket等 Web API。

最近 Bun 的更新也是非常频繁,6 月才过一半就发了三个新版本,这引起了我足够的好奇,为什么这么急着发布 Bun v0.6.9?首先,大家一起回顾下 Bun 不同版本功能:

  • v0.6.0 - 介绍 bun build,Bun 的新 JavaScript 打包器。
  • v0.6.2 - 性能提升:JSON.parse 快 20%,代理(Proxy)和参数快 2 倍。
  • v0.6.3 - 实施了 node:vm,对 node:http 和 node:tls 进行了大量修复。
  • v0.6.4 - 实施了 require.cache、process.env.TZ 和快 80% 的 bun test。
  • v0.6.5 - 对 CommonJS 模块的本地支持(以前,Bun 将 CJS 转换为 ESM),
  • v0.6.6 - bun test 改进,包括 Github Actions 支持、test.only()、test.if()、describe.skip() 和 15 个以上的 expect() 匹配器; 还使用 fetch() 流式传输文件上传。
  • v0.6.7 - Node.js 兼容性改进以解锁 Discord.js、Prisma 和 Puppeteer
  • v0.6.8 - Bun.password,bun test 中的函数 mock,以及一个 toMatchObject 期望匹配器。 加上 Bun.serve() 中的实验性检查器模式。

根据官方表示,随着 Bun v0.6.9 的发布,该版本全面减少了 Bun 的内存使用,并修复了打包器/转译器、CommonJS 模块加载、bun run 和 bun install 中的众多错误。

可以通过如下命令快速安装 bun:

npm install -g bun
// npm
curl -fsSL https://bun.sh/install | bash
// curl
brew tap oven-sh/bun
brew install bun
// brew
docker pull oven/bun
docker run --rm --init --ulimit memlock=-1:-1 oven/bun
// docker

如果是升级 bun,直接使用下面命令即可:

bun upgrade

2.Bun v0.6.9 新特性

2.1 Bun.serve() 使用更少的内存来发送字符串

Bun v0.6.9 现在支持 Bun.serve() 中的零拷贝字符串响应主体(Response)。

零拷贝是指计算机执行IO操作时,CPU不需要将数据从一个存储区域复制到另一个存储区域,进而减少上下文切换以及CPU的拷贝时间,是一种IO操作优化技术。

Bun 官方团队还将此优化应用于 Bun.serve() 之外的 Response ,以下代码会克隆 text 两次:

const text = await Bun.file("file.txt").text();
// Copy #1
const response = new Response(text);
// Copy #2
await response.text();

随着 Bun v0.6.9 的发布,Bun 现在不会复制,从而节省内存开销。根据 Bun 官方团队开发者@jarredsumner 的论述,在下一个版本的 Bun 中,使用 Bun 的 HTTP 服务器发送字符串将使用更少的内存。比如用 12 MB 的字符串响应 1000 个请求后,Bun、Deno、Node.js 将会有不同的性能表现,而 Bun 可以遥遥领先其他运行时方案:

  • Bun: 60 MB ram
  • Deno: 425 MB ram
  • Node: 1414 MB ram

2.2 bun install 冷启动使用的内存减少 50%

随着 Bun v0.6.9 的发布,在 bun install 中可以释放更多内存,将 cold install 的内存使用量减少 50%。同时,根据 Bun 官方团队开发者@jarredsumner 的论述,在下一个版本的 Bun 中 bun install(冷)使用的内存可以减少 2 倍

2.3 在 Bun 的运行时导入模块使用更少的内存

在 Bun v0.6.9 版本中,修复了在 Bun 的运行时中导入模块时发生的 Bun 中的一些内存泄漏,并改进了与 JavaScriptCore 的绑定以进行源代码管理。

2.4 非 ascii 文件名

以前,Bun 在导入具有非 ascii 文件名的文件时会抛出错误。

bun run .js
// error: FileNotFound reading "/Users/jarred/Desktop/d.js"

此错误是由打印错误和读取导入标识符名称时 Bun 的 JavaScriptCore 绑定中的错误引起的,在 Bun v0.6.9 版本中修复了这个错误。

2.5 bun test 中的 mock 修正

mockResolvedValue 现在已在 bun test 中修复。以前,mockResolvedValue 在 bun test 中似乎什么都不做。 要使用 mockResolvedValue:

import { mock, test, expect } from "bun:test";

test("hey", async () => {
  const fn = mock.mockResolvedValue(1);

  expect(fn()).toBeInstanceOf(Promise);

  const value = await fn();

  expect(value).toBe(1); // 1
});

返回的 mock 对象缺少 .bind、.apply、.call、.name 和 .length 函数,在 Bun v0.6.9 版本中已得到修复。同时 mock 函数的 .name 会自动从原始函数复制过来。

import { mock, test, expect } from "bun:test";

test("hey", async () => {
  const hey = mock(function yo() {
    return 42;
  });

  expect(hey.name).toBe("yo");
});

2.6 CommonJS require() 中的崩溃已修复

Bun v0.6.9 版本版本修复了导入许多 CommonJS 文件并在文件不再使用后运行垃圾收集器时可能发生的崩溃:

import "lodash/omit.js";
import "lodash/findIndex.js";
import "discord.js";

Bun.gc(true);

这是 CommonJS 模块加载器中的一个错误,无法正确阻止函数被垃圾收集。

2.7 node:crypto 中的内存泄漏已修复

Bun v0.6.9 版本修复了 node:crypto 中的内存泄漏,在以前的 Bun 版本中以下代码每次调用将泄漏大约 192 个字节。

const crypto = require("crypto");

function sha256(buf) {
  return crypto.createHash("sha256").update(buf).digest();
}

async function main() {
  for (var i = 1000000; i >= 0; i--) {
    const buf = Buffer.alloc(2046);
    const hash = sha256(buf);
    if (i % 1000 === 0) {
      await new Promise((r) => setTimeout(r, 20));
      global.gc ? global.gc() : Bun?.gc(true);
    }
  }
}

main();

修正之后的数据如下:

下面是修正之前的数据:

下面是 Node.js 的数据:

3.本文总结

本文主要和大家介绍 Bun v0.6.9 版本发布,带着大家看看在该版本中 Bun 运行时都带来了那些核心改动。相信通过本文的阅读,大家对 Bun v0.6.9 会有一个初步的了解。不过,从我个人的感觉上来看,在这个版本中 Bun v0.6.9 主要集中在永恒的性能优化、存量问题的修复上,而且后者占据了很大的比例,不得不让人感叹 Bun 虽然很优秀,但是问题也很多!

因为篇幅有限,关于 Bun 的更多用法和特性文章并没有过多展开,如果有兴趣,可以在我的主页继续阅读,同时文末的参考资料提供了大量优秀文档以供学习。最后,欢迎大家点赞、评论、转发、收藏,您的支持是我不断创作的动力。

参考资料

https://bun.sh/blog/bun-v0.6.9#bugfixes-to-mocks-in-bun-test

https://www.oschina.net/news/245231/bun-v0-6-9-released

相关推荐

Chrome OS 41 用 Freon 取代 X11_chrome os atom

在刚发布的ChromeOS41里,除了常规的Wi-Fi稳定性提升(几乎所有系统的changelog里都会包含这一项)、访客模式壁纸等之外,还存在底层改变。这一更新中Google移除...

苹果iPad Pro再曝光 有望今年六月发布

自进入2015年以后,有关大屏iPad的消息便一直不绝于耳,之前就有不少媒体猜想这款全新的平板电脑将会在三月发布,不过可惜的是我么只在那次发布会上看到了MacBookPro。近日@Ubuntu团队便...

雷卯针对香橙派Orange Pi 5 Max开发板防雷防静电方案

一、应用场景高端平板、边缘计算、人工智能、云计算、AR/VR、智能安防、智能家居、Linux桌面计算机、Linux网络服务器、Android平板、Android游戏机...

Ubuntu Server无法更新问题解决_ubuntu server not found

上周老家的一台运行UbuntuServer的盒子无法连接上了,中秋这两天回来打开,顺手更新一下发现更新报错。提示`E:Releasefileforhttps://mirrors.aliyun...

虚幻引擎5正式版发布:古墓丽影&巫师新作采用、新一代实时渲染

机器之心报道编辑:杜伟、陈萍虚幻引擎5的目标是「助力各种规模的团队在视觉领域和互动领域挑战极限,施展无限潜能」。...

AMD Milan-X双路霄龙7773X平台基准测试曝光 CPU缓存总量超1.5GB

OpenBenchmarking基准测试数据库刚刚曝光了AMDMilan-X双路霄龙7773X平台的跑分成绩,虽然很快就被撤下,但我们还是知晓了高达1.6GB的总CPU缓存。早些时...

ROS机器人建模_ros机器人硬件搭建

...

全网最新的Dify(1.7.2)私有化离线部署教程(ARM架构)

Hello,大家好!近期工作中有涉及到Dify私有化离线部署,特别是针对于一些国产设备。因此特别整理了该教程,实测有效!有需要的小伙伴可以参考下!本文主要针对Dify1.7.2最新版本+国产操作系...

在ubuntu下新建asp.net core项目_创建ubuntu

本文一步步讲述在ubuntu下用visualstudiocode创建asp.netcore项目的过程。step1:环境操作系统:virtualbox下安装的lubuntu。请不要开启“硬件...

在晶晨A311D2处理器上进行Linux硬件视频编码
在晶晨A311D2处理器上进行Linux硬件视频编码

在KhadasVIM4AmogicA311D2SBC上,我更多的时间是在使用Ubuntu22.04。它的总体性能还不错,只不过缺少3D图形加速和硬件视...

2025-08-26 17:22 haoteby

Nacos3.0重磅来袭!全面拥抱AI,单机及集群模式安装详细教程!

之前和大家分享过JDK17的多版本管理及详细安装过程,然后在项目升级完jdk17后又发现之前的注册和配置中心nacos又用不了,原因是之前的nacos1.3版本的,版本太老了,已经无法适配当前新的JD...

电影质量级渲染来了!虚幻引擎5.3正式发布:已开放下载

快科技9月8日消息,日前,Unrealengine正式发布了虚幻引擎5.3,带来了大量全方位的改进。...

2025如何选购办公电脑?极摩客mini主机英特尔系列选购指南

当下,迷你主机的性能越来越强,品类也越来越多。但是CPU是不变的,基本都是AMD和英特尔的。有一个小伙伴在评论区提问,我应该如何在众多机器中选购一台符合自己的迷你主机呢?那今天我们优先把我们的系列,分...

ubuntu 20.04+RTX4060 Ti+CUDA 11.7+cudnn

ububtu添加国内源sudocp/etc/apt/sources.list/etc/apt/sources.list.backupsudovim/etc/apt/sources.lis...

Linux Mint 18将重新基于Ubuntu 16.04 带来更好硬件支持

项目负责人ClementLefebvre在本月6日披露了关于LinuxMint18“Sarah”操作系统的大量信息,包括带来全新扁平化体验的Mint-Y主题。而现在,这款将于年底之前上线的操作...