
作者 | Daniel Curtis
譯者 | 平川
Bun (一個(gè)快速全能的 JavaScript 運(yùn)行環(huán)境)現(xiàn)已發(fā)布 1.3 版本。此次更新堪稱迄今為止最大的一個(gè)版本,不僅實(shí)現(xiàn)了全棧開(kāi)發(fā)能力,還推出了統(tǒng)一的數(shù)據(jù)庫(kù) API,并顯著提升了運(yùn)行時(shí)的整體性能。
Bun 1.3 引入了零配置前端開(kāi)發(fā)模式,內(nèi)置模塊熱替換功能并支持 React 快速刷新。開(kāi)發(fā)人員現(xiàn)在可以直接通過(guò) Bun 運(yùn)行 HTML 文件,系統(tǒng)將自動(dòng)處理 JavaScript、CSS 及 React 的轉(zhuǎn)譯與打包。開(kāi)發(fā)服務(wù)器通過(guò)平臺(tái)專屬 API(如 macOS 的 kqueue 和 Linux 的 inotify)實(shí)現(xiàn)文件系統(tǒng)監(jiān)聽(tīng),無(wú)需任何額外配置即可實(shí)現(xiàn)熱重載。當(dāng)生產(chǎn)就緒時(shí),運(yùn)行 bunbuild --production命令即可打包應(yīng)用程序并生成優(yōu)化后的輸出文件。
Bun 1.3 的核心功能之一是 Bun.SQL,這是一個(gè)支持 MySQL、MariaDB、PostgreSQL 和 SQLite 的統(tǒng)一 API,而且完全不依賴外部組件。對(duì)于所有的數(shù)據(jù)庫(kù)適配器,該 API 都提供了一致的語(yǔ)法,并且通過(guò)原生實(shí)現(xiàn)保持了高性能。下面是這種統(tǒng)一語(yǔ)法的示例:
import { sql, SQL } from "bun";
const postgres = new SQL("postgres://[localhost/mydb](
)");
const mysql = new SQL("mysql://[localhost/mydb](
)");
const sqlite = new SQL("sqlite://data.db");
const username = "test_user";
const findUser = await sql`SELECT name, role, username FROM users WHERE username = ${username}`;
本次發(fā)布還引入了一個(gè)內(nèi)置的 Redis 客戶端,其性能比流行的 ioredis 包高出 7.9 倍以上。它支持所有的標(biāo)準(zhǔn) Redis 操作。集群、流和 Lua 腳本功能計(jì)劃在未來(lái)版本中實(shí)現(xiàn)。
對(duì)于此次發(fā)布,社區(qū)的反響褒貶不一,開(kāi)發(fā)者們既表現(xiàn)出興奮又流露出擔(dān)憂。Hacker News 上的一篇討論帖 獲得了 56 個(gè)贊,其中不乏積極評(píng)價(jià),例如:
Bun 真是太棒了。我?guī)缀醪恍枰惭b任何軟件包,因?yàn)?Bun 內(nèi)置的組件恰到好處,比如 SQL 、S3 ,現(xiàn)在連 Redis 也支持了。
在其他地方,Lobsters 上有評(píng)論者 對(duì)性能基準(zhǔn)測(cè)試提出了質(zhì)疑,特別是關(guān)于編譯后的 Bun 應(yīng)用程序能比 nginx 更快地處理文件的說(shuō)法。
Reddit 上一位用戶評(píng)論說(shuō),對(duì)于生產(chǎn)應(yīng)用,他們?nèi)匀挥行﹩?wèn)題需要解決:
在開(kāi)發(fā)階段,Bun 已經(jīng)百分之百就緒。但在生產(chǎn)環(huán)境中,我仍然會(huì)不時(shí)地遇到各種問(wèn)題。
Bun 1.3 通過(guò)單體庫(kù)依賴項(xiàng)目錄擴(kuò)展了包管理功能,其設(shè)計(jì)靈感源自 pnpm 的目錄特性。工作區(qū)現(xiàn)默認(rèn)采用隔離安裝模式,這樣可以防止包訪問(wèn)未聲明的依賴項(xiàng)。新增的bun update --interactive命令支持開(kāi)發(fā)人員有選擇性地更新依賴項(xiàng),而bun why命令則可以解析依賴鏈。安全改進(jìn)包括用于漏洞檢測(cè)的 Scanner API,而 Socket 正在實(shí)現(xiàn)官方安全掃描器集成。
從早期版本遷移時(shí),Bun 1.3 包含若干破壞性變更。最顯著的是Bun.serve()的 TypeScript 類型已重構(gòu),尤其是對(duì)于 WebSocket 數(shù)據(jù)處理。若將 SQL 客戶端作為函數(shù)而非帶標(biāo)簽的模板字面量調(diào)用,現(xiàn)在會(huì)拋出錯(cuò)誤。Bun 現(xiàn)在將 TypeScript 配置中的"module": "Preserve"作為默認(rèn)值,而非自動(dòng)檢測(cè)(auto-detection)。要了解詳細(xì)的遷移指南,請(qǐng)查閱 Bun 1.3 版本的發(fā)布說(shuō)明。
該版本性能提升顯著,Next.js 和 Elysia 等框架的 JavaScript 內(nèi)存占用減少了 10% 至 30% 。AbortSignal.timeout實(shí)現(xiàn)的速度提升了 40 倍,而通過(guò) I/O 線程池優(yōu)化,macOS 系統(tǒng)上bun build的性能提升了 60%。Express 基準(zhǔn)測(cè)試顯示性能提升 9%,F(xiàn)astify 因node:http改進(jìn)速度提升了 5.4%。
相較于 Node.js 和 Deno 等競(jìng)爭(zhēng)對(duì)手,Bun 通過(guò)將常用功能直接打包到運(yùn)行時(shí)環(huán)境中繼續(xù)保持差異化優(yōu)勢(shì)。Node.js 需要單獨(dú)安裝數(shù)據(jù)庫(kù)客戶端、打包工具和測(cè)試套件,而 Bun 則開(kāi)箱即用地提供了這些功能。
Bun 是一個(gè)基于 JavaScriptCore 構(gòu)建的開(kāi)源 JavaScript 運(yùn)行時(shí),由 Oven 開(kāi)發(fā),Jarred Sumner 及其團(tuán)隊(duì)維護(hù)。它旨在成為 Node.js 的直接替代方案,同時(shí)提供明顯更快的性能和更好的開(kāi)發(fā)體驗(yàn)。Bun 可以通過(guò)運(yùn)行 bun upgrade 來(lái)升級(jí),或按照 bun.sh 中的說(shuō)明全新安裝。
https://www.infoq.com/news/2026/01/bun-v3-1-release/
聲明:本文為 InfoQ 翻譯,未經(jīng)許可禁止轉(zhuǎn)載。
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.