Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 永远不要断开变异观察者的连接_Javascript - Fatal编程技术网

Javascript 永远不要断开变异观察者的连接

Javascript 永远不要断开变异观察者的连接,javascript,Javascript,不断开MutationObserver的连接是否不好 我正在对添加到DOM中的新元素执行观察,但从未执行显式断开连接。这会导致内存问题吗?如果您只需要一次MutationObserver(例如用于初始化或其他),则应在不再使用它后将其断开。这可能会也可能不会释放一些内存,但肯定会减少CPU负载 如果您的网站正常运行需要您的MutationObserver,并且只有在用户关闭选项卡或窗口时才需要断开连接,我会说不需要断开连接,因为浏览器无论如何都必须清理。我的意思是,你也可以注销事件处理程序,但没

不断开MutationObserver的连接是否不好


我正在对添加到DOM中的新元素执行观察,但从未执行显式断开连接。这会导致内存问题吗?

如果您只需要一次MutationObserver(例如用于初始化或其他),则应在不再使用它后将其断开。这可能会也可能不会释放一些内存,但肯定会减少CPU负载

如果您的网站正常运行需要您的MutationObserver,并且只有在用户关闭选项卡或窗口时才需要断开连接,我会说不需要断开连接,因为浏览器无论如何都必须清理。我的意思是,你也可以注销事件处理程序,但没有人真的这么做。当然,没有人会删除他们所有的函数和变量,他们希望浏览器会这样做。
断开MutationObserver的连接可能会更快,因为清理代码(几乎可以肯定)是用机器代码编写的,机器代码的执行速度比JavaScript快得多。不过,这种差异很可能是不明显的

既然你明确要求

这会导致内存问题吗

是的,它可能会造成内存泄漏。但是,如果浏览器没有执行适当的清理,那么声明变量也是可能的,这将是该浏览器中的一个错误。

假设一个正常的环境,你不需要断开你的MO就可以了。

你的意思是,你需要你的MutationObserver在整个网站浏览期间做一些事情吗?@Siguza至少当某些jQuery使用此功能打开时,如果你正在观察的节点的父节点从文档中删除了怎么办?如果代码引用了该节点,您仍然可以引用该节点,但是MutationObservers是否未注册?@NoBugs只要您有引用,您仍然可以将其再次添加到DOM中,因此不应断开任何观察者的连接。我是为了测试这一点而创建的,Chrome、FF、Safari和Opera都不会断开连接。但是,如果您不再引用节点和观察者,垃圾收集器最终应该启动,并以静默方式将两者淘汰(IE可能除外,因为IE已损坏)。您可以通过向节点添加大量观察者,将其从DOM中删除,并观察浏览器的内存使用情况来测试这一点。