AngularJS ng-repeat删除项目以回收内存

时间:2014-11-07 22:06:47

标签: angularjs performance angularjs-ng-repeat

我一次添加20 * 10个项目来重复并一次删除20 * 10个项目来回收内存空间但是在删除节点后我没有看到内存回收。为什么记忆不能回收?我做错了吗?

myPlunker

 angular.module('myApp', []).
controller('MyCtrl',function($scope) {
$scope.items =      ["http://fc06.deviantart.net/fs42/f/2009/073/e/d/Free_red_panda_icon_100x100_by_SuperTuffPinkPuff.png"];

$scope.remove = function(item) {
    console.log($scope.items.length)
    for(var a = 0; a < 20; a++) {
      $scope.items.shift($scope.items.length-1);
    }
};

$scope.add = function(item) {
    for(var a = 0; a < 20; a++) {
       $scope.items.push(item='http://fc06.deviantart.net/fs42/f/2009/073/e/d/Free_red_panda_icon_100x100_by_SuperTuffPinkPuff.png'); 
    }

};

});

更新 - 我使用的是单个FireFox和Chrome实例,同样的事情发生了。意味着内存未在任务管理器中回收。但是,浏览器Profiler是回收的,为什么呢?

删除DOM节点后,

This guy能够回收内存,我不知道为什么,因为我也在做同样的事情。

1 个答案:

答案 0 :(得分:1)

好的,我找到了记忆仍然存在的原因。当您使用shift从数组中删除项时,它将返回您已删除的项,因此您必须将其设置为null。我没有这样做。

$scope.remove = function(item) {

 for(var a = 0; a < 20; a++) {
   var removedItem = $scope.items.shift($scope.items.length-1);
   removedItem = null;
 }
};

Working Plunker