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 都是如此。
另一个修复:
使用类,请参阅下面的答案