当附加的 DOM 节点像事件的 removeEventListener 一样被移除时,MutationObservers 应该是 removed/disconnected 吗?
Should MutationObservers be removed/disconnected when the attached DOM node is removed like removeEventListener for events?
这里发现了一个几乎相同的问题:Should an IntersectionObserver be disconnected when element is removed
我还没有找到说明从 DOM 中删除一个元素(带有附加的 MutationObserver
(MO))时应该做什么的文档。 API 没有像 removeEventListener
那样提供 remove 方法,只是一个临时的 disconnect
方法,只涉及子节点。垃圾收集最终会出现,但似乎它可以在 SPA webapp 中获得 messy/bloated。我可以使用 delete
关键字来删除保存 MO 的变量,但我已经阅读了这样做的注意事项(不一定适用于 MO)而不是让垃圾收集处理它。
所以我正在寻找"MOs are removed when the associated DOM element is removed,"或"MOs are automatically garbage collected when the assigned variable is no longer used"或"MOs should be deleted from their parent object if they are no longer being used,"等官方信息
随着我对这个话题的深入研究,我似乎找到了答案。
在垃圾回收的眼中,MO 与 DOM 元素紧密耦合,而它们的后代是松耦合的。所以看起来你删除了 DOM 元素,垃圾收集应该处理其余的。
官方回答https://dom.spec.whatwg.org/#garbage-collection:
4.3.4. Garbage collection
Nodes have a strong reference to registered observers in their registered observer list.
Registered observers in a node’s registered observer list have a weak reference to the node.
这里发现了一个几乎相同的问题:Should an IntersectionObserver be disconnected when element is removed
我还没有找到说明从 DOM 中删除一个元素(带有附加的 MutationObserver
(MO))时应该做什么的文档。 API 没有像 removeEventListener
那样提供 remove 方法,只是一个临时的 disconnect
方法,只涉及子节点。垃圾收集最终会出现,但似乎它可以在 SPA webapp 中获得 messy/bloated。我可以使用 delete
关键字来删除保存 MO 的变量,但我已经阅读了这样做的注意事项(不一定适用于 MO)而不是让垃圾收集处理它。
所以我正在寻找"MOs are removed when the associated DOM element is removed,"或"MOs are automatically garbage collected when the assigned variable is no longer used"或"MOs should be deleted from their parent object if they are no longer being used,"等官方信息
随着我对这个话题的深入研究,我似乎找到了答案。
在垃圾回收的眼中,MO 与 DOM 元素紧密耦合,而它们的后代是松耦合的。所以看起来你删除了 DOM 元素,垃圾收集应该处理其余的。
官方回答https://dom.spec.whatwg.org/#garbage-collection:
4.3.4. Garbage collection
Nodes have a strong reference to registered observers in their registered observer list.
Registered observers in a node’s registered observer list have a weak reference to the node.