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

标签 angularjs memory-leaks google-chrome-devtools

我正在优化我的大型 Angular App .正如我发现的 Google DevTools很好的发现问题。因为我刚刚开始了解 DevTools ,我对内存泄漏感到很困惑。

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

备注

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

到现在为止我用过的

  • AngularOnce在需要时减少监视的指令。
  • quick-ng-repeat 替换 ng-repeat 的 QuickList 指令.
  • InView指令,用于处理大型列表,因此我正在删除不在视口(viewport)中的 DOM。
  • 来自 ngInfiniteScroll 的延迟加载方法指示。
  • 最佳答案

  • 删除绑定(bind)以避免内存泄漏,使用范围
    $destroy()方法。

    注:

    The most likely culprit of memory leak in Angular is JQuery used in your directives. If you attach an event-listener in your directive using a JQuery plugin, the latter would keep a reference to your DOM even after Angular deletes its own reference to the DOM, which means it would never be garbage-collected by the browser, which in turn means “Detached DOM tree” in your memory



    在您的指令中,请继续练习解除 jQuery 事件的绑定(bind)。
    $destory 方法,可用于在执行之前清理 DOM 绑定(bind)
    元素从 DOM 中移除。
     $scope.$on("$destroy",function() {
        $( window ).off( "resize.Viewport" );
     });    
    
  • 不要忘记在你的 $destroy 事件中取消 $timeout 计时器
    AngularJS
    $scope.$on("$destroy",function( event ) {
        $timeout.cancel( timer );
    });
    
  • 关于angularjs - 如何减少/消除 Angular 应用程序中的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22397484/

    相关文章:

    javascript - IndexedDB 添加条目显示成功,但未显示在 chrome 开发工具中

    google-chrome-extension - 如何在 Chrome JS 控制台中进入内容脚本的沙盒环境

    selenium - 检查元素在所有行折叠之前仅显示元素几秒钟

    c++ - 为什么这里没有内存泄漏

    memory-management - 当我们删除该模块时,内核模块泄漏的内存是否会返回到系统?

    angularjs - Ag-grid 显示行数

    angularjs - ng-include 禁止运行路由

    java - JdbcRowSet 中的内存泄漏

    java - angularJS ng-dropdown-multiselect 实现无限滚动的滚动事件

    javascript - 停止在路线更改时重新加载整个内容