当删除附加的DOM节点(如事件的removeEventListener)时,是否应该删除/断开MutationObservers?

时间:2018-06-29 16:46:50

标签: javascript mutation-observers

在这里找到一个几乎相同的问题:Should an IntersectionObserver be disconnected when element is removed

我还没有找到说明从DOM中删除带有附加MutationObserver(MO)的元素时应该怎么做的文档。 API不提供像removeEventListener这样的remove方法,而只是一个仅涉及子节点的临时disconnect方法。垃圾收集最终会出现,但似乎在SPA webapp中会变得凌乱//肿。我可以使用delete关键字来删除保存MO的变量,但是我已经读过有关这样做的警告(不一定是MO),而不是让垃圾回收来处理它。

因此,我正在寻找官方信息,例如“当删除关联的DOM元素时删除了MO,”或“当不再使用分配的变量时会自动对MO进行垃圾收集”或“应从以下位置删除MO:他们的父对象(如果不再被使用)”等。

规范:https://dom.spec.whatwg.org/#mutation-observers

1 个答案:

答案 0 :(得分:2)

随着我对该主题的研究越来越深入,看来我找到了答案。

在垃圾回收看来,MO与DOM元素紧密耦合,而其后代则松散耦合。因此,似乎您可以随时删除DOM元素,而垃圾回收应该可以处理其余部分。

官方回答https://dom.spec.whatwg.org/#garbage-collection

  

4.3.4。垃圾收集

     

节点在其注册观察者列表中强烈引用了注册观察者。

     

节点的注册观察者列表中的注册观察者对该节点的引用微弱。