for
おそらくループを使用している配列を処理していることを考えると、以前の私のコメントを拡張します。for
単純なループを簡単にリファクタリングしsetTimeout()
て、作業をチャンクに分割し、ブラウザが各チャンク間でスクリーン ペイントとユーザー インタラクションを処理できるようにすることができます。簡単な例:
// Generic function to execute a callback a given number
// of times with a given delay between each execution
function timeoutLoop(fn, startIndex, endIndex, delay) {
function doIteration() {
if (startIndex < endIndex){
fn(startIndex++);
setTimeout(doIteration, delay);
}
}
doIteration();
}
// pass your function as callback
timeoutLoop(function(i) {
// current iteration processing here, use i if needed;
}, 0, 100, 0);
デモ: http://jsfiddle.net/nnnnnn/LeZxM/1/
これは、一般的なアイデアを示すためにまとめたものですが、明らかにさまざまな方法で拡張できchunkSize
ますtimeoutLoop()
。への呼び出しfn()
)など