私は様々なアイテムに関する情報を表示するweb-appを持っています。アイテムのわずかな部分だけが最初に表示されます。 (トップレベルのもの)。ページが最初にロードされたとき(そして最初のアイテムが表示されているとき)、私はAJAX経由でサーバーから完全なアイテムリストを要求しています。大きなHTMLチャンク(AJAX経由でロードされた)を追加するときにブラウザをフリーズする方法
リクエストが返されるとすぐに、アイテムを非表示divに挿入するので、ユーザーはアイテムを検索できます。 (完全なリストがロードされる前に検索を開始すると、モーダルダイアログで適切な「読み込み中のスピナー」が得られます)
私が唯一の問題は、ajaxで取り込んだデータを挿入した後、 (約10.000アイテム、生成されたHTMLの〜40MB)ブラウザは最大40秒間フリーズします。
私のコードは次のとおりです。
私はこの時の私のWebアプリが責任を作るために使用できる「パターン」$.ajax({url: uri, data: { .... }})
.done(function(data, status, jqXHR) {
data = $.trim(data); // takes about 35 ms
setupFullTree(data);
})
function setupFullTree (data,s){
$tree.append('<div id="i-full-tree" data-status="loading" style="display:none"></div>'); // takes no measurable time
$('#i-full-tree').append(data); // takes between 10000 and 40000 ms, depending on the browser, ...
indexFts(); // takes about 50ms
}
?私はそれを小さな塊に分割しなければなりません(それは構造のような木ですので、これは簡単ではありません)。そして、私は挿入中にsetTimeoutを使う必要がありますか? WebWorkerで必要な計算の一部を移動する方法はありますか?
...「フリーズ」は、追加しようとしている情報の量に起因する可能性があります。あなたはあまり追加しないと考えましたか? –
理想的には、一度にDOM内のコンテンツを少なくしたいとします。ページングシステムのようなものを考えてみましょう。重要なことだけを示し、必要に応じてより多くのデータを読み込むことができます。 –
その量のデータをAjaxなしでロードすると、永遠にかかるでしょう。ページング、プログレッシブロードなど – epascarello