如何减少/消除Angular应用程序中的内存泄漏

Jay*_*kla 30 memory-leaks google-chrome-devtools angularjs

我正在优化我的大Angular App.正如我发现一个Google DevTools非常好的检测问题.正如我刚开始学习的那样DevTools,我对内存泄漏感到非常困惑.

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

注意

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

直到现在我用过的东西

  1. AngularOnce指令,可在需要时减少监视.
  2. QuickList指令用快速重复取代ng-repeat.
  3. InView指令,处理大型列表,所以我删除不在视口中的DOM.
  4. 来自ngInfiniteScroll指令的延迟加载方法.

JQu*_*uru 37

  1. 删除绑定以避免内存泄漏,使用Scopes $ destroy()方法.

    注意:

    Angular中最可能出现内存泄漏的罪魁祸首是你的指令中使用的JQuery.如果你使用JQuery插件在你的指令中附加一个事件监听器,后者即使在Angular删除它自己对DOM的引用之后也会保留对你的DOM的引用,这意味着它永远不会被浏览器垃圾收集,在转向意味着你的记忆中的" 分离的DOM树 "

    在你的指令中,保持练习解除jQuery事件的绑定.$ destory方法,可以在从DOM中删除元素之前清除DOM绑定.

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

    $scope.$on("$destroy",function( event ) {
        $timeout.cancel( timer );
    });
    
    Run Code Online (Sandbox Code Playgroud)

  • [这里](http://blog.cycle-interactive.com/?p=524)是你提到的完整文章. (4认同)
  • 链接已经遭受链接腐烂和网站失效,但是,[Wayback](https://web.archive.org/web/20150914164040/http://blog.cycle-interactive.com/?p=524)已存档. (2认同)