Servo 0.4.0 版本說明
Servo 0.4.0 是一次重大更新,包含 558 次提交,重點在於擴展 Web 平台相容性、增強安全性,以及優化引擎的效能與記憶體占用。
Web 平台與 DOM API 增強
Servo 0.4.0 大幅擴充了對 CSS 與 DOM API 的支援,以提升網頁的渲染與互動性。
CSS 與媒體查詢支援
新功能包括實作 attr() 函式(實驗模式)、image(<color>),以及在 calc() 中可於解析後解決的更新數學表達式。此版本加入了完整的媒體查詢支援,包含:
device-width與device-height(含 min- 與 max- 變體)height與aspect-ratio(含 min- 與 max- 變體)orientationpointer與any-pointerhover與any-hover
此外,@font-face 中現在支援 font-feature-settings。
新 DOM API
已落實多項關鍵 DOM API,以提升應用功能:
- Concurrency(並行): 實作
SharedWorker。 - Developer Tools(開發者工具): 新增
console.dir()。 - Custom Elements(自訂元素): 在
Document與ShadowRoot上提供customElementRegistry,包括initialize()以及可實例化new CustomElementRegistry()。 - Streaming(串流): 在
Request、Response與Blob上提供textStream()。 - Pointer Events(指標事件): 在
Element上提供setPointerCapture()、releasePointerCapture()與hasPointerCapture()。 - Touch Events(觸控事件): 在
Element上提供ontouchstart、ontouchend、ontouchmove與ontouchcancel。 - Cryptography(加密):
crypto.subtle.digest()用於 KT128/KT256,crypto.subtle.getPublicKey()用於 ML-KEM/ML-DSA。
實際相容性與渲染
多個高流量網站的版面正確性已提升,特別是對可變字型的處理更佳。
- Lichess.org: 版面正確性有顯著改善。
- Zulip 與 Speedtest.net: 由於可變字型的改進,閱讀性提升。
- Google Photos 與 Cash Converters: 已確認在 0.4.0 版中可正常運作。
- Google Maps 與 OpenStreetMap: 渲染良好,雖仍有部分互動性問題。
安全性更新
Servo 0.4.0 透過執行階段更新與實作變更,解決多項安全性漏洞。
- SpiderMonkey 更新: JavaScript 執行階段已升級至 SpiderMonkey 140.11.0 與 140.12.0,修復多項安全漏洞,包括 CVE-2026-8388、CVE-2026-8391、CVE-2026-8974 與 CVE-2026-8975(MFSA 2026-48 與 MFSA 2026-58)。
- Cryptographic Hardening(加密強化):
SubtleCrypto中的 RSA 操作現在使用恆定時間的模指數運算。ML-DSA 操作的 Decompose 步驟亦改為恆定時間,修復 RUSTSEC-2025-0144。 - XSS 修復: 已解決
file:///目錄列表中,檔名含有</script>時的 HTML 注入漏洞。
效能與穩定性最佳化
記憶體與能源效率
- Memory Footprint(記憶體占用):
BoxFragment現在縮小 17%(從 288 位元組減至 240 位元組於 amd64),ShapeCacheEntry的大小也已減少。 - Power Consumption(能源消耗): 2D 畫布現在最高可減少 23% 的功耗。
- Resource Management(資源管理): 圖像解碼與快取填充現在以非同步方式執行,減輕腳本執行緒的負擔。
引擎穩定性
- Fuzzing(模糊測試): 透過 6 月的模糊測試,修復了十六個崩潰錯誤,涵蓋
<iframe>、<slot>、clip-path與 DOM 樹等領域。 - Memory Leaks(記憶體洩漏): 已解決與頁面重新載入及 2D 畫布相關的記憶體洩漏問題。
技術架構與未來工作
垃圾回收(GC)安全性
Servo 正在透過使用 Rust 型別系統,以防止 GC 期間的動態借用失敗,朝向與 SpiderMonkey 更安全的整合前進。引入 NoGC 標記值與 safe_borrow_mut() 方法,使引擎能證明在特定操作期間不會發生 GC,亦可避免不必要的 JavaScript 物件根植,從而提升效能。此舉已使版面流程與 HTMLCollection 的額外負擔降低超過 1%。
嵌入與 API 進度
- C API Wrapper(C API 包裝器): 為解決缺乏穩定的 Rust ABI,Servo 已開始設計一個包裝 C API。這將允許 Servo 以穩定的 C ABI 作為預建共享函式庫使用,未來可在其上構建 Rust 包裝器以提升易用性。
- WebGPU: 改進包括實作
copyExternalImageToTexture()、createQuerySet()與resolveQuerySet(),以及更完善的安全上下文強制執行。 - Text Selection(文字選取): 已開始實作可見且可互動的文字選取功能。
使用者與開發者體驗
Servoshell 更新
- Android: 現已要求 Android 13 以上,並已現代化以使用 Compose UI 與 Kotlin。
- Desktop(桌面): 新增拖放開啟檔案、水平分頁列捲動,以及在多螢幕下改進的全螢幕行為。
- General(一般):
localhost:<port>現在會自動在位置列與命令列中視為http://。
DevTools 改進
在使用 Firefox DevTools 時,Servo 現在能正確在 Console 分頁報告未捕獲的例外,並允許在 Console 與 Debugger 分頁檢視巢狀陣列與 Map 物件。Scopes 面板現在會顯示全域範圍、this 的值,以及 (uninitialized) 變數。