Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Утечки памяти при addEventListener (https://javascript.ru/forum/events/52090-utechki-pamyati-pri-addeventlistener.html)

_0_ 03.12.2014 16:36

Утечки памяти при addEventListener
 
Вопрос к мастерам javascript:

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

Просьба аргументировать ссылкой.

kostyanet 03.12.2014 17:13

Ссылка на элемент не при чем. Можете не удалять если удаляется немного.

danik.js 03.12.2014 17:21

Дык какая разница че там имеет функция. Важно чтобы на функцию не было ссылок. С удалением элемента удалится и ссылка на приаттаченный обработчик. Так ведь?

_0_ 03.12.2014 17:25

да наверное, на всякий случай спросил, хотел пообщаться

kostyanet 03.12.2014 17:51

http://stackoverflow.com/questions/1...vent-listeners

krutoy 04.12.2014 11:13

Цитата:

Сообщение от _0_
в ситуации если добавляемая функция не имеет в своем замыкании ссылку на элемент?

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

krutoy 04.12.2014 11:48

Цитата:

Сообщение от _0_
перед удалением элемента

и тут еще важно, что вы подразумеваете под удалением
<html>
<head>
</head>

<body>
<script>

el=document.createElement("div")
el.innerHTML="div"
document.body.appendChild(el)
el.addEventListener("click", function(){alert(1)})

document.body.removeChild(el) // элемент никуда не делся, обработчик тоже

document.body.appendChild(el)

</script>
</body>
</html>

Gvozd 04.12.2014 22:26

Цитата:

Сообщение от krutoy
В современных движках, вроде, нет проблемы циклических ссылок. GC идет от рута, вроде, всегда.

Не все так просто
GC от рута это последний эшелон, если не удалось подчистить память сразу.
И да, он более медленный чем удаление объектов без циклических ссылок(которые могут быть удалены просто по обнулению количества ссылок на себя)

Но эти проблемы могут вас начать волновать на больших объемах вычислений

krutoy 04.12.2014 22:45

Цитата:

Сообщение от Gvozd
если не удалось подчистить память сразу.

ни "если", а он по любому проходит, поскольку удаление всех обнуленных объектов не гарантирует отсутствия циклических ссылок, иначе смысла swap&sweep не было бы. GC не может волшебным образом узнать, очищена ли память, не пройдя все от рута, он не экстрасенс.


Часовой пояс GMT +3, время: 17:03.