は、例えば、この機能を取る:setIntervalのコールバックが指定された間隔で正確に呼び出されるようにするにはどうすればよいですか?
function mySlowFunction(baseNumber) {
console.time('mySlowFunction');
var result = 0;
for (var i = Math.pow(baseNumber, 10); i >= 0; i--) {
result += Math.atan(i) * Math.tan(i);
};
console.timeEnd('mySlowFunction');
return result;
}
これは非常にCPU集中型の関数です。 mySlowFunction(5)
の完了には約3秒かかります。
今、このコードを考えてみましょう。
setInterval(() => console.log("interval"), 1000);
mySlowFunction(5);
私はそれがログインするために期待する「インターバル」毎秒、私はmySlowFunction
がスレッド上で実行されていて、JSはシングルスレッドであるため、setInterval
のコールバックがあることを理解mySlowFunction
が完了した後にのみ実行されます。
コールバックが指定された間隔で呼び出されるようにする方法はありますか?私はブラウザベースの環境でこれを望みます。
あなたは単に数秒間何もしてメインスレッドをブロックするべきではありません。集中的な計算が必要な場合は、それらをWebワーカーに配置するか、 'setTimeout'を使用して割り込み可能なチャンクに分割してください。 – deceze
私はあなたがそれを確信できるとは思っていません、あなたが言ったのはまさにその理由です:JSはシングルスレッドです。私はこれの周りに道があるとは思わない。 –