前端前線 2026 年 5 月 27 日

2026-05-27 — Bun v1.3.14 HTTP/3 暨內建圖片 API、Chrome 136 RegExp.escape

primary=https://bun.sh/blog/bun-v1.3.14 primary=https://developer.chrome.com/blog/new-in-chrome-136

Bun v1.3.14:內建圖片處理 API、HTTP/3 伺服器,及全域套件快取大幅加速安裝

bun.sh · 2026-05-13

Bun v1.3.14 於 2026 年 5 月 13 日發布,帶來三項重量級功能:零依賴的內建圖片處理 API Bun.Image、實驗性 HTTP/3 (QUIC) 伺服器支援,以及透過全域虛擬套件儲存庫將暖安裝速度提升逾 7 倍。

Bun.Image — 靜態連結的圖片處理管線

Bun.Image 以可鏈式呼叫的 API 提供 JPEG、PNG、WebP、GIF、BMP 處理(macOS/Windows 另支援 HEIC、AVIF、TIFF),無需安裝 libvips 或 sharp 等原生模組。

await Bun.file("photo.jpg")
  .image()
  .resize(1024, 1024, { fit: "inside" })
  .rotate(90)
  .webp({ quality: 85 })
  .write("thumb.webp");

在 Linux x64 與 sharp 0.34.5 的對比測試(50 次迴圈)中,metadata() 快 70 倍,主要轉換操作則快 1.27–1.38 倍:

操作Bun.Imagesharp加速
metadata()0.004 ms0.28 ms70×
1080p PNG → 400×400 JPEG28.6 ms39.5 ms1.38×
4K JPEG → 800×450 JPEG35.8 ms45.5 ms1.27×

底層採用 i16 固定點 SIMD 縮放核心、JPEG IDCT 縮放,以及零拷貝 ArrayBuffer 借用,並以單一預分配 arena 管理記憶體。

HTTP/3 (QUIC) 伺服器 — 實驗性

Bun.serve() 加入 http3: true 後,伺服器同時在 TCP(HTTP/1.1 與 HTTP/2)與 UDP 443 埠(HTTP/3)監聽。基準測試顯示靜態路由達每秒 509,135 次請求,是 HTTPS/1.1(189,130 req/s)的 2.7 倍。底層使用 lsquic v4.6.2。目前不支援 WebSocket over HTTP/3、0-RTT 與 Unix socket。

全域虛擬套件儲存庫 — 暖安裝加速 7 倍

啟用 install.globalStore = true 後,套件在 <cache>/links/ 中只實體化一次,各專案的 node_modules 以符號連結指向共用位置。約 1,400 個套件的測試案例,暖安裝從 841 ms 降至 115 ms,clonefileat() 呼叫次數從 1,387 降至 0。相同依賴閉包的兩個專案共用磁碟映像;entry hash 編碼完整傳遞依賴版本,確保版本差異時各自獨立。

fs.watch() 全面改寫

Linux(inotify)、macOS(FSEvents)、FreeBSD(kqueue)現在直接呼叫 OS API,取代舊版打包工具的 watcher。主要修復:Linux 遞迴監看能追蹤監看啟動後新建的子目錄;刪除再重建的檔案能再次觸發 change 事件;macOS 廢除同時執行的 kqueue 執行緒,改為單一 FSEvents,執行緒數減半。

此版本另包含 process.execve()(POSIX 行程替換)、Windows 端的 Bun.Terminal(ConPTY)、JavaScriptCore 原生支援 Explicit Resource Management(using)、跨 Zig/C++ 的 LTO 內聯優化帶來約 6.5% 速度提升,以及超過 100 項錯誤修正。

原始來源:bun.sh


Chrome 136:RegExp.escape、隱私強化的 :visited 分區、Passkey 自動升級

developer.chrome.com · 2026-05-27

Chrome 136 隨穩定版發布,帶來多項 Web 平台新功能,涵蓋跨所有主流瀏覽器達到 Baseline Newly Available 的 RegExp.escape(),以及修補瀏覽歷史洩漏問題的 :visited 隱私改進。

RegExp.escape() — 安全字串轉義

RegExp.escape(str) 是一個靜態方法,會將輸入字串中所有正規表達式特殊字元加上反斜線,使其在 RegExp 建構式中作為字面符號使用。此前,開發者必須自行維護轉義函數或依賴第三方函式庫。Chrome 136 使此方法達成 Baseline,Firefox 與 Safari 已在更早版本支援。

const escaped = RegExp.escape("3.14 + 2?"); // "3\\.14 \\+ 2\\?"
new RegExp(escaped).test("3.14 + 2?");       // true

分區 :visited 連結歷史

長期以來,:visited CSS 偽類可透過側信道攻擊(timing、pixel readback)推斷使用者的跨站瀏覽歷史。Chrome 136 改為僅當連結是從同一頂層站點(top-level site)與同一框架來源點擊過時,才套用 :visited 樣式,徹底切斷跨站歷史推斷路徑。Firefox 已在較早版本部署相同機制。

WebAuthn 條件式建立 — Passkey 自動升級

Chrome 136 支援 WebAuthn 的 conditional create 請求:當使用者存在既有密碼憑證,且已預先授權時,網站可在不彈出模態對話框的情況下靜默建立 Passkey,完成「密碼 → Passkey」的無感升級流程。這對持有大量現有帳號的服務(電商、金融)尤其重要。

其他新增功能

  • dynamic-range-limit CSS 屬性:限制頁面中 HDR 內容的最大亮度,讓開發者對高動態範圍顯示器上的內容有更細緻的控制。
  • FedCM 多 IdP 支援:單次 get() 呼叫可同時列出多個身分提供者,減少使用者在多帳號情境下的操作步驟。
  • Speculation Rules tag 欄位:在推測載入規則中標記來源,方便效能監控與除錯區分不同推測來源。

原始來源:developer.chrome.com


End of article
0
Would love your thoughts, please comment.x
()
x