【发布时间】:2017-03-21 14:09:16
【问题描述】:
如果在脚本的加载阶段,许多属性是使用 Object.defineProperty、Object.defineProperties 或 Object.create 定义的。大多数描述符要么是不可写的(如果不是访问器)、不可配置、不可枚举或组合。相对于常规赋值或对象初始化,如果有的话,被动性能差异和访问目标属性的性能差异是什么?
我听说定义不可写和/或不可配置属性涉及设置保护以防止写入和/或重新定义将是性能损失的原因之一,这是真的吗?
定义示例:
Object.defineProperty(window, 'foo', {
configurable: false,
enumerable: false,
writable: false,
value: 10
});
【问题讨论】:
-
我认为只有基准测试才能判断。
-
@Bergi 但考虑到 JavaScript 中的一些麻烦,没有进行基准测试,因为性能高度依赖于上下文,你不应该假设在少数情况下的性能,因为 JIT 会进行复杂的优化或类似的事情?
-
是的。
defineProperty会影响这些优化 - 我们在讨论性能时不能忽视它们。 -
@Bergi 这种影响对性能的影响程度是否已知?或者是否有任何相对简单的方法来衡量这种影响,但不是针对特定案例,而是主要针对一般情况?
标签: javascript performance ecmascript-6 v8