iT邦幫忙

2026 iThome 鐵人賽

DAY 1
0

第一天就聊一些簡單且符合知識背景的的話題,在我們開始進入技術的世界前,我們需要了解

Bun 的故事與前世今生

故事背景

Bun 是一個新一代的 JavaScript / TypeScript 運行時(runtime)
由 Jarred Sumner 開發,用 Zig 語言撰寫(現在改用 rust 寫的)
以 Apple 的 JavaScriptCore 引擎(Safari 用的那個,簡稱 JSC)作為核心,
而不是 Node.js 和 Deno 都使用的 V8。

Jarred Sumner 是誰?

大佬

他曾經是 Stripe 的前端工程師,oven.sh 的創辦人,也就是做 bun
的這家公司

近年來(2025.12) bun 加入 Anthropic
至於更多經歷,可以參考本人的網站

我這裡就不多著墨 -> 我們還是回來講 bun

為何 bun 選用 JavascriptCore

什麼是 javascriptCore ?

他其實就是蘋果的 js 引擎,如果了解 Safari 的朋友們肯定知道,Safari 主要是由 Webkit
搞出來的,我們常見的 ios 手機的瀏覽器也是 Webkit

那 JSC 為 Webkit 的底層技術(也就是 Webkit 的引擎組件),以下是關係圖

Safari 與 WebKit / JavaScriptCore 架構

  • Safari -> 應用程式層

瀏覽器分頁書籤 UI 看得到的東西

  • Webkit (Js 引擎層)

WebCore : 解析 html/css 排版 layout render
JavascriptCore : 負責處理網頁裡的那些 javascript

我們有這些基本概念後,大概理解什麼是 JSC 了

為什麼要用 Javascriptcore ?

用這個東西肯定是有優點存在,不然用了就白用了

猛哥

  1. 啟動速度比較快

JSC 的設計目標就是快速啟動,相較於 V8 啟動時有很多初始化工作要處理
Jarred Sumner 多次提到,JSC 在冷啟動(cold start)情境下顯著快於 V8

  1. 記憶體使用效率

JSC 通常比 V8 更省記憶體,尤其執行小型腳本和短生命週期的程序的時候,這對 serverless 以及 command line tool
是更有利的選擇

  1. JIT 編譯策略

JSC 使用多層 JIT(LLInt → Baseline JIT → DFG JIT → FTL JIT)的漸進式優化策略

JavaScriptCore 多層 JIT 流程

關於各部件的說明

  • LLInt:直譯執行,同時收集執行次數與型別資訊(profiling)
  • Baseline JIT:快速編譯成機器碼,仍保留完整 profiling
  • DFG JIT:根據 profiling 資料做推測型優化(如型別特化),編譯較慢但執行快
  • FTL JIT:用於長時間執行的極熱點程式碼,透過 B3/Air 後端做更深層優化
  • OSR Exit(On-Stack Replacement):當推測失敗(例如變數型別與預期不符)時,會從優化層級退回較低層級重新執行,這是 JSC 保證正確性的關鍵機制

結論

由以上可以知道, Bun 跟別人走出不一樣的路,除此之外,他還用 Rust 去處理各種方面的問題,
當然第一天我也只揭露冰山一角, Bun 的威能也需要大家細細品味,以及看完我接下來的文章
就會發現 bun 的魅力以及威猛的地方。


系列文
不只是快 —— Bun 30 天:從底層架構、全套工具鏈到生產部署1
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言