Что вы ищете называется event delegation, и да, это хорошо масштабируется, в то время как подключить нагрузку слушателей к отдельным элементам этого не делает. По моему опыту, вы занимаете худшую часть производительности при настройке обработчиков.
Another answer on SO также относится к последствиям производительности и ссылки на this test on jsPerf (в настоящее время недоступно, поскольку jsPerf закрыт для капитального ремонта).
Возможно, более полезными являются эти две демонстрации: создание 1000 элементов с помощью базовой линии, один раз with event delegation, в другой раз without.
Как видно из демонстрации, влияние значимо. В демонстрации установлены три события: mousedown
, mouseup
, click
- и время для создания страницы примерно удваивается в демоверсии без участия делегата.
С другой стороны, если вы посмотрите на исходный код, вы увидите, что некоторые вещи могут стать немного сложнее при использовании делегирования. Легко получить доступ к данным модели, когда вы привязываете обработчик к отдельному представлению элементов (this.model.get("number")
). Если вы используете делегирование, вы должны использовать косвенные способы. Итак, как всегда, - компромисс. Пока вы смотрите только на производительность, но нет.
Измерение? Зачем спрашивать мнение, можете ли вы иметь факты. Или вы ожидаете, что кто-то другой выполнит эту работу? – Mjh
@Mjh Я попросил второго мнения. Я хочу спросить, не повредит ли производительность сайта, если 400 детей имеют 400 событий или 400 детей имеют 1 событие на родительском уровне. –
Измерение. Не просите второго мнения, если вы можете это увидеть сами. Не ленитесь. Кроме того, здесь нет проблем с программированием. –