前端前線 2026 年 6 月 30 日

2026-06-30 — 匿名憑證、Game Boy JIT 編譯至 WASM、Service Worker 的替代方案

primary=https://hacks.mozilla.org/2026/06/pact-anonymous-credentials-for-the-web/ primary=https://humphri.es/blog/WATaBoy/ primary=https://www.jayfreestone.com/writing/you-might-not-need-a-service-worker/

PACT:為 Web 打造的匿名憑證系統

Mozilla Hacks · 2026-06-23

Mozilla 在 2026 年 6 月發表了 PACT(Privacy-preserving Anonymous Credential Technology),一套針對現代 Web 環境設計的匿名憑證協議,目標是在不揭露使用者身份的前提下,讓伺服器端能夠驗證使用者具備特定屬性,例如「已通過年齡驗證」或「訂閱有效」。

背景

傳統的 Web 認證(OAuth、cookie session)在每次請求都會帶上可追蹤的識別符,讓服務商能夠跨請求、跨站點建立使用者行為輪廓。匿名憑證的核心思想是把「你是誰」與「你有什麼資格」分開:憑證簽發者(identity provider)只確認屬性;驗證方(relying party)只能確認屬性成立,無法得知是哪個用戶。

現行方案如 Privacy Pass 與 PrivacyPass HTTP 擴充已在 CDN 反機器人場景中部署,但覆蓋場景有限。PACT 試圖提供更通用的協議層,能夠支援多屬性斷言與選擇性揭露。

規格細節

PACT 協議基於 BBS 簽章(Boneh-Boyen-Shacham)的零知識擴充,允許持有者對一組屬性生成選擇性揭露的證明,而不洩露完整憑證。與傳統 JWT 不同,BBS 簽章支援「出示子集」:持有者可以只揭露「年齡 ≥ 18」,而不必揭露確切生日。

協議分三個角色:Issuer(簽發屬性憑證)、Holder(瀏覽器端保存憑證)、Verifier(服務端驗證)。Issuer 與 Verifier 之間沒有通訊,這消除了傳統 SSO 中 IdP 能夠得知用戶訪問哪些服務的問題。

影響範圍

PACT 當前狀態為 Mozilla 內部提案,尚未進入 W3C 標準流程。主要挑戰在於:撤銷機制——匿名憑證一旦簽發,若不引入可追蹤的撤銷清單,便難以使憑證失效;密碼學計算成本——BBS 零知識證明比 ECDSA 驗證慢一個數量級,在低端設備上需要額外最佳化。

對 Web 開發者而言,若 PACT 進入瀏覽器 API,未來的年齡驗證、訂閱確認等場景將能在不傳遞用戶識別資訊的情況下完成,與 GDPR、ePrivacy 的合規需求也更容易對齊。

原始來源:Mozilla Hacks


WATaBoy:Game Boy 指令 JIT 編譯至 WASM 勝過原生直譯器

humphri.es · 2026-06-29

WATaBoy 是一個 Go 撰寫的 Game Boy 模擬器實驗,作者實作了一套 JIT 編譯器,將 Sharp LR35902 指令動態轉譯為 WebAssembly 文字格式(WAT),再交由瀏覽器的 WASM runtime 執行,效能超越同樣用 Go 撰寫的原生直譯器。

核心改動

傳統 Game Boy 模擬器以「fetch-decode-execute」循環逐條執行 LR35902 指令,每條指令都需要一次分派(dispatch)。WATaBoy 的 JIT 路徑則是:掃描連續基本區塊,一次性產生對應 WAT 文字,透過 WebAssembly.compile() 編譯為 binary,再以 WebAssembly.instantiate() 執行。

WAT 是 WASM 的人類可讀表示,語法直接對應 WASM 的堆疊式 VM。作者選擇 WAT 而非直接輸出 WASM binary,主要是因為易於除錯,且文字轉 binary 的成本由瀏覽器內建編譯器承擔。

;; LR35902 ADD A,B 對應的 WAT 輸出範例
(local.set $A
  (i32.add (local.get $A) (local.get $B)))

影響範圍

實測結果顯示,JIT 路徑在 CPU 密集場景(如音頻合成迴圈)每秒可處理的 Game Boy 時脈數高於純 Go 直譯器約 30–50%。冷啟動(首次 JIT 編譯某段程式碼)延遲約 2–5ms,在模擬器場景中可接受。

這個實驗同時驗證了「WASM 作為後端 IR」的可行性:在瀏覽器環境中,動態生成 WASM 模組不受 CSP script-src 'unsafe-eval' 限制,因為 WebAssembly.compile() 走的是獨立的權限模型。

原始來源:humphri.es


你或許不需要 Service Worker

jayfreestone.com · 2026-06-29

Jay Freestone 梳理了 Service Worker 被過度引入的常見場景,指出許多開發者在並不需要離線能力或背景同步的應用中仍然引入 Service Worker,反而帶來快取失效難以追蹤、除錯複雜度上升等問題。

核心改動

文章列舉了被 Service Worker 替代卻有更簡單方案的場景:

  • 靜態資源快取:可直接透過 HTTP Cache-Control: immutable 與 CDN 邊緣快取處理
  • 推播通知:若只需在頁面開啟時運作,Web Push API 可不依賴 Service Worker 的 push 事件
  • 資源預取:可用 <link rel="prefetch"> 或 Speculation Rules API 實現

Service Worker 的生命週期(install → waiting → activate)是許多快取 bug 的根源。版本升級時舊 Worker 仍可能服務舊版快取,直到所有分頁關閉,這在 SPA 更新場景中特別難以排查。

影響範圍

作者建議的決策框架:只有在需要真正離線運作(無網路仍可使用)、背景資料同步、或跨 session 快取策略時,才引入 Service Worker。Speculation Rules API(Chrome 121+ 支援)已能覆蓋大多數「預載入下一頁」的需求,且不需要額外的 Worker 生命週期管理。

原始來源:jayfreestone.com


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