Скорость обратного вызова событий jQuery:Аноним против.Именованные функции

StackOverflow https://stackoverflow.com/questions/19827253

Вопрос

Это своего рода случайный вопрос, но мне было интересно, почему именованный обратный вызов для события щелчка работает хуже, чем анонимная функция.

Вот ссылка на JSPerf тесты, которые я проводил в Firefox и Chrome на Mac.

Думаю, я предполагал, что именованные обратные вызовы всегда будут работать лучше.Например, при использовании .each именованный обратный вызов немного быстрее.

Спасибо за ваше время!

Редактировать я отредактировал .each JSPerf-тест, потому что (а) я не проверял то, что имел в виду, и (б) я пытающийся больше имитировать события.

Редактировать 2 Моя тестовая настройка была неправильной с самого начала, как указывает @Esailija ниже.Этот вопрос несколько бессмысленен, но, по крайней мере, он может помочь кому-то при тестировании JSPerf.

Это было полезно?

Решение

JSPERF сломлен, потому что вы накапливаете обработчики событий через границы испытаний. В других видах, какой бы тест прошел первым, будет «самым быстрым».

И вся предпосылка теста нелепа, нет никакой разницы между функцией, которая имеет имя и функцию, у которой нет имени, если все остальное равное. Вы увидите разницу только тогда, когда вы настраиваете JSPERF неправильно. Когда вы постоянно получаете для них равные результаты, вы знаете, что правильно его настроили - но вы бы знали это уже из здравого смысла :)

Другие советы

Анонимная функция передается как аргумент, поэтому для разрешения ее ссылки цепочка областей не доходит до родительской функции, которая ее создала — она существует только как аргумент.С другой стороны, чтобы разрешить ссылку на именованную функцию, цепочка области действия прослеживается вплоть до закрытия родительской функции, где была создана именованная функция.

Редактировать:Я пытался это доказать, но похоже, что анонимная функция на самом деле не решается быстрее - http://jsperf.com/scope-chain-anonymous-function

Редактировать: Если вы позвоните a.off(); Чтобы удалить любые обработчики событий, именованная функция будет работать так же быстро или даже быстрее, чем разрешение анонимной функции.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top