Может добавить слушателей jQuery замедлить производительность браузера?

StackOverflow https://stackoverflow.com/questions/2629803

Вопрос

У меня есть приложение, которое приносит ответ через AJAX и создает 5-20 новых прослушивателей JQuery Click на каждом обновлении. Оба браузера IE и Mozilla, кажется, замедляются с использованием. Может ли это замедлить производительность браузера значительно. Могут ли слушатели быть «выпущенными»?

Это было полезно?

Решение

Слушатели установлены с использованием .bind() выпущены, когда элемент удален или .unbind()ред. Те, которые набор используют .live() сохраняться, пока вы не позвоните .die() Или элемент, который они связаны, удаляется (что может быть где-то в доме, если вы укажете, в противном случае он будет по умолчанию для корня DOM - .live() Работает, не связывающаяся с целевым элементом, поэтому элемент может быть удален / заменен / обновлен, и слушатели событий все еще связаны).

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

Другие советы

Чтобы добавить к тому, что Энди сказал о жизни.

Вы, вероятно, должны использовать делегирование или жить На элементах вы добавляете на страницу. Похоже, вы не связываете уникальные события к новым элементам (на каждом обновлении), а скорее повторные функции.

В JQuery 1.4.2 Использование может использовать делегат (), как это:

// the container,        the selector, "the event", the function to be called
$("#container").delegate(".selector",  "click",     function(){
  // do stuff...
});

Это нужно было бы назвать только один раз, и каждый новый элемент с классом «селектор», добавленный в «# Container», будет иметь связанный событие Click

Вы можете уничтожить слушатель, используя unbind:

$("a").unbind("click"); // remove click event handler(s)
$("a").unbind(); // remove all event handlers

и удалить live События с использованием die:

$("#foo").die(); // remove all live events
$("a").die("click"); // remove live click event handlers
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top