我想知道为什么 - 即使在使用AngularJS的简单SPA应用程序中,似乎也存在DOM泄漏。我可能会误解这个,但我看待这个的方式是分配的DOM元素没有被正确释放。 复制程序如下:
在屏幕截图中,您可以看到在添加项目并将其删除后,垃圾回收后似乎还有两个DOM元素(从502跳转到504个DOM元素)。
我希望有人能够在深入研究正在发生的事情之前对此有所了解。这个测试的原因是我正在研究的AngularJS SPA更加复杂,而且它似乎也在泄漏内存。
答案 0 :(得分:1)
我现在正在做类似的事情。我注意到的是几件事: 1)查看$(window).fn()的任何用法 - 其中fn是window对象上的任何函数;如果您不止一次这样做,那么您将多个事件处理程序添加到全局对象中会导致内存泄漏
2)$ rootScope。$ watch() - 同样,如果您不止一次这样做(比如,在加载指令时),那么您需要向全局对象添加多个处理程序
3)在我的测试中(我在两页之间来回),在垃圾收集开始之前,Chrome似乎消耗了大量内存(在我的情况下,几乎是1GB)。也许当你点击&#时34;垃圾收集" chrome实际上不是在做GC吗?或者它是javacsript的GC而不是dom元素?
4)如果你向dom元素添加一个事件处理程序,然后从dom中删除它,处理程序永远不会得到GC。