setTimeout を setInterval で書き直す
重要性: 4
これは、ネストされた setTimeout
を使ってジョブを分割する関数です。
setInterval
に書き直してください:
let i = 0;
let start = Date.now();
function count() {
if (i == 1000000000) {
alert("Done in " + (Date.now() - start) + 'ms');
} else {
setTimeout(count, 0);
}
// a piece of heavy job
for(let j = 0; j < 1000000; j++) {
i++;
}
}
count();
let i = 0;
let start = Date.now();
let timer = setInterval(count, 0);
function count() {
for(let j = 0; j < 1000000; j++) {
i++;
}
if (i == 1000000000) {
alert("Done in " + (Date.now() - start) + 'ms');
cancelInterval(timer);
}
}