Я бы предположил, что он требует меньше памяти, но требует больше ресурсов процессора, поскольку он назначает одну функцию-обработчик для каждого события / селектора, но для этого необходимо запустить тест для сопоставлять с этим селектором для каждого события такого типа, которое происходит на странице, чтобы проверить, соответствует ли оно.
На самом деле, хотя я не углубился в то, как это работает, я бы подумал, что ему нужно будет запустить тест на совпадение с селектором для каждого элемента из e.target
на до document
(или до тех пор, пока он не найдет совпадение), чтобы увидеть, соответствует ли что-нибудь по пути селектору. Кто-то другой может исправить меня, если я ошибаюсь.
Тем не менее, когда вы делаете $('.someClass').click(function() {})
, он тоже использует только одну функцию-обработчик. Так что если есть 100 элементов с .someClass
, все они будут использовать одну и ту же функцию, но jQuery действительно должен создать уникальную запись в jQuery.cache
для каждого элемента, который получает этот обработчик, и поэтому должен управлять ими так, как если бы они были отдельными.
Метод .delegate()
- хороший компромисс между ними.
Он ведет себя так же, как и .live()
, за исключением того, что вы назначаете его локальной части страницы, поэтому он обрабатывает только клики в этом разделе. Поэтому не нужно учитывать каждое событие, которое происходит на странице. Скорее только те, которые происходят внутри этого контейнера.
РЕДАКТИРОВАТЬ: Улучшено выражение того, что делает двигатель селектора, с учетом @ Šime Vidas .