私はsetInterval
を使用する必要のあるWebアプリケーション開発のユースケースを考えるのに苦労しています。setTimeoutまたはRAFを使用して達成できないsetIntervalを使用しますか?
setInterval
の「危険」は、割り当てられた間隔内で完了しないコールバックをキューに入れるだけです。
さらに、setInterval
の動作は、setTimeout
またはでシミュレートすることができますが、この「危険」はありません。
これを考えると、誰かがsetInterval
が優れた/より適切なオプションであるユースケースを私に提供できますか?
編集:
は、私は私の調査結果を書き留めるだろうと思っていました。
setInterval
は、偶数の間隔で何かを実行する簡単な方法です。間隔は主にかなり正確ですが、イベントループがブロックされていると、完全に不正確になる可能性があります。私の知る限り
var x = 0;
setInterval(function() {
waitBlocking(5000);
document.write(x++);
},100);
function waitBlocking(ms) {
var start = Date.now();
while((Date.now() - start) < ms) {}
}
、setInterval
あなたが均等に(上記参照)の間隔コールバック呼び出しを広めたい場合に有用ではありませんが、あなたは、特定の番号を持つのに便利な方法をしたい場合ある期間のコールバック呼び出しは、実行する必要があるときにできるだけ近い時間枠に分散します。これはかなり狭いユースケースのようです。
私は何かが不足していると確信しています。
編集2:
これは基本的にJSを達成することができます時計の最良の近似であるので、私はsetInterval
は、「クロックタイマー」であると思います。おそらく、これは簡単なクロックが必要なアプリケーションで役に立ちました。
私はその機能が 'setInterval'の「危険」であるとは思わないでしょう。これは特定の機能であり、コールバックが実行される時間とは無関係の特定のスケジュールでコールバックを実行させたい場合に便利です。 – Hamms
シングルスレッドなので、独立していませんが、私はあなたの意見を取ります。 – Ben
"は、割り当てられた間隔内で完了しないコールバックをキューに入れるだけです。" ---それは完全に真実ではありません。最大1つの追加コールのみがキューに入れられます。 'setInterval'の利点は、あなたが手動で次の呼び出しを管理する必要がないことです(そうしないと、' setTimeout'を設定してドメイン特有のコードを台無しにします)。必ずしもそうであるとは限りませんが、簡単にハックすることができる無名関数ですが、変数からの関数への参照です。 – zerkms