LINUX.ORG.RU

возможна ли утечка в addEventListener?

 


0

1

Че то подумал сейчас, добавляем мы какой то элемент в это говно, там под ковром происходит что-то вроде того, что создается ссылка на этот элемент, типа, по этой ссылке достается этот элемент, на него вешается обработчик. А что будет, если мы удаляем этот элемент со страницы? Если внутрях листенера осталась ссылка на него, он не удалится из памяти. Может тогда не стоит его вообще использовать?

Нет, невозможна.

А что будет, если мы удаляем этот элемент со страницы? Если внутрях листенера осталась ссылка на него, он не удалится из памяти.

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

Если особо параноишь, можешь явно вызывать removeEventListener перед удалением.

Но я бы вообще лучше вешал обработчики на что-то заведомо неудаляемое, а срабатывание на конкретный селектор определял по таргету через .matches/.closest/.classList.contains в зависимости от ситуации. Ибо слишком много дом-листенеров - смерДь производительности.

border-radius
()
Последнее исправление: border-radius (всего исправлений: 2)
Ответ на: комментарий от filequest

Запусти в бесконечном цикле, если всё повиснет, значит утечка есть.

sholom
()

Сборщик мусора должен уметь чистить циклические ссылки. Если GC этого не умеет, то это говно, а не GC. Если я, конечно, правильно понял вопрос.

anonymous
()
Ответ на: Нет, невозможна. от border-radius

Но я бы вообще лучше вешал обработчики на что-то заведомо неудаляемое, а срабатывание на конкретный селектор определял по таргету через .matches/.closest/.classList.contains в зависимости от ситуации.

А на каждое действие матчить это, конечно, не смерть, ага. В крайности ударяться не надо.

anonymous
()
Ответ на: комментарий от anonymous

Так не обязательно вешать на весь документ. Вешать на ближайший неудаляемый родительский контейнер - это не крайности.

border-radius
()
Последнее исправление: border-radius (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.