Следует ли удалять / отключать MutationObservers при удалении подключенного DOM-узла, например, removeEventListener для событий? - PullRequest
0 голосов
/ 29 июня 2018

Здесь встречается почти идентичный вопрос: Если IntersectionObserver будет отключен при удалении элемента

Я не нашел документации, в которой указано, что делать, когда элемент - с прикрепленным MutationObserver (MO) - удаляется из DOM. API не предоставляет метод удаления, такой как removeEventListener, это просто временный метод disconnect, который касается только дочерних узлов. Сборка мусора в конечном итоге произойдет, но, похоже, она может запутаться / раздуться в веб-приложении SPA. Я мог бы использовать ключевое слово delete, чтобы удалить переменную, содержащую МО, но при этом я прочитал предостережения (не обязательно для МО) вместо того, чтобы позволить сборке мусора обрабатывать его.

Итак, я ищу официальную информацию, такую ​​как «МО удаляются, когда удаляется связанный элемент DOM», или «МО автоматически собирают мусор, когда назначенная переменная больше не используется», или «МО следует удалять из их родительский объект, если они больше не используются "и т. д.

Спецификация: https://dom.spec.whatwg.org/#mutation-observers

1 Ответ

0 голосов
/ 29 июня 2018

Поскольку я больше изучал эту тему, мне показалось, что я нашел ответ.

С точки зрения сбора мусора МО тесно связаны с элементами DOM, тогда как их потомки слабо связаны. Таким образом, кажется, что вы удаляете элемент DOM всякий раз, а сборка мусора должна обрабатывать все остальное.

Официальный ответ https://dom.spec.whatwg.org/#garbage-collection:

4.3.4. Сборка мусора

Узлы имеют сильную ссылку на зарегистрированных наблюдателей в своем списке зарегистрированных наблюдателей.

Зарегистрированные наблюдатели в списке зарегистрированных наблюдателей узла имеют слабую ссылку на узел.

...