小编Iir*_*lin的帖子

仅仅存在 ES6 setter/getter 就会导致不相关函数的性能下降 (V8)

1)创建一个对象并给它一个简单的方法,例如,

let R = {
  f: (x) => Math.sqrt(x)
}
Run Code Online (Sandbox Code Playgroud)

2) 对其性能进行基准测试,例如,调用 f(x) 几百万次 3) 现在添加一个 getter,例如,

let R = {
  f: (x) => Math.sqrt(x),
  get h() {return 0}
}
Run Code Online (Sandbox Code Playgroud)

4) 再次对f(x)进行基准测试。chrome/node(V8 引擎)的性能显着下降。

对于这种奇怪现象有什么解释吗?

这是一个代码笔片段: https: //codepen.io/iiroullin/pen/XWbwoVQ

解决方法:

看起来以旧的 (ES5) 方式定义 getter/setter 并不会破坏 V8 优化。因此,当他们解决 ES6 中的所有问题时,可以使用以下代码来代替 (3):

Object.defineProperty(R, 'h', {get: () => 0})
Run Code Online (Sandbox Code Playgroud)

对于所有 getter/setter 都是如此。

另一个修复:

使用类,请参阅下面的答案

javascript google-chrome v8 node.js

6
推荐指数
1
解决办法
858
查看次数

标签 统计

google-chrome ×1

javascript ×1

node.js ×1

v8 ×1