我使用 Angular (1.1.5) 作为 ASP.Net MVC3 项目的前端,并且在使用 ng-repeat 时在浏览器中遇到内存消耗问题。
看起来好像当路由发生变化并且 ng-view 标签被更新时,旧的 dom 元素在使用 ng-repeat 时不会被垃圾收集。
设置如下:
- _layout.cshtml 页面,包含
<html ng-app="MyApp">
、脚本、css 和带有 Angular 应用程序链接的标题 - index.cshtml 部分使用布局页面并包含单个
<ng-view></ng-view>
标签 index.html 包含我的内容与 ng-repeat
索引.html:
<div ng-controller="MyCtrl"> <div ng-repeat="item in items"> <p>Blah Foo Bar lorem ipsum gack</p> <hr /> </div> </div>
app.js 包含主应用模块,带有路由配置和控制器
应用程序.js
var app = angular.module('MyApp', ['MyApp.content'])
.config(['$routeProvider', function($routeProvider) {
$routeProvider
.otherwise({ templateUrl: '/index.html' });
}]);
angular.module('MyApp.content', []);
angular.module('MyApp.content')
.controller("MyCtrl", ['$scope', function ($scope) {
$scope.items = [{}, {}];
}]);
因此,重复单击标题中的链接(由于没有定义特定的路由,总是会产生路由更改),然后调用垃圾收集器会在 chrome 时间轴中产生以下内容:
如您所见,内存基线不会恢复到初始值,并且随着路由更改的增加,这会继续增加。dom 元素的数量也在不断增加。查看堆快照,这些是分离的,但仍然存在。
删除 ng-repeat 会导致 dom 计数重置每个路由更改。
有谁知道为什么?如何防止这些元素徘徊?
更新:我在 VS2010 中创建了一个新的 MVC3 项目并且没有问题。在 VS2012 中创建了一个新的 MVC3 项目并做到了。:/