Javascript angularjs中的非常慢的循环
我使用此循环创建地图标记(1000点):Javascript angularjs中的非常慢的循环,javascript,angularjs,loops,for-loop,Javascript,Angularjs,Loops,For Loop,我使用此循环创建地图标记(1000点): var标记={}; 对于(变量i=0;i
var标记={};
对于(变量i=0;i
如何在angularjs中提高for循环速度(目前需要10秒)?有一些方法可以提高代码速度,比如避免
eval
以及缓存循环变量和数组。通过缓存一些值,减少了一系列操作,如成员访问和不必要的计算
var items={data:{data:[]};
var icons={infost:'infost'};
对于(变量i=0;i<1000;i++){
items.data.data.push({lat:''+i,lng:''+i,name:''+i});
}
控制台。时间(“时间”);
///您的代码从这里开始
变量
data=items.data.data,
l=数据长度,
markers=Array(l),//或just[]
项目、latVal、lngVal、ikona、消息;
对于(变量i=0;i
删除eval
。它的速度很慢,并且会删除整个功能链的所有浏览器优化
使用数组标记=[]
而不是对象
使用+
将字符串转换为数字
使用push
将元素附加到数组中
将items.data.data
保存到变量中
不要使用eval()
@devqon是正确的,eval非常缓慢且不安全。假设lat和lng是数字,您可以使用Number(latVal)
和Number(lngVal)
;对于(var i=0;i++
比Number
@Qwertiy快是的,你是对的,在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;