Сколько стоит прослушивание событий на весь документ? - PullRequest
3 голосов
/ 23 февраля 2011

Я хочу использовать делегирование событий на нескольких кнопках на странице HTML. Эти кнопки расположены по всей странице, и мне было интересно, как дорого будет слушать весь документ для событий по щелчку, а затем просто вызывать обработчики делегирования при нажатии на них. Будет ли это дороже, чем иметь слушателей на каждой из 20+ кнопок (это может вырасти до более 100 кнопок, да, это глупо)?

Ответы [ 4 ]

3 голосов
/ 23 февраля 2011

Я не понимаю, как это будет дороже, поскольку он будет прослушивать щелчки на объекте документа вместо 25 объектов привязки

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

Примите во внимание несколько моментов:

  • число якорей неЭто не имеет значения для делегирования событий, это правда
  • Вообще говоря, делегирование событий является превосходной альтернативой в большинстве случаев, но это бесполезно все время

Я предлагаю проанализировать этипроблемы, узнайте, как все работает, и принимайте решения старым добрым здравым смыслом .

1 голос
/ 23 февраля 2011

Это стратегия, используемая, например, «живым» методом jQuery: прослушать весь документ, а затем проверить отправителя на соответствие условию (то есть селектору). Если селектор не является слишком интенсивным, этот метод более эффективен для больших и растущих наборов целей.

1 голос
/ 23 февраля 2011

Я не понимаю, как это будет дороже, поскольку он будет прослушивать щелчки на объекте документа вместо 25 объектов привязки.При этом всего лишь 25-30 кнопок не очень ресурсоемки, так что вам, вероятно, не нужно беспокоиться об этом.

0 голосов
/ 23 февраля 2011

Тебе сложно? рабочий код в плохом коде.

если вы используете на странице 20-40 слушателей кнопок вместо делегата, это сработает, и, вероятно, вы даже не увидите никаких проблем с производительностью. Я думаю, что вы будете использовать forin / $. Each для привязки всех этих слушателей, поэтому вам не нужно будет писать коды для каждого слушателя.

Итак, мой запрос, пожалуйста, используйте делегат.

Если в будущем вам потребуется изменить логику или вы решите протестировать приложение, у вас будут проблемы.

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