angularjs中的循环非常慢

时间:2016-11-08 09:59:22

标签: javascript angularjs loops for-loop

我使用此循环创建地图标记(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秒)?

2 个答案:

答案 0 :(得分:2)

  1. 删除eval。它很慢并且会丢弃整个功能链的所有浏览器优化。
  2. 使用数组markers = []代替对象。
  3. 使用+将字符串转换为数字。
  4. 使用push将元素附加到数组。
  5. 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;