Javascript Object.defineProperty()和Object.defineProperties()之间的性能差异

Javascript Object.defineProperty()和Object.defineProperties()之间的性能差异,javascript,ecmascript-5,defineproperty,Javascript,Ecmascript 5,Defineproperty,我正在寻找这两种方法之间的主要区别 一些网站提到了可读性问题,但我主要关心的是性能问题。似乎defineProperty()更快,但我不知道为什么 var FOR_TIME = 10000; console.time("prop"); for(var i = 0; i < FOR_TIME; i++) { var test = {}; Object.defineProperty(test, "ba", {}); Object.defineProperty(tes

我正在寻找这两种方法之间的主要区别

一些网站提到了可读性问题,但我主要关心的是性能问题。似乎defineProperty()更快,但我不知道为什么

var FOR_TIME = 10000;


console.time("prop");
for(var i = 0; i < FOR_TIME; i++) {
    var test = {};
    Object.defineProperty(test, "ba", {});
    Object.defineProperty(test, "bab", {});
    Object.defineProperty(test, "bac", {});
}
console.timeEnd("prop");

console.time("props");
for(var i = 0; i < FOR_TIME; i++) {
    var test = {};
    Object.defineProperties(test, {
        a: {},
        ab: {},
        ac: {}
    })
}
console.timeEnd("props");

使用的节点版本:v10.15.0

您可以将基准读作:“哦,
defineProperty
快了两倍多”


或者您可以将其理解为:“即使是
defineProperties
也只需要20ms就可以进行10000次迭代,这意味着它几乎不会引起任何问题,除非您在一个运行数千次的循环中创建数百万个实例。”

您可以将基准理解为:“哦,
defineProperty
的速度快了两倍多”


或者你可以这样理解:“即使
defineProperties
在10000次迭代中也只需要20ms,这意味着它几乎不会引起任何问题,除非你在一个运行数千次的循环中创建数百万个实例。”

你能移动
let test={}
进入循环?您的测试用例有缺陷,因为没有人会重新声明属性。查看并阅读此@jonaswillms我将其移动以提高此问题的可读性。可以。您可以移动
让测试={}
进入循环?您的测试用例有缺陷,因为没有人会重新声明属性。查看并阅读@jonaswillms我将其移动是为了提高此问题的可读性。可以。因此我不必担心任何问题?出于可读性目的,我想坚持使用defineProperties。“过早优化是万恶之源。”" ... 是的,拿一本可读性更强的书,这样我就不必担心了?出于可读性的目的,我想坚持使用defineProperties。“过早优化是万恶之源”。。。因此,是的,以可读性更强的为例
1- prop: 9.251ms props: 17.034ms
2- prop: 10.050ms props: 22.443ms
3- prop: 11.013ms props: 17.086ms