更改 ng 视图内容后,不会释放保留的内存
Memory reserved is not freed after changing ng-view content
我在AngularJS中实现了音频播放器应用程序,但它消耗了大量的RAM。我正在执行的操作顺序如下:
- 路由到登录页面
- 登录,然后转到下一页
- 注销 多次
- 重复 1 到 3 的步骤
令人惊讶的是,第一步的内存是 38 MB,然后在第二步之后增加到 211 MB,第三步之后增加到 249 MB,依此类推,因此它是累积的,并且在任何 ng-view 更改后都不会释放内存
这是我的代码示例:
索引.html 页
<html ng-app="myApp">
<head><!-- application dependencies (js and css files) --></head>
<body>
<div ng-view></div>
</body>
</html>
应用程序.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,可以模拟切换视图过多时内存的增加(当然这不是实际数字,因为它是模拟)
有趣的是,似乎loginController
没有从内存中清除。您可能需要尝试自己触发$destroy()
以清除该控制器。这假定它被加载了多次。
其他一些可能有帮助的资源:关于$destroy()
的博客文章有点类似的 github 问题
我认为您需要实现基于 angular-websocket 的方法,类似于 Trello,在一定时间后,您要求用户更新他们的页面以接收系统的新更新或在他们的套接字连接超时时刷新?根据您的设置,您可能会发现本教程很有用:使用 Socket.IO 编写 AngularJS 应用程序。
阅读您所提出的问题的已接受答案的最新更新。
- 分派点击事件并保留击键修饰符
- 如何使用jquery强制一个单词更改大小写等以保留品牌
- 提交后保留下拉选择的值
- 刷新后保留对网页的更改
- 在mvc应用程序中,在回发时保留最初隐藏的文本框的隐藏或可见状态
- Flash Uploadify在调用我的MVC控制器时没有保留会话/授权
- 当设置addFromAutocompleteOnly时,剩余文本将保留在输入字段中
- 使用递归属性迭代保留属性结构
- Jquery html() 和保留元素名称
- 如何将字符串拆分为字符,但在javascript中保留空格
- 离开页面导航后保留文本区域内容
- 如何在使用JavaScript或jQuery刷新父页面后保留iframe-src
- Javascript和RegEx:拆分并保留分隔符
- 如何生成保留标点符号的简单字谜
- 显示:阻止/无html元素,css.not从内存中释放
- 如何设置类型化对象的属性,同时保留它's类型
- 关闭谷歌地图中推荐的骑行道路,但保留专用自行车道
- 在IndexedDB中保留空间
- 如何使网络应用程序保留信息
- 更改 ng 视图内容后,不会释放保留的内存