2008-05-29
[備忘] setIntervalとsetTimeoutの使い分けがわからない
わかっていないことの備忘録。 JavaScriptでタイマーを使ったコード(アニメーションとか)を書く時のはなし。
setIntervalを終了条件つきで書くか、
var tid = setInterval(function() {
// 処理
if (is_end) clearInterval(tid); /* 終了条件 */
}, milliseconds);
必要な回数だけsetTimeoutを呼ぶか。
for (var i=1; i<=times; i++) {
setTimeout(function() {
// 処理
}, milliseconds * i);
}
「// 処理」に当たる部分を1回しか実行しないなら、タイマーの破棄が必要ない分だけsetTimeoutの方がいい気がする。でも、「// 処理」を複数回実行するとなると、どういう基準で使い分けるのがいいんやろか?
今のところ、事前に「// 処理」の回数がわかっている場合にsetTimeout、それ以外の場合はsetIntervalという風に使い分けているけど、setTimeoutのforループが千回とか超えるとちょっと不安になる。
setTimeoutとsetIntervalの違いがよくわかってない。→調べて追記しよう。
追記
お、ココにsetTimeout/setIntervalの違いが。
JavaScriptはシングルスレッドなので、非同期処理(イベントハンドラとか、タイマーによる遅延処理)はキューを使って処理しているから、setTimeout/setIntervalのコールバックが遅れることもあるよ。的なことが書いてあって、
- setTimeoutは、指定したミリ秒後にコールバックを実行。
- setIntervalは、指定したミリ秒間隔でコールバックを実行。
とある。
うーん、おもしろいけど、何か違う。setTimeoutで指定したコールバックが実行キューに入るのはわかるけど、キューに入れるタイミングをどうやって管理されているのかが知りたい。それがわかれば、「forループ + setTimeout」と「setInterval + 終了条件」の違いがわかるよなあ。