Какой самый быстрый способ вызвать функцию JavaScript - PullRequest
1 голос
/ 20 июля 2011

Быстрее ли вызвать функцию JavaScript, определенную глобально или как свойство глобальной переменной?

Например:

Опция 1

.html:
<input type="checkbox" name="" value="" onClick="dofind()">

.js:
function dofind() { /* code */ }

Опция 2

.html:
<input type="checkbox" name="" value="" onClick="x.dofind()">

.js:    
var x = {
    dofind: function() { /* code */ }
}

Ответы [ 3 ]

3 голосов
/ 20 июля 2011

Вызов функции в локальной области видимости незначительно быстрее. Вам нужно будет сделать миллионы звонков, прежде чем это станет заметно, а в обработчике onclick это не так.

Однако ни один из этих методов не идеален. Вам лучше выбрать маршрут ненавязчивый путем добавления onclick прослушивателя событий после загрузки DOM .

2 голосов
/ 20 июля 2011

Если вы рассматриваете цепочку областей действия слушателя событий, в первом случае он должен разрешить идентификатор dofind для объектов в цепочке областей действия слушателя. Предположительно, он не будет найден ни на одном промежуточном объекте и будет найден на глобальном объекте. Затем он будет называться.

Во втором случае идентификатор x должен быть разрешен в аналогичной (идентичной?) Цепочке областей действия, и после его обнаружения идентификатор dofind должен быть найден как свойство этот объект.

Логика говорит, что второй метод медленнее, потому что он длиннее. Однако движки JavaScript могут оптимизировать цепочки областей видимости и доступ к свойствам, если они того пожелают. Вполне вероятно (в современных браузерах), что последующие вызовы dofind будут выполняться напрямую, без ссылки на цепочку областей действия , если только механизм не считает, что цепочка могла быть изменена.

Тестирование в различных браузерах покажет, какие оптимизируют такие вызовы, а какие нет. Я думаю, вы обнаружите, что в общей производительности приложения разница в вызове незначительна, в частности, поскольку разрешение идентификатора будет происходить намного быстрее, чем пользователь может инициировать последовательность событий щелчка (вероятно, в 1000 и более раз).

0 голосов
/ 21 июля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...