3

我在 AngularJS 中实现了音频播放器应用程序,但它消耗大量 RAM。我正在执行的操作顺序如下:

  1. 登录页面的路由
  2. 登录然后转到下一页
  3. 登出
  4. 重复步骤 1 到 3 几次

令人惊讶的是,第一步的内存是38 MB,然后在第二步之后增加到211 MB,在第三步之后是249 MB等等,所以它是累积的,并且在任何ng之后都没有释放内存-查看更改

这是我的代码示例:

index.html页面

<html ng-app="myApp">
   <head><!-- application dependencies (js and css files) --></head>
   <body>
      <div ng-view></div>
   </body>
</html>

app.js文件

var app = angular.module('myApp', ['ngRoute']);

app.config(['$routeProvider', '$locationProvider', '$httpProvider',
    function ($routeProvider, $locationProvider, $httpProvider) {
        $routeProvider.when('/login', {
            templateUrl: 'login.html',
            controller: 'loginController'
        });

        $routeProvider.when('/', {
            templateUrl: 'home.html',
            resolve:{/** resolve function for login checking */}
            controller: 'homeController'
        });
    }]);

我尝试了清理$templateCache的解决方案清除此问题的解决方案,但是在我尝试过的情况下,它不能成为解决方案,而且问题不在模板本身,而是DOM 和控制器数据有问题

我该如何处理这个内存问题,所以当我在 ng-view 中更改视图时它不会消耗所有这些内存(因为它不是模板大小)

更新1:

在解析登录数据并在注销后检查服务器的响应后,我在登录或注销时使用 $location.path('/route') 在视图之间切换,这可能是问题吗?

更新 2:

我创建了一个plunker来模拟过多切换视图时内存的增加(当然这不是实际数字,因为它是模拟)

4

2 回答 2

1

有趣的是,似乎loginController没有从内存中清除。您可能必须尝试触发$destroy()自己来清除该控制器。这假设它被多次加载。

其他一些可能有帮助的资源:关于类似 github 问题的博客文章$destroy()

于 2015-01-03T00:01:37.540 回答
0

我认为您需要实现基于angular-websocket的方法,类似于 Trello,在一定时间后,您要求用户更新他们的页面以接收系统的新更新或在他们的套接字连接超时时刷新?根据您的设置,您可能会发现本教程很有用:使用 Socket.IO 编写 AngularJS 应用程序

阅读您提到的问题的接受答案的最新更新。

于 2015-01-07T22:42:58.203 回答