2

我使用 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 项目并做到了。:/

4

0 回答 0