2016-06-20 5 views
2

私は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は、「クロックタイマー」であると思います。おそらく、これは簡単なクロックが必要なアプリケーションで役に立ちました。

+2

私はその機能が 'setInterval'の「危険」であるとは思わないでしょう。これは特定の機能であり、コールバックが実行される時間とは無関係の特定のスケジュールでコールバックを実行させたい場合に便利です。 – Hamms

+0

シングルスレッドなので、独立していませんが、私はあなたの意見を取ります。 – Ben

+1

"は、割り当てられた間隔内で完了しないコールバックをキューに入れるだけです。" ---それは完全に真実ではありません。最大1つの追加コールのみがキューに入れられます。 'setInterval'の利点は、あなたが手動で次の呼び出しを管理する必要がないことです(そうしないと、' setTimeout'を設定してドメイン特有のコードを台無しにします)。必ずしもそうであるとは限りませんが、簡単にハックすることができる無名関数ですが、変数からの関数への参照です。 – zerkms

答えて

1

setTntervalが適切なユースケースは、正確な時間に関数を実行する場合です。 setIntervalsetTimeoutには字幕の違いがあります。 setIntervalは、先にsetIntervalが起動してから遅延してから実行します。 setIntervalも閉鎖的ではないので、クロージャとメモリリークの心配はありません。詳細は、しかし、以下here

あなたはクロージャを作成することができ、再帰を作成する必要がありますsetTimeoutを使用して、同じ機能を実現するような典型的setInterval機能

var intervalID = window.setInterval(myCallback, 500); 

function myCallback() { 
    // Your code here 
} 

するためのコードで見つけることができます以下に示すようにメモリリークの問題が発生します。

function startTimer() { 
    var count = [1,2,3,4,5,6,7,8,9,0] 
    setTimeout(function() { 
     //do some stuff 
     count.push(100);//you have just create a closure 
     //and all the problems that is associated with it 
     startTimer();//this is where the recursion happens 
    }, 1000); 
} 
+0

私は同じ答えを考えていたが、ベンのプロフィールを見て、彼は11k評判を持っていた。彼はJavascriptコンサルタントで、多くのjavascript記事をミディアムに書いて、おそらくもっと実用的な答えを探していた。何?私はストーカーではありません... –

+1

私の答えをより良く説明するためのいくつかのコードが含まれています。 – spirit

関連する問題