【问题标题】:How to reduce/remove memory leaks in Angular application如何减少/消除 Angular 应用程序中的内存泄漏
【发布时间】:2014-04-19 07:12:56
【问题描述】:

我正在优化我的大Angular App。我发现Google DevTools 非常适合检测问题。由于我刚刚开始了解DevTools,我对内存泄漏感到非常困惑。

当我在我的应用程序中来回移动到不同页面时,配置文件堆快照大小一次又一次地增加,所以我认为有些对象没有被 GC 清理,这就是我的应用程序在一段时间后变慢的原因如何解决这个问题。请帮忙。

注意

这是我使用 DevTools 所理解的,如果我错了,请纠正我。欢迎提出其他建议。

到目前为止我用过的

  1. AngularOnce 指令用于在需要时减少监视。
  2. QuickList 指令将 ng-repeat 替换为 quick-ng-repeat
  3. InView 指令,用于处理大型列表,因此我正在删除不在视口中的 DOM。
  4. ngInfiniteScroll 指令的延迟加载方法。

【问题讨论】:

  • 这是一个很好的例子,说明您需要提供什么样的信息才能让某人能够提供一个体面的答案:stackoverflow.com/questions/20654684/…
  • 对此答案的更新——现在 angular 1.3.x 已经发布,您可以在大多数情况下使用:: bind-once 方法,而不是添加另一个依赖项来处理这个问题。跨度>
  • 如果您使用 AngularUI 路由器,请注意它的内存泄漏。 github.com/angular-ui/ui-router/issues/545

标签: angularjs memory-leaks google-chrome-devtools


【解决方案1】:
  1. 删除绑定以避免内存泄漏,使用范围 $destroy() 方法。

    注意:

    Angular 内存泄漏最可能的罪魁祸首是 你的指令。如果您在指令中附加事件侦听器 使用 JQuery 插件,后者将保留对您的 DOM 的引用 即使在 Angular 删除了它自己对 DOM 的引用之后,这意味着 它永远不会被浏览器垃圾收集,反过来 意思是你记忆中的“分离的 DOM 树

    在您的指令中保持练习解除 jQuery 事件的绑定。 $destory 方法,可用于在执行之前清理 DOM 绑定 元素已从 DOM 中移除。

     $scope.$on("$destroy",function() {
        $( window ).off( "resize.Viewport" );
     });    
    
  2. 不要忘记在你的 $destroy 事件中取消 $timeout 计时器 AngularJS

    $scope.$on("$destroy",function( event ) {
        $timeout.cancel( timer );
    });
    

【讨论】:

  • here是你提到的全文。
  • Linky 遭受链接腐烂,网站已失效,但是,Wayback 已将其存档。
猜你喜欢
  • 1970-01-01
  • 2012-12-27
  • 1970-01-01
  • 2013-07-12
  • 1970-01-01
  • 2014-01-06
  • 2015-10-14
  • 1970-01-01
  • 2017-05-10
相关资源
最近更新 更多