4

我的 angular.js 应用程序中似乎存在内存泄漏。基本上,该页面包含一个信息表,该信息表每五秒从 AJAX 调用的 JSON 编码结果更新一次。我在这里创建了一个简化的 jsfiddle 版本:http: //jsfiddle.net/alalonde/TtGXW/6/

控制器:

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 ),这有很大帮助,但内存使用量仍在无情地攀升。

任何有关使用带有 angular.js 的 Chrome 内存分析器的提示都将不胜感激。

4

1 回答 1

4

当我轮询数据并使用 ng-repeat 循环它并呈现行时,我遇到了同样的内存消耗问题。

当我使用“item in items”时,我的内存使用量不断增加,但是当我使用“item in items track by $index”时,内存使用量稳定,GC 也被正确清理。

于 2013-10-09T16:22:03.377 回答