4
我有我的angular.js應用程序中似乎是內存泄漏。基本上,該頁面由一個信息表組成,該信息表每五秒從AJAX調用的JSON編碼結果更新。我創建了一個簡單的jsfiddle版本在這裏:http://jsfiddle.net/alalonde/TtGXW/6/Angular.js內存泄漏與ngRepeat上查詢數據
控制器:
function HostController($scope, $timeout, Data) {
$scope.encoders = Data.load();
$scope.refreshInterval = 5;
$scope.reload = function() {
$scope.encoders = Data.load();
};
$timeout(function doReload() {
$scope.reload();
$timeout(doReload, $scope.refreshInterval * 1000);
}, 5000);
}
模板的一個片段:
<table class="table table-striped table-bordered" ng-controller="HostController">
<tr>
<th>Status</th>
<th>...
</tr>
<tr ng-repeat="enc in encoders">
<td>
<div>{{ enc.name }}</div>
<div ng-show="enc.version">
v{{ enc.version.major }}.{{ enc.version.minor }}-{{ enc.version.rev }}
<span ng-show="enc.version.user">- {{ enc.version.user }}</span>
</div>
</td>
</tr>
</table>
當考慮在Chrome每分鐘左右堆快照,內存使用量每次都會略有增加。我已經將Igor Minar的修復應用到了我的本地angular.js(https://github.com/angular/angular.js/commit/bd524fc4e5fc0feffe85632a7a6560da6bd9b762),這對我有所幫助,但內存使用情況仍然無情地蔓延。
任何有關使用Chrome內存分析器與angular.js的提示將不勝感激。
我無法在jsfiddle中重現mem泄漏。我離開了應用程序運行了一段時間,我看到的只是通常的GC模式,一旦有足夠的垃圾積累,釋放內存。 jsfiddle實際上是否泄漏到您的機器上?你能提供瀏覽器版本信息嗎? – 2013-02-18 08:04:46
如果問題確實是可重現的,請在https://github.com/angular/angular.js/issues上提供錯誤。 – 2013-02-18 18:43:24
這裏是我的Chrome內存分析器的屏幕截圖(http://files.boxelderweb.com/angular-chrome-memory-profiler.png)。我將refreshInterval更改爲1秒以加快速度。 15分鐘左右增加0.47MB。展開(數組)列表,似乎所有HTML元素下面,包括
回答
當我輪詢數據並使用ng-repeat遍歷它並呈現行時,我遇到了與內存消耗相同的問題。
當我使用「item in items」時,我得到的內存使用量不斷增加,但是當我使用「items in item track by $ index」時,內存使用情況穩定並且GC正確清理。
來源
2013-10-09 16:22:03
我有一個內存泄漏問題,併爲我修復(使用angular v1.1.5),所以謝謝!你是否能夠找到任何進一步的信息,爲什麼這會修復內存泄漏? – brodie 2014-02-25 12:37:21
在AngularJs 1.6.4「track by $ index」中遇到了同樣的問題,修復了內存泄漏,但是我不能使用「by index | filter:myfilter」(例如過濾器),所以我設置了一個計時器, 30分鐘。 – AKMorris 2017-11-09 23:57:10
相關問題