Разница в производительности между 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(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");
 

Вот результат результатов консоли: (выполняется 3 раза)

 1- prop: 9.251ms props: 17.034ms
2- prop: 10.050ms props: 22.443ms
3- prop: 11.013ms props: 17.086ms
 

Используемая версия узла: v10.15.0

Комментарии:

1. Не могли бы вы перейти let test = {} в цикл? Ваш тестовый набор ошибочен, поскольку никто не будет повторно объявлять свойство.

2. Просмотрите и прочитайте это humanwhocodes.com/blog/2015/11 /…

3. @JonasWilms Я переместил его для лучшей читаемости этого вопроса. Подойдет.

Ответ №1:

Вы можете прочитать тест как: «О, defineProperty это более чем в два раза быстрее».

Или вы можете прочитать это как: «Даже defineProperties для 10 000 итераций требуется всего 20 мс, что означает, что это редко вызовет какие-либо проблемы вообще, если вы не создаете миллионы экземпляров в цикле, который выполняется тысячи раз».

Комментарии:

1. Так что я вообще не должен беспокоиться? Я хочу придерживаться defineProperties из-за удобства чтения.

2. «преждевременная оптимизация — корень всего зла» … так что да, возьмите более читаемый