Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Object.defineProperty的调用后/运行时性能影响_Javascript_Performance_Ecmascript 6_V8 - Fatal编程技术网

Javascript Object.defineProperty的调用后/运行时性能影响

Javascript Object.defineProperty的调用后/运行时性能影响,javascript,performance,ecmascript-6,v8,Javascript,Performance,Ecmascript 6,V8,如果在脚本的加载阶段,使用Object.defineProperty、Object.defineProperties或Object.create定义了许多属性。大多数描述符要么是不可写的(如果不是访问器)、不可配置的、不可枚举的,要么是组合的。相对于常规赋值或对象初始化,被动性能差异(如果有)和访问目标属性的性能差异是什么 我听说定义不可写和/或不可配置的属性需要设置防护,以防止写入和/或重新定义会导致性能损失,这是真的吗 定义示例: Object.defineProperty(window,

如果在脚本的加载阶段,使用Object.defineProperty、Object.defineProperties或Object.create定义了许多属性。大多数描述符要么是不可写的(如果不是访问器)、不可配置的、不可枚举的,要么是组合的。相对于常规赋值或对象初始化,被动性能差异(如果有)和访问目标属性的性能差异是什么

我听说定义不可写和/或不可配置的属性需要设置防护,以防止写入和/或重新定义会导致性能损失,这是真的吗

定义示例:

Object.defineProperty(window, 'foo', {
    configurable: false,
    enumerable: false,
    writable: false,
    value: 10
});

使用Object.defineProperty/defineProperties创建属性肯定比简单地分配属性慢。(多少?取决于。度量!使基准测试相关的最佳方法是使它们尽可能与您感兴趣的实际用例相似。理想情况下,您度量实际生产代码的不同版本。)

无论属性是如何定义的,读取属性的速度都是相同的

写入现有属性必须始终检查可写性,这正是因为它不知道是使用了
foo.bar=baz
还是
Object.defineProperty(foo,“bar”,{value:baz})
。这也是同样的速度


没有特别的保护措施。

我认为只有基准测试才能说明问题。@Bergi但基准测试在JavaScript中不是有点麻烦,因为性能在很大程度上取决于上下文,你不应该假设一些情况下的性能,因为JIT会进行复杂的优化或类似的事情?是的。而且
defineProperty
会影响这些优化-我们在讨论性能时不能忽略它们。@Bergi这种影响对性能的影响程度会是已知的吗?或者有没有相对简单的方法来衡量这种影响,但不是针对具体案例,而是主要针对一般情况?关于使用这些方法创建属性,我已经读过:但不确定您的答案的后半部分;如果你是对的,这真的澄清了属性是如何工作的,谢谢!