Производительность в реальном времени

Недавно я обнаружил , что плагин livequery для jQuery может быть довольно расточительным, поскольку он не использует делегирование событий, но связывает все связанные события и повторно проверяет весь DOM при каждом изменении

Если у кого-то есть дополнительная информация или предложения по лучшим практикам с использованием livequery и .live(), я был бы очень благодарен

Ответ 1

Редко, что вам действительно нужен плагин, например livequery. Вероятно, единственный раз, когда вы действительно нуждаетесь в этом, вам нужно отреагировать на изменения в DOM, сделанные другим кодом jQuery, который вы не можете изменить.

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

Лучшей альтернативой (IMO) для обоих из них является delegate() (docs), который использует делегирование событий точно так же, как .live(), но позволяет ограничить его определенной частью страницы.

$('#someContainer').delegate('a.someButton', 'click', function() {
    // do something when an "a.someButton" inside "#someContainer" is clicked
});

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