数组变量不断增加。每当添加新元素时,都会触发过滤器。数组过滤所有元素。由于我重复的数组包含实时数据,因此添加了连续数据。这会导致性能下降。随着数组大小的增加,筛选器开始失败。
ng-repeat="data in col.columnData
| filter:{body:col.UIFilter.match}
| filter:repostQuery(col.UIFilter.repost)
| filter:mediaQuery(col.UIFilter.media)
| orderBy:'iPostedTime':'+'
| limitTo:col.columnSettingsObject.listLimit
track by data.id"
(数组大小>〜1000}
需要做的是在应用过滤器之后过滤添加的元素,而不是在添加元素时过滤整个索引。我该怎么办?
答案 0 :(得分:0)
您不应添加太多过滤器。另外,您也不应该在大型数据集上使用过滤器,因为过滤器会为每个条目添加一个观察者。
5个过滤器1000个条目= 5000个观察者=极其缓慢
您应该只针对每个站点200位观察者,并且摘要周期最长为2ms。最好的方法是在将数据插入col.columnData
之前对其进行过滤。
您可以通过以下方式实现此目标:
let temp = your_original_dataset;
temp = $filter('filter')(temp, {body:col.UIFilter.match});
temp = $filter('filter')(temp, repostQuery(col.UIFilter.repost));
temp = $filter('filter')(temp, mediaQuery(col.UIFilter.media));
temp = $filter('orderBy')(temp, 'iPostedTime', '+');
temp = $filter('limitTo')(temp, col.columnSettingsObject.listLimit);
col.columnData = temp;
ng-repeat="data in col.columnData track by data.id"
注意(未经测试)。我不知道$ filter的确切写法只是查找它。 希望这会有所帮助