最新消息:关注人工智能 AI赋能新媒体运营

Google更新V8引擎,物件序列化速度翻倍

科技智能 admin 浏览

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引擎性能提升的好处。