Почему вызов функции без ее владельца происходит медленнее?

Если я сделаю следующее:

var abs = Math.abs;

shoudn't abs(-10) быть быстрее чем Math.abs(-10)? Потому что пресс называется прямо.

Это то, что привлекло мое внимание: http://jsperf.com/math-abs-vs-custom-abs-function/2Результат теста, проведенного на jsperf.com

Обновить:

Тот же тест, выполненный в Internet Explorer 11, показывает совершенно другой результат:Результат теста, проведенного на jsperf.com

Я предполагаю, что это связано с некоторыми оптимизациями встроенных функций в Chrome V8 Engine.

Тест, созданный nnnnnn, который проясняет то, что я пытаюсь сказать: свойство ярлыкРезультат теста, проведенного на jsperf.com

1 ответ

Этот ответ был признан Гиви бесполезным. Смотрите комментарии.

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

Тем не менее, глядя вверх Math.* функции работают быстрее, скорее всего из-за внутренних оптимизаций механизма V8 (поэтому "кэширование" встроенных функций в локальной переменной на самом деле медленнее, а "кэширование" пользовательских функций быстрее).

Изменить: вот JSperf демонстрирует, как Math.* функции быстрее, чем их var x = Math.x аналогов, при этом делать то же самое для пользовательских функций нет. Это просто как V8 работает imho. результаты теста

Edit # 2: только сейчас я заметил эту строку из вашего вопроса:

Я предполагаю, что это связано с некоторыми оптимизациями встроенных функций в Chrome V8 Engine.

Я не уверен на 100%, но это определенно выглядит так, да.

Другие вопросы по тегам