Javascript 未垃圾收集的DOM节点

Javascript 未垃圾收集的DOM节点,javascript,memory-leaks,garbage-collection,google-chrome-devtools,Javascript,Memory Leaks,Garbage Collection,Google Chrome Devtools,我有一个关于使用Chrome的开发工具调试单页web应用程序中的内存泄漏的问题 根据Google的说法,在拍摄堆快照后,您将看到红色和黄色分离的DOM节点。黄色节点是JavaScript仍在引用的节点,有效地表示泄漏的原因。红色节点在JavaScript中没有直接引用,但它们仍然“活动”——可能是因为它们是黄色节点DOM树的一部分 通过深入查看堆快照中的所有黄色节点,并找到代码中仍然存在对它们的引用,我已经能够修复一些内存泄漏。但是,现在我遇到了一个不确定如何处理的情况:堆快照中只显示红色节点

我有一个关于使用Chrome的开发工具调试单页web应用程序中的内存泄漏的问题

根据Google的说法,在拍摄堆快照后,您将看到红色和黄色分离的DOM节点。黄色节点是JavaScript仍在引用的节点,有效地表示泄漏的原因。红色节点在JavaScript中没有直接引用,但它们仍然“活动”——可能是因为它们是黄色节点DOM树的一部分

通过深入查看堆快照中的所有黄色节点,并找到代码中仍然存在对它们的引用,我已经能够修复一些内存泄漏。但是,现在我遇到了一个不确定如何处理的情况:堆快照中只显示红色节点

如果没有对这些节点的JavaScript引用,那么它们不会被垃圾收集的其他原因是什么?还有,为什么它说有155个条目,但只显示60个?我想知道Chrome是否只是没有显示一个或多个黄色节点:


根据您的请求,将其添加为asnwer。您是否查看了关于这些DOM元素的更多细节,以了解它们是哪些DOM元素,这可能会为您提供一条线索,让您知道哪些代码会引用它们。让一些人感到困惑的一个参考源是您已经使用过的闭包,但由于某些原因仍然存在。

您是否使用过
eval()
在您的代码中?您是否查看了这些DOM元素的更多详细信息,以了解它们是哪些DOM元素,也许这会为您提供一条线索,让您知道哪些代码会引用它们。让一些人感到困惑的一个参考源是您已经使用过的闭包,但由于某些原因仍然存在。在快速搜索该项目后,我发现我们正在使用的几个第三方库(require.js、history.js、pubnub.js)确实进行了
eval()
调用。现在,我假设问题不在于这些库,但为什么在这种情况下询问
eval()
?我认为这可能会造成闭包泄漏,因为当在一个永久保留的函数中调用
eval
时(比如像事件处理程序一样),JS引擎将无法清理处理程序关闭的变量,因为它不知道eval'd字符串是否将引用其中一个变量。但现在我想起来了,这仍然需要一个变量引用。。。所以我不太确定。@jfriend00我想你可能知道了一些事情,但我已经用尽了我能找到的所有相关结论,问题仍然存在。我仍然想知道为什么Chrome说有155个条目,但只显示60个条目。对于其他大型DOM树,底部总是有一个按钮,上面写着“Show100More”(或类似的东西)。