gpt4 book ai didi

angularjs - 了解 AngularJS 和 Google Chrome 内存管理

转载 作者:行者123 更新时间:2023-12-03 06:48:21 27 4
gpt4 key购买 nike

我想知道为什么 - 即使在使用 AngularJS 的简单 SPA 应用程序上也似乎存在 DOM 泄漏。我可能会误解这一点,但我的看法是分配的 DOM 元素没有正确释放。重现过程如下:

  • 使用简单的 AngularJS 应用程序导航到屏幕截图上的页面
  • 在开发者工具中开启时间线记录
  • 强制垃圾回收
  • 添加一个项目,然后将其删除
  • 强制垃圾回收
  • 重复最后两个步骤至少 3 次

在屏幕截图中,您可以看到添加一个项目并删除它后,垃圾回收后似乎又多了两个 DOM 元素(从 502 个 DOM 元素跳转到 504 个 DOM 元素)。

我希望在我深入调查正在发生的事情之前有人能对此有所了解。进行此测试的原因是我正在开发的 AngularJS SPA 更复杂,而且似乎也会泄漏内存。

simple angularjs memory consumption timeline

最佳答案

我现在也在做类似的事情。我注意到有几件事:1) 查看 $(window).fn() 的任何用法——其中 fn 是 window 对象上的任何函数;如果您多次这样做,则会向全局对象添加多个事件处理程序,这会导致内存泄漏

2) $rootScope.$watch() -- 类似地,如果您多次执行此操作(例如,在加载指令时),那么您将向全局对象添加多个处理程序

3) 在我的测试中(我在两个页面之间来回切换),在垃圾收集开始之前,chrome 似乎消耗了大量内存(在我的例子中,几乎 1GB)。也许当你单击“垃圾”时collection” chrome实际上不是在做GC吗?或者它是针对 javacsript 的 GC,但不是针对 dom 元素的 GC?

4) 如果将事件处理程序添加到 dom 元素,然后将其从 dom 中删除,则处理程序永远不会被 GC 回收。

关于angularjs - 了解 AngularJS 和 Google Chrome 内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22270391/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com