私のページには〜9000個の要素があり、頻繁に再構築する必要があります。数秒かかることがあります。大きなループが続くDOM更新が時間内にレンダリングされない
私はLoading..
で要素をカバーする小さなオーバーレイウィジェットを作った。メッセージ。要素を再構築する直前にshowOverlay()
と呼び出し、ループの後にhideOverlay()
を呼び出します。
しかし、私のLoading...
メッセージが表示される前にループがページをロックするので、決して表示されません。
function rebuild() {
showOverlay(); // The overlay never appears...
for (var i=0;i<9000;i++) {
// append element...
}
hideOverlay();
}
ループを開始する前にオーバーレイがレンダリングされるのを待つ方法はありますか?
は十分であることが保証さ1ミリ秒ですか? –
@TonyRあまり時間がかかるはずはありませんが、10時に設定します。IIRC Google Chromeは最低でも10を使用するため、1msにしてもまだ待機します。 10ms。これはまだページをフリーズします。 –
どれくらい時間がかかりますか?1msで十分かもしれません。重要なのは、 "スレッドスイッチ"に類似したものを強制することです(単語の一般的な意味でのスレッド切り替えでない場合でも)。 - JSタスクを脇に置いてDOMタスクを開始します。タイムアウトはそれを中断しますが、遅れることがあります。 –