#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. «преждевременная оптимизация — корень всего зла» … так что да, возьмите более читаемый