ページを開くときに、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);
});
ここで 2 つの質問があります。 1. すべてのブラウザーで、その innerHTML 部分に問題があります。ページが「ハング」するため、プログレスバーが更新されません。この問題の解決策はありますか?
- ここで、Ajax リクエストが完了するまで 10 秒待つ必要があります。その後、JavaScript の解析が行われます (そして、innerHTML が開始されます)。リアルタイムで分割したいのですが、可能ですか?
データが非常に複雑で、パート 1 の結果が 2 つの計算の基礎となるため、40 個の小さな ajax 要求を作成することはできません。