Последствия для производительности объекта после вызова/во время выполнения.defineProperty
Если на этапах загрузки скрипта многие свойства определяются с помощью объекта.defineProperty, объект.определите свойства или объект.творить. И большинство дескрипторов являются либо недоступными для записи (если не являются средствами доступа), либо не конфигурируемыми, не перечисляемыми или комбинированными. По сравнению с обычным назначением или инициализацией объекта, какова разница в пассивной производительности, если таковая имеется, и разница в производительности доступа к целевым свойствам?
Я слышал, что определение неписьмого и/или неконфигурируемые свойства включают в себя установку защитных устройств для предотвращения записи и / или повторного определения будет одной из причин потери производительности, верно ли это?
Пример определения:
Object.defineProperty(window, 'foo', {
configurable: false,
enumerable: false,
writable: false,
value: 10
});
1 ответ:
Создание свойств с помощью объекта.defineProperty/defineProperties определенно медленнее, чем простое их назначение. (Сколько? Зависит. Мера! Лучший способ сделать бенчмарки релевантными-сделать их максимально похожими на реальный вариант использования, который вас интересует. В идеале вы измеряете различные версии вашего фактического производственного кода.)
Чтение свойств имеет одинаковую скорость независимо от того, как свойство было определено.
Запись в существующие свойства должна быть всегда проверьте возможность записи именно потому, что он не может знать, был ли использован
foo.bar = baz
илиObject.defineProperty(foo, "bar", {value: baz})
. Так что это та же самая скорость.Особой охраны нет.