我有一个相当大的数据集要由 AngularJS 提供。加载需要几秒钟,即时搜索有点迟缓。但过了一会儿,Chrome 抱怨脚本占用了太多内存,并询问是否继续。
所以我检查了这个过程,我在 ng-repeat 中有复杂的过滤器,过滤多个输入,排序,分页,限制等。
<tr ng-repeat="rec in records | my filter : [model1, model2, model3] | sort: model4 | start: model5 | limit: model6">
根据我所做的,我必须从每个过滤器的输入中创建一个新数据集,例如使用 $.map() 或 $.grep(),它会创建原始数据集的新对象。我的问题是,它应该一直到最后一个过滤器完成,才会呈现视图。然后所有中间数据集克隆都将被垃圾收集,处理这个问题是否有角度?或者我如何明确地 gc 他们?
或者说在 Angular 中做这件事的最佳实践是什么?
PS。以下是 ng 过滤器如何工作的示例:
msApp.filter('startFrom', function() {
return function(input, start) {
if (!input) return [];
return input.slice(+start); // +start, parse to int
};
});
因此,每次模型更改时,此过滤器都会运行并创建一个新列表。我有几个在一个链中。