process.nextTickとはなんぞ
公式マニュアルのprocessを眺めていたらprocess.nextTick
というのが出てきました。なんだかとても大事らしいです。
マニュアルによればコレは、
イベントループの次以降のループでコールバックを呼び出します。 これは
process Node.js v0.8.8 Manual & DocumentationsetTimeout(fn, 0)
の単純なエイリアスではなく、 はるかに効率的です。
「setTimeout(fn, 0)
の単純なエイリアス」と書いている辺り、どうもタスクの類のお話らしいです。要するに「JavaScriptはシングルスレッドなので、ウェブブラウザでいえば、単にwhileループするだけだとページがハングする*1から、アニメーションする時などにはsetTimeout/setInterval使いましょう」と同類の話だと思います。キューの話については、ここが非常に参考になります。
例えば、
setInterval () -> console.log "hoge" , 1000 while true do -> # something
上記の場合だと、whileループのタスクが終わらず、setIntervalで指定した関数が実行されることはありません。そこで
setInterval () -> console.log "---- hoge ----" , 1000 process.nextTick () -> i = 0; while i++ < 1000000 # 適当に調整 do -> # something console.log "@@@@ piyo @@@@" process.nextTick arguments.callee
setTimeoutによる無限ループと同様に、上記のようにすると、どちらも実行されることが分かります。
まとめると、「 はるかに効率的なsetTimeout(fn, 0)
のエイリアス」と覚えておけばよさそうです。
*1:タスクが終わらずキューが消費されないので、入力イベントや描画処理のタスクが実行がされないため