打开页面时,我发出 Ajax 请求。此请求大约需要 10 秒才能加载并返回大约 11MB 的数据。
这个 Ajax 请求的响应需要通过 InnerHTML 在 DOM 中设置。对于 Internet Explorer,这 11MB 可以同时处理很多,所以我将这 11MB 分成 40 个小块。
这是我的代码:
$.get('url')
.done(function( data ) {
splitdata = data.split('<!-- START -->');
data = '';
var length = splitdata.length;
for (var i = 0; i < length; i++)
{
var brin = String(splitdata[i].split('\n')[0].replace("<!-- ",'').replace(' -->', ''));
var percentage = Math.round(((i+1)*100)/(length + 2));
var data = splitdata[i];
if(brin.length != 0)
{
(function(brin, percentage, data) {
setTimeout(function() {
console.log(brin);
console.log(percentage+'%');
document.getElementById('tab_'+brin).innerHTML = data;
//$('#tab_'+brin).html(splitdata[i]);
}, 0);
})(brin, percentage, data)
$('#loadingbar').css('width', percentage+'%');
}
}
ajaxBegrotingDone(callback);
})
.fail(function() {
ajaxBegrotingFail(callback);
});
现在我有两个问题: 1. 所有的浏览器都有一些关于innerHTML 部分的问题。页面“挂起”,所以我的进度条没有更新。这个问题有解决方案吗?
- 现在我需要等待 10 秒,直到我的 Ajax 请求完成。之后 JavaScript 解析(因此 innerHTML 开始)。我会很高兴实时拆分,这可能吗?
不可能发出 40 个小的 ajax 请求,因为数据非常复杂,第 1 部分的结果是两个计算的基础,依此类推。