javascript - 官方 AngularJS UI Bootstrap $modal 示例中的内存泄漏?

标签 javascript angularjs memory-leaks angular-ui-bootstrap

我正在尝试了解如何避免 AngularJS 中的内存泄漏。似乎几乎没有关于要清理什么的文档,如果垃圾收集是完美且无所不知的话,这就像人们所期望的那样。但是,我的阅读表明很容易留下阻止垃圾收集的绑定(bind) DOM 元素,这 StackOverflow answer说我们必须手动取消绑定(bind)指令中设置的任何绑定(bind),并且规模较小,clean up $timeouts as well .我遇到了this article ,它指示我寻找“分离的”DOM 元素。

仅使用 sample $modal code from the AngularJS UI site ,我在打开和关闭模态对话框后发现了许多相当大的分离元素。它似乎不会随着重复点击而增长,但如果我有很多对话,每个对话似乎都会永远留下它的足迹。我尝试在关闭后设置 modalInstance = null,但这没有完成任何事情。

分离元素真的不好吗?如果是这样,应该如何AngularJS UI sample modal code进行修改以消除这些?

更重要的是,在使用 AngularJS 时,是否有任何简单明了的说明专门清理哪些内容?很高兴他们提供了一个 $on.$destroy 函数,但我找不到任何明确的说明来说明我负责清理什么,或者如何清理。

最佳答案

恐怕分离元素是更复杂的问题,会导致不受控制的内存泄漏。我研究了一种为我解决这个问题的方法。那就是可以通过自定义 $modal 工厂更改 native ui.bootstrap 模态行为,从而防止破坏和重新实例化对话框。所以 $modal 对话框变成了单例。

我已经在 github 上分享了我对这个解决方案的尝试:https://github.com/dhilt/angular-bootstrap-modal-singleton .我在我从事的项目中使用它。

关于javascript - 官方 AngularJS UI Bootstrap $modal 示例中的内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26414131/

相关文章:

javascript - 使用整数为美分的angularjs货币过滤器

javascript - ng-grid 上的升序/降序过滤器字符串

Java堆转储和堆分析后的堆大小不同

javascript - 使用监听器删除 dom 元素会导致内存泄漏吗?

c# - Command.Prepare() 导致内存泄漏?

javascript - Canvas 不会显示

JavaScript RegEx - 替换字符的第一次和最后一次出现

javascript - 我的切换 div 在崩溃时崩溃都是因为一个活跃的

javascript - SSRS - Javascript 报告加载事件

angularjs - 如何根据 bootstrap 网格系统使用 angularjs 指令设置 height = width 以获得方形 div?