我有大量文件要在服务器上处理。我将文件上传到服务器,然后读取它,制作数组。现在我需要将这些信息反馈给服务器:
function getXMLFile(file){ // Single call
$.ajax({
url: '....',
type: 'post',
dataType: 'json',
data: {filename: file},
success: function(json){
$.each(json, function( key, value ){ // iterates over 50 000 items.
tmp.push( value );
i++;
if(i > 10000){
setTimeout(function(){
insert(tmp);
tmp = [];
i = 0;
}, 1000);
}
});
}
});
}
这是锁定功能:
function insert(data){ // called from getXMLFile() @data -> array of 10 000 code entries
$.ajax({
url: '....', // for now php function does nothing.
type: 'post',
dataType: 'json',
data: {codes: data},
async: true // !!!!
});
}
});
你可以看到我有'async:true'并使用setTimeout,这样我的浏览器就不会被锁定。 但它仍然锁定......我做错了什么?
答案 0 :(得分:2)
您正在将文件上传到服务器,然后服务器返回大量数据。从您迭代大约50000个项目的数据,然后您每10000次迭代请求一个不断增加的数组。您最终每1秒钟就会收到大约5个大数据请求。
对浏览器的性能产生影响是有意义的,我建议在服务器上工作,无论在那里工作。例如,第一次从服务器返回的数据也可以由服务器处理,而不需要来自客户端的大数据请求再次发送数据。这样,您将改善浏览器的糟糕性能。
为了帮助您解决此问题,请查看浏览器的内存消耗情况,并尝试使用小型数据集。如果您的浏览器没有锁定,那么您将知道您尝试在客户端处理的数据太多。