专栏首页code秘密花园V8 9.0 版本都有哪些新东西?

V8 9.0 版本都有哪些新东西?

V8 9.0 版本已经来到了测试阶段,将在数周内和 Chrome 90 Stable 一起发布,下面我们就先来预览一下这个版本中的一些亮点。

正则匹配索引

v9.0 开始,开发人员可以获取正则表达式匹配中匹配的捕获组的开始和结束位置的数组。当正则表达式带有 /d 标志时,这个数组可以通过匹配对象上的 .indices 属性获得。

const re = /(a)(b)/d;        // Note the /d flag.
const m = re.exec('ab');
console.log(m.indices[0]); // Index 0 is the whole match.
// → [0, 2]
console.log(m.indices[1]); // Index 1 is the 1st capture group.
// → [0, 1]
console.log(m.indices[2]); // Index 2 is the 2nd capture group.
// → [1, 2]

可以访问 https://v8.dev/features/regexp-match-indices 了解更多介绍。

更快的 super 属性访问

通过使用 V8 的内联缓存系统和 TurboFan 中优化的代码生成,对 super 属性(例如 super.x )的访问进行了优化。通过这些更改, super 属性访问的性能将接近于常规属性访问,如下图所示。

禁用 for ( async of 写法

这是一个被广泛讨论的语法分歧,Chrome 90 / V8 9.0 将明确禁止使用 for ( async of ,语法也不会再支持解析。

更快的 JS-to-Wasm 调用

V8WebAssemblyJavaScript 函数的参数使用了不同的表示方式。因此,当JavaScript 调用一个 WebAssembly 函数时,这个调用会经过一个所谓的 JS-to-Wasm 包装器,负责将参数从 JavaScript 域调整到 WebAssembly 域,并从相反的方向调整结果。

不幸的是,这样的操作性能损耗很大,所以 JavaScriptWebAssembly 的调用不如 JavaScriptJavaScript 的调用快。为了最大程度地减少这种性能开销,JS-to-Wasm 包装器现在可以内联到调用站点,从而简化代码并删除多余的框架。

假设我们有一个 WebAssembly 函数:

double addNumbers(double x, double y) {
  return x + y;
}

假设我们从 JavaScript 调用它来添加一些向量(表示为类型数组):

const addNumbers = instance.exports.addNumbers;

function vectorSum(len, v1, v2) {
  const result = new Float64Array(len);
  for (let i = 0; i < len; i++) {
    result[i] = addNumbers(v1[i], v2[i]);
  }
  return result;
}

const N = 100_000_000;
const v1 = new Float64Array(N);
const v2 = new Float64Array(N);
for (let i = 0; i < N; i++) {
  v1[i] = Math.random();
  v2[i] = Math.random();
}

// Warm up.
for (let i = 0; i < 5; i++) {
  vectorSum(N, v1, v2);
}

// Measure.
console.time();
const result = vectorSum(N, v1, v2);
console.timeEnd();

在这个简化的改进中,我们能看到下面的改进:

该功能仍处于试验阶段,如果想要提前体验可以通过 --turbo-inline-js-wasm-calls 标志启用。

你可以使用 git log branch-heads/8.9..branch-heads/9.0 include/v8.h 来获取所有 v9.0 版本的API更改。

在看点这里 ⬇️

本文分享自微信公众号 - code秘密花园(code_mmhy),作者:ConardLi

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-03-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Node.js 16 来了,14 将支持到 2023 年

    参见 Node.js 官方网站[1] 的发布记录,Node.js 16 版本已于 2021 年 4 月 20 日发布,重点包括:将 JavaScript v8 ...

    五月君
  • 前端技术观察第 32 期

    ConardLi
  • Node.js 16 发布,V8 升级至 9.0!

    你可以在 这里[1] 下载最新版,或者使用 UNIX 上的 Node 版本管理器[2] 运行 nvm install 16 命令进行安装。Node.js 博客中...

    前端达人
  • Flink1.8新版发布:都有哪些改变

    问题导读 1.Flink1.8引入对什么状态的连续清理? 2.保存点兼容性方面,不在兼容哪个版本? 3.Maven依赖在Hadoop方便发生了什么变化? 4.F...

    用户1410343
  • node.js 9 来了!重大版本更新!

    大概原因可能是node 基于 v8引擎,v8没一直实现的原因吧 现在谷歌浏览器一直也不支持

    疯狂的技术宅
  • 关于nodejs源码的研究

    回首对nodejs的源码研究,时间已经过去了一年多。我很喜欢js这门语言,有时候感觉他和c语言一样,在c语言里,很多东西都需要自己实现,让我们可以发挥无限的创造...

    theanarkh
  • Node 16 新版本发布,一大堆新特性来袭!!!

    Node 16 于四月二十日发布,山月在第一时间下载了 Node16 体验了以下新特性。偶数号的版本为 LTS 版本,这将是既 Node14 之后的下一个长期支...

    公众号@魔术师卡颂
  • 我的AI之路 —— 从裸机搭建GPU版本的深度学习环境

    服务器是阿里云的CentOS7.4,默认的时候选择的CUDA驱动选错了,1.5以上的tensorflow都应该选择CUDA9.0,注意不要太高,也不要太低!TF...

    用户1154259
  • 前端技术观察第六期 - Chrome 77里有什么新东西给开发者?

    ConardLi

扫码关注云+社区

领取腾讯云代金券