我有一个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 :(得分: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);
...