Исходя из моего опыта, лучше (с точки зрения производительности) переинициализировать (отсоединить, а затем снова связать обработчики событий), чем использовать .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 замедлить это (возможно, слишком много стилей или неоптимизированный макет)?

Ответы на вопрос(1)

Ваш ответ на вопрос