javascript/jQuery getJSON非常慢,有一个内循环
javascript/jQuery getJSON very slow with a inner loop
我使用OpenLayers为图层切换器渲染DOM,大约有1200个div。这个问题可以简化如下。
这是非常快的(3秒左右):
var allLayers = [layerMapnik, layerCycleMap];
for(var ii = 0; ii < 1200; ++ii) {
console.log("ii = " + ii.toString());
var groupName = "wms/Transit/railroad/image/" + ii;
var layName = "CycleMap" + ii.toString();
var oneLayer = new OpenLayers.Layer.XYZ(layName, "http://whatever/tile/${z}/${y}/${x}", {visibility: false, group:groupName});
allLayers.push(oneLayer);
}
console.log("adding layers");
map.addLayers(allLayers);
$.getJSON("sampleArray.json", {}, function( doc ) {
console.log(doc.length);
});
但是一旦将for循环放入getJson回调中,它就会非常缓慢并且冻结浏览器,即使for循环根本没有读取'doc' !
var allLayers = [layerMapnik, layerCycleMap];
$.getJSON("sampleArray.json", {}, function( doc ) {
console.log(doc.length);
for(var ii = 0; ii < 1200; ++ii) {
console.log("ii = " + ii.toString());
var groupName = "wms/Transit/railroad/image/" + ii;
var layName = "CycleMap" + ii.toString();
var oneLayer = new OpenLayers.Layer.XYZ(layName, "http://whatever/tile/${z}/${y}/${x}", {visibility: false, group:groupName});
allLayers.push(oneLayer);
}
console.log("adding layers");
map.addLayers(allLayers);
});
不管json文件有多简单sampleArray.json:
[
{
"a": 123,
"b": 456
},
{
"c": "ccc",
"d": "ddd"
}
]
我是否使用了getJSON或回调错误?还是OpenLayer的东西?
我也试过$。每个代替for循环,没有帮助。
回答自己的问题,供将来参考。
添加LayerSwitcher也应该在回调函数中。因为整个LayerSwitcherdiv应该在添加到主html之前生成,否则在切换器中重新绘制每个添加的图层会减慢速度并冻结浏览器。
另外,使用$。$(document).ready()之外的Ajax调用,以加快速度,因为数据获取不需要等待$(document)
相关文章:
- 如果循环中至少有一个元素返回 false,如何将变量设置为 false
- 我怎么能有一个实时计时器,在3秒的循环内每秒钟更新一次
- 翡翠模板在一个循环中有多个数组
- 为什么在 Backbone 的设置方法中有一个 while 循环
- 如何创建一个计数器循环,该循环在单击提交按钮时启动,并输出多行单词,每个单词前面都有一个数字
- 我有一个循环,文本框将动态生成.我想在文本框值更改时捕获它
- 为什么我有一个无限循环
- 茉莉:我怎么能声明一个循环'其'而不是'期望'用于测试有角度的工厂
- 复杂的循环节点模块依赖抛出“类型错误:'继承'的超级构造函数必须有一个原型”
- 在jQuery中,有一种方法可以在数组上循环,这样在循环到下一个循环之前,它首先等待来自服务器的响应
- 循环遍历对象数组以查找是否有一个值不同
- 为什么JS alert在console.log之前执行,而语句后面有一个循环
- jQuery创建一个函数循环,每个函数都有一个动画队列
- 有没有办法在angularjs模板中创建一个循环?
- 有没有办法简化这个jQuery代码或者把它转换成一个循环之类的
- javascript/jQuery getJSON非常慢,有一个内循环
- 我怎么能有一个解析后台作业循环通过一个函数为每个用户
- Javascript: Async/Await中有一个循环
- JavaScript不能在一个循环中有多个setTimeout函数
- 摩卡测试之前,每个内部都有一个循环——异步问题