Google旗下的V8引擎開發團隊在最新釋出的13.8版本中,針對JavaScript語言內建的JSON序列化功能進行多項底層最佳化,使物件序列化效能超過原本的兩倍速。此項更新將隨著Chrome 138版推送至全球使用者,同時惠及所有以V8為基礎的應用環境,包括Node.js與Deno平臺。

此次V8引擎的改進重點,在於對JSON.stringify函式建立了一條快速且無副作用的執行路徑,讓序列化過程不再需要進行複雜的副作用檢查或垃圾回收觸發判斷,進一步降低系統開銷。過去當開發者使用JSON.stringify轉換物件成JSON格式時,V8引擎必須透過遞迴方式處理資料,且每一層的巢狀結構都可能產生昂貴的執行成本或觸發堆疊溢位問題。而透過新的迭代式設計,開發者能處理更深的巢狀資料結構,且執行成本明顯降低。

此外,V8開發團隊也針對字串序列化效率進行改善,透過提供專門的ASCII與非ASCII字元處理路徑,避免了頻繁的執行期間判斷。新版本中更引入了SIMD指令與SWAR(SIMD Within A Register)技術,能夠一次處理多個字元,快速偵測是否含有必須進行特殊跳脫的字元,進一步提高序列化的效率。

不只如此,開發團隊也針對JavaScript物件的隱藏類別(Hidden Class)最佳化,V8引擎新增了fast-json-iterable的標記,只要物件經過一次完整序列化,確認不含Symbol鍵名、非列舉屬性,且鍵名不需跳脫特殊字元,即可被標記為快速可迭代。這表示在後續相同類型的物件序列化中,引擎可直接略過上述檢查步驟,大幅提升效能。此項技術不僅限於JSON.stringify,連JSON.parse函式也能受益於相同概念,縮短物件轉換的時間。

數值轉字串的效能也同樣獲得提升,V8過去使用的Grisu3演算法,在處理特定數字時可能需要較多時間,團隊在新版選用新興的Dragonbox演算法取代,使數值到字串的轉換過程更快、更有效率。

開發團隊也重新設計了序列化過程中使用的暫存緩衝區,原本的緩衝區設計為單一連續記憶體區塊,當資料量較大時必須多次重新配置更大空間並複製原資料,造成大量的記憶體使用量與CPU負載。新的設計採用多段式緩衝區,以V8內部的Zone記憶體區塊為基礎,當單一緩衝區填滿時直接增加新的一段,不再需要頻繁的記憶體複製,大幅降低資源消耗。

V8官方透過JetStream2基準測試指出,新版引擎在json-stringify-inspector項目的測試,各平臺普遍呈現兩倍以上的效能改善。此次升級適用於多數典型使用情境,大部分開發者不需修改程式,即可獲得新版V8引擎性能提升的好處。

熱門新聞

Advertisement