Как влияет на производительность добавление методов к собственным объектам JavaScript?

Я понимаю, что некоторые считают добавление методов к нативным объектам JavaScript (объект, функция, массив, строка и т. д.) плохой практикой, но связано ли это с падением производительности?

Будут ли экземпляры нативных объектов создаваться дольше и/или использовать больше памяти, если их прототип будет расширен дополнительными методами?


person FriendOfFuture    schedule 28.07.2009    source источник


Ответы (1)


Будут ли экземпляры нативных объектов создаваться дольше и/или использовать больше памяти, если их прототип будет расширен дополнительными методами?

Нет. Ни то, ни другое не должно происходить: каждый объект должен поддерживать ссылку на свой прототип, но эта ссылка не станет больше и не займет больше времени для извлечения, если к объекту, на который он ссылается, будут добавлены дополнительные свойства.

Теперь, если вы добавите достаточное количество дополнительных методов в prototype, это может начать влиять на время, необходимое для поиска методов для объектов этого типа. Это зависит от реализации, но я был бы шокирован, если бы вы заметили разницу (я подозреваю, что вы сошли бы с ума, пытаясь запомнить названия всех этих дополнительных методов задолго до того, как они окажут заметное влияние на скорость выполнения).


Редактировать: вот быстрый и ужасный тест — он создает 500 тыс. экземпляров Array до и после добавления 500 тыс. пользовательских методов к объекту Array.prototype. Нет заметной разницы; не волнуйтесь...

person Shog9    schedule 28.07.2009
comment
Расширение цепочки поиска методов javascript через несколько прототипов увеличивает время поиска, поскольку обход прототипа составляет O (n), но поиск метода для одного прототипа выполняется за O (1) с постоянным временем. - person Duncan Beevers; 29.07.2009