2015-10-19 80 views
1

我有一個API,通過服務器發送事件(SSE)發送更新,每秒鐘爲我的項目。每秒提高性能刷新項目

基本上我有一個集合$scope.items,其中包含很多信息,並且此列表中的每一秒都會更新一個項目。

我在做什麼是:

var source; 
    if (!!window.EventSource) { 
    source = new EventSource('/updates'); 
    } else { 
    alertify.error('SSE not supported'); 
    } 

    // Emit SSE for items 
    source.addEventListener('items', function (e) { 
    var data = JSON.parse(e.data); 
    $timeout(function() { 
     var item_index = _.findIndex($scope.items, function (item) { 
     return item.id === data.id; 
     }); 
     var status = data.status; 

     if (item_index > -1) { 
     if (status === 'cancelled') { 
      $scope.items.splice(item_index, 1); 
     } 
     $scope.items[item_index] = data; 
     $scope.$apply(); 
     } else { 
     $scope.items.push(data); 
     } 
    }); 
    }, false); 

,如果我做的是正確的,或者如果當我開始有很多,很多項目我可以改善這個代碼,因爲應用程序是相當慢的我想知道循環每一秒......

+0

內我不太清楚......是'無功item_index = _.findIndex(... 「每次你打電話時都要查找這個物品? –

+0

將項存儲到一個隊列中,並使用setInterval函數'每隔x秒將項目從隊列中移出(「),並且如果將dom對象和更新後的html存儲到數組中,則批量更新dom,則性能應該更好。 – r3wt

+0

@ r3wt將很高興看到你想要建議的例子。 謝謝 –

回答

0

你的代碼看:

var item_index = _.findIndex($scope.items, function (item) { 
    return item.id === data.id; 
}); 

我擔心,一個完整的搜索完成每次訪問item_index

時間

我會定義一個函數:

function getIndex(data){ 
    _.findIndex($scope.items, function (item) { 
     return item.id === data.id; 
    }); 
    }; 

和呼叫它從你

$timeout(function() { 
    var item_index = getIndex(data); 
    ...