Почему вызов функции без ее владельца происходит медленнее?
Если я сделаю следующее:
var abs = Math.abs;
shoudn't abs(-10)
быть быстрее чем Math.abs(-10)
? Потому что пресс называется прямо.
Это то, что привлекло мое внимание: http://jsperf.com/math-abs-vs-custom-abs-function/2
Обновить:
Тот же тест, выполненный в Internet Explorer 11, показывает совершенно другой результат:
Я предполагаю, что это связано с некоторыми оптимизациями встроенных функций в Chrome V8 Engine.
Тест, созданный nnnnnn, который проясняет то, что я пытаюсь сказать: свойство ярлык
1 ответ
Этот ответ был признан Гиви бесполезным. Смотрите комментарии.
Поиск пользовательской функции в пользовательском объекте происходит медленнее, чем поиск функции, связанной с локальной переменной, поэтому вы были в основном правы.
Тем не менее, глядя вверх Math.*
функции работают быстрее, скорее всего из-за внутренних оптимизаций механизма V8 (поэтому "кэширование" встроенных функций в локальной переменной на самом деле медленнее, а "кэширование" пользовательских функций быстрее).
Изменить: вот JSperf демонстрирует, как Math.*
функции быстрее, чем их var x = Math.x
аналогов, при этом делать то же самое для пользовательских функций нет. Это просто как V8 работает imho.
Edit # 2: только сейчас я заметил эту строку из вашего вопроса:
Я предполагаю, что это связано с некоторыми оптимизациями встроенных функций в Chrome V8 Engine.
Я не уверен на 100%, но это определенно выглядит так, да.