angularjs – 如何捕捉内存泄漏在Angular应用程序?
我有一个webapp写的AngularJS基本上轮询一个API到两个端点。所以,每一分钟,它轮询,看看有没有什么新的。
我发现它有一个小的内存泄漏,我已尽力找到它,但我不能这样做。在这个过程中,我已经设法减少我的应用程序的内存使用,这是伟大的。 没有做任何其他事情,每次轮询可以看到内存使用率的峰值(这是正常的),然后它应该下降,但它总是增加。我把数组的清理从[]更改为array.length = 0,我认为我确信引用不会持久,所以它不应该保留任何这一点。 我也试过这个:https://github.com/angular/angular.js/issues/1522 但没有运气… 所以,这是两个堆之间的比较: 大多数泄漏似乎来自(array),如果我打开,是通过解析API调用返回的数组,但我确信他们没有被存储: 这基本上是结构: poll: function(service) { var self = this; log('Polling for %s',service); this[service].get().then(function(response) { if (!response) { return; } var interval = response.headers ? (parseInt(response.headers('X-Poll-Interval'),10) || 60) : 60; services[service].timeout = setTimeout(function(){ $rootScope.$apply(function(){ self.poll(service); }); },interval * 1000); services[service].lastRead = new Date(); $rootScope.$broadcast('api.'+service,response.data); }); } 基本上,假设我有一个卖方服务,所以,这将是服务变量的值。 然后,在主视图中: $scope.$on('api.sellings',function(event,data) { $scope.sellings.length = 0; $scope.sellings = data; }); 并且视图有一个ngRepeat根据需要呈现。我花了很多时间试图自己想出这一点,我不能。我知道这是一个困难的问题,但是,有谁有任何想法如何跟踪这? 编辑1 – 添加promise showcase: 这是两个服务使用的函数makeRequest: return $http(options).then(function(response) { if (response.data.message) { log('api.error',response.data); } if (response.data.message == 'Server Error') { return $q.reject(); } if (response.data.message == 'Bad credentials' || response.data.message == 'Maximum number of login attempts exceeded') { $rootScope.$broadcast('api.unauthorized'); return $q.reject(); } return response; },function(response) { if (response.status == 401 || response.status == 403) { $rootScope.$broadcast('api.unauthorized'); } }); 如果我注释掉$ scope。$ on(‘api.sellings’)部分,泄漏仍然存在,但下降到1%。 PS:我使用最新的Angular版本到目前为止 编辑2 – 在图像中打开(数组)树 它的一切都像这样,所以它是相当无用的imho (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |