2016-09-16 5 views
1

Я вижу некоторые проблемы с производительностью, используя socket.io с угловой директивой ng-repeat, я получаю много данных из бэкэнд, которые замедляют приложение, поэтому, получая данные, я не смог бы щелкнуть ни на что. Какой был бы лучший способ справиться с большим списком с помощью ng-repeat, позволяет принимать 1000 сообщений в минуту?Как решить проблему с производительностью, используя директиву ng-repeat?

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> 
+0

сделать поиск в Интернете по этой теме и найдет много информации. – charlietfl

ответ

5

в первую очередь использовать какой-то идентификатор сообщения в ng-repeat="message in event track by $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

+0

данные имеют только строку сообщений с сервера. Как я буду создавать идентификатор, если это не часть данных. – hussain

+0

просто измените массив строки на массив объектов: {id: ID, value: MESSAGE}, вы можете сделать это в своей службе как: $ scope.event.push (data.map ((val, key) => {id : key, value: val})); затем в HTML: ng-repeat = "message в event track message.id" и напечатать {{message.value}} (или, альтернативно, добавить ng-bind = "message.value" insted – Andriy

+0

вы имеете в виду изменение $ scope.event = [] to $ scope.event [{id: key, value: val}] – hussain

Смежные вопросы