如何使用 ng-repeat 指令解决性能问题?
How to resolve performance issue using ng-repeat directive?
我看到使用 socket.io 和 ng-repeat angular 指令时出现一些性能问题,我从后端接收大量数据,这会降低应用程序的速度,因此在接收数据时我无法点击任何东西。使用 ng-repeat 处理大列表的最佳方法是什么,让我们假设每分钟 1000 条消息?
ctrl.js
$scope.event = [];
socket.on('ditConsumer', function(data) {
var obj = {
file: $scope.filename,
data: data
}
$scope.event.push(data);
}
main.html
<ul style="list-style: none;">
<li ng-repeat="message in event track by $index" ng-class="{lastItem: $last}"><span><strong>Log:</strong></span><span>{{message}}</span></li>
</ul>
首先在 ng-repeat="message in event track by $index"
中使用某种 消息 id 而不是每个 ng-repeat 摘要呈现的 $index。参见 http://www.codelord.net/2014/04/15/improving-ng-repeat-performance-with-track-by/
其次 - 您可以使用 limitTo 过滤器限制可视项目:
ng-repeat="message in event track by message.id | limitTo:100"
隐藏的项目仍然可以通过其他过滤器搜索和恢复,但不会在 HTML
中呈现
我看到使用 socket.io 和 ng-repeat angular 指令时出现一些性能问题,我从后端接收大量数据,这会降低应用程序的速度,因此在接收数据时我无法点击任何东西。使用 ng-repeat 处理大列表的最佳方法是什么,让我们假设每分钟 1000 条消息?
ctrl.js
$scope.event = [];
socket.on('ditConsumer', function(data) {
var obj = {
file: $scope.filename,
data: data
}
$scope.event.push(data);
}
main.html
<ul style="list-style: none;">
<li ng-repeat="message in event track by $index" ng-class="{lastItem: $last}"><span><strong>Log:</strong></span><span>{{message}}</span></li>
</ul>
首先在 ng-repeat="message in event track by $index"
中使用某种 消息 id 而不是每个 ng-repeat 摘要呈现的 $index。参见 http://www.codelord.net/2014/04/15/improving-ng-repeat-performance-with-track-by/
其次 - 您可以使用 limitTo 过滤器限制可视项目:
ng-repeat="message in event track by message.id | limitTo:100"
隐藏的项目仍然可以通过其他过滤器搜索和恢复,但不会在 HTML
中呈现