Должен ли я удалить события перед изменением содержимого div? - PullRequest
2 голосов
/ 13 ноября 2011

Я унаследовал приложение jQuery, которое выполняет свою работу, вызывая службы AJAX, не покидая страницы.

Существует список элементов, в которых при нажатии на элемент отображается подробная информация об элементе, события, прикрепленные к кнопкам, затем html удаляется и создается новый html, присоединяются новые события и т. так далее.

Мне было интересно, будет ли сборщик мусора JavaScript автоматически очищать эти события, или они добавляются в какую-то Карту, такую ​​как структура данных, и создают утечку памяти. Я должен очистить их явно?

Ответы [ 3 ]

2 голосов
/ 13 ноября 2011

Если вы всегда связываете одни и те же события, вы также можете использовать что-то вроде jQuery live () или лайков вместо того, чтобы всегда связывать / отвязывать их.

2 голосов
/ 13 ноября 2011

Сборка мусора Javascript не удалит связанные события для удаленных элементов.jQuery часто работает do в зависимости от того, какой метод вы используете.

Например, .html() или .remove() удалит события, а не утечку памяти.Если вы сомневаетесь, вы всегда можете использовать .empty().


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

Кроме того, к вашему сведению оба .bind() и .live() устарели в последней версии jQuery (1.7).Они по-прежнему будут работать, но новый синтаксис - .on(), использующий делегирование вместо .live().Это потому, что слишком большое .live() действительно замедляет страницы, потому что каждый .live связывает другое событие с document, которое необходимо прослушивать и обрабатывать каждое отдельное событие.

1 голос
/ 13 ноября 2011

, если вы хотите упростить сборщик мусора и не заставлять его искать, если у него есть ссылки, поэтому вы должны отменить привязку всех событий к div.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...