Исходя из моего опыта, лучше (с точки зрения производительности) переинициализировать (отсоединить, а затем снова связать обработчики событий), чем использовать .live или .delegate. Таким образом, вы должны достичь нужной вам производительности. Практически я бы определил порог, где делегат становится медленным, удалил все привязки и заново связал eventHandlers с существующим набором элементов.
я есть визуальный список таких предметов:
http://jsfiddle.net/viatropos/XCe3T/1/
В реальном приложении я загружаю всего 200 элементов. Но проблема в том,click
Событие занимает почти одну секунду, чтобы вызвать обработчик, даже всего с 200 элементами.mouseover
Событие обратного вызова выполняется немедленно, независимо от того, сколько элементов в списке.
Мой вопрос: разве метод делегата не должен быть таким же быстрым, независимо от того, сколько элементов на странице? Все, что я делаю, это:
$("body").delegate("a", "click", function(event) { console.log($(event.target).get(0)); return false; }
Если вы перейдете к приведенному выше примеру jsfiddle и веб-инспектору и нажмете ссылку в отображаемом результате, он добавит еще 200 элементов. Обратите внимание, что чем больше элементов вы добавляете, тем медленнее они становятся. Странно то, что если вы начинаете с 6000 элементов, делегирование / клик выполняется намного быстрее, чем если вы начинаете с 2000 и добавляете 200 за раз, пока не получите 6000.
Каковы ваши мысли, как я могу улучшить производительность jQuerydelegate
метод дляclick
мероприятие? Может ли CSS замедлить это (возможно, слишком много стилей или неоптимизированный макет)?