跳到主要内容

V8 发布 v6.1

· 阅读需 3 分钟
V8 团队

每隔六周,我们都会按照我们的发布流程创建一个新的 V8 分支。每个版本都会在 Chrome Beta 版本里程碑之前直接从 V8 的 Git 主分支分支出来。今天,我们很高兴地宣布我们的最新分支,V8 版本 6.1,该版本将在几周内与 Chrome 61 稳定版协同发布。在此之前,它处于 Beta 阶段。V8 v6.1 为开发人员带来了各种各样的好东西。我们希望提前预览一些亮点,以迎接正式发布。

性能改进​

通过迭代或使用 Map.prototype.forEach / Set.prototype.forEach 方法访问 Map 和 Set 中的所有元素变得显著更快,从 V8 版本 6.0 开始,原始性能提升高达 11 倍。更多信息请查看专门的博客文章。

除此之外,其他语言功能的性能改进工作也在继续。例如,Object.prototype.isPrototypeOf 方法对于主要使用对象字面量和 Object.create 而不是类和构造函数的无构造函数代码来说非常重要,该方法现在的速度始终与使用 instanceof 操作符 相当甚至更快。

使用可变数量的参数进行函数调用和构造函数调用也显著加快。通过Reflect.apply和Reflect.construct进行的调用在最新版本中获得了高达 17 倍的性能提升。

Array.prototype.forEach 现在在 TurboFan 中内联,并针对所有主要非稀疏元素类型进行了优化。

二进制大小减少​

V8 团队已完全移除了废弃的 Crankshaft 编译器,从而显著减少了二进制大小。伴随着内置生成器的移除,这使得 V8 部署的二进制文件大小减少了超过 700 KB,具体取决于确切的平台。

asm.js 现在经过验证并编译为 WebAssembly​

如果 V8 遇到 asm.js 代码,它现在会尝试验证它。有效的 asm.js 代码会被转译为 WebAssembly。根据 V8 的性能评估,这通常会提高吞吐性能。由于增加了验证步骤,启动性能中可能会出现一些孤立的回退。

请注意,这一功能仅在 Chromium 端默认启用。如果您是嵌入者并希望利用 asm.js 验证器,请启用标志 --validate-asm。

WebAssembly​

调试 WebAssembly 时,当 WebAssembly 代码中断点被触发时,现在可以在 DevTools 中显示局部变量。

V8 API​

请查看我们的API 更改摘要。该文档会在每次主要版本发布的几周后定期更新。

拥有活跃 V8 检出的开发人员可以使用 git checkout -b 6.1 -t branch-heads/6.1 来试验 V8 v6.1 中的新功能。或者,您也可以订阅 Chrome 的 Beta 频道,并尽快亲自尝试这些新功能。