mon*_*nad 5 javascript performance v8 ecmascript-6
如果在脚本的加载阶段,许多属性是使用 Object.defineProperty、Object.defineProperties 或 Object.create 定义的。大多数描述符要么是不可写的(如果不是访问器),要么是不可配置的,不可枚举的,或者是它们的组合。相对于常规分配或对象初始化,被动性能差异(如果有)以及访问目标属性的性能差异是什么?
我听说定义不可写和/或不可配置的属性涉及设置防护以防止写入和/或重新定义将是性能损失的原因之一,这是真的吗?
定义示例:
Object.defineProperty(window, 'foo', {
configurable: false,
enumerable: false,
writable: false,
value: 10
});
Run Code Online (Sandbox Code Playgroud)
使用 Object.defineProperty/defineProperties 创建属性肯定比简单地分配它们要慢。(多少?取决于。测量!使基准相关的最佳方法是使它们尽可能与您感兴趣的实际用例相似。理想情况下,您测量实际生产代码的不同版本。)
无论属性如何定义,读取属性的速度都相同。
写入现有属性必须始终检查可写性,正是因为它无法知道是否foo.bar = baz使用过或Object.defineProperty(foo, "bar", {value: baz}). 所以这也是相同的速度。
没有专门的警卫。