我使用此循环创建地图标记(1000点):
var markers = {};
for (var i = 0; i < items.data.data.length; i++) {
latVal = items.data.data[i].lat;
lngVal = items.data.data[i].lng;
ikona = icons.infost;
message = "<b>" + items.data.data[i].name + "</b>";
markers[i] = {'group': 'cmp', 'lat' : eval(latVal), 'lng' : eval(lngVal), 'icon' : ikona, 'message' : message};
}
$scope.Markers = markers;
如何改善angularjs中的for循环速度(目前需要几乎10秒)?
答案 0 :(得分:2)
eval
。它很慢并且会丢弃整个功能链的所有浏览器优化。markers = []
代替对象。+
将字符串转换为数字。push
将元素附加到数组。items.data.data
保存到变量。答案 1 :(得分:1)
有一些方法可以提高代码速度,例如避免eval
和缓存循环变量和数组。通过缓存一些值,减少一些操作,如成员访问和不必要的计算。
var items = { data: { data: [] }};
var icons = { infost: 'infost'};
for (var i = 0; i < 1000; i++) {
items.data.data.push({ lat: ''+i, lng: ''+i, name:''+i });
}
console.time('time');
/// YOUR CODE STARTS HERE
var
data = items.data.data,
l = data.length,
markers = Array(l), // or just []
item, latVal, lngVal, ikona, message;
for (var i = 0; i < l; i++) {
item = data[i];
latVal = item.lat;
lngVal = item.lng;
ikona = icons.infost;
message = "<b>" + item.name + "</b>";
markers[i] = {
group: 'cmp',
lat: +latVal,
lng: +lngVal,
icon: ikona,
message: message
};
}
console.timeEnd('time');
//$scope.Markers = markers;