每秒提高性能刷新项目

时间:2015-10-19 11:15:18

标签: javascript angularjs

我有一个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); 

我想知道我是否正确行事,或者我是否可以改进此代码,因为当我开始每秒都有很多项目时,应用程序会很慢......

1 个答案:

答案 0 :(得分: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);
  ...