1
jsonline 2014-04-10 23:49:37 +08:00 1
1. setImmediate 不是标准用法,只在 IE 10+ 和 NodeJS 上实现。
2. setTimeout 0 的即时性不如 setImmediate setTimeout(fn, 0) can potentially be used, however as it is clamped to 4ms per the HTML spec, it does not make for a suitable polyfill for the natural immediacy of setImmediate. 所以,在浏览器上用前者,在 Node 上用后者。 参考 https://developer.mozilla.org/en-US/docs/Web/API/Window.setImmediate |
2
jsonline 2014-04-10 23:58:13 +08:00 1
关于 4ms:
Timers can be nested; after five such nested timers, however, the interval is forced to be at least four milliseconds. 参见 http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#timers |
3
jakwings OP @jsonline 谢了~
我看到有人在纯 NodeJS 的模块里用 setTimeout 而不是 setImmediate 感觉有点奇怪,所以好奇会不会是因为两者分别占两个 event queue 会有什么特别的用途。看来 NodeJS 是该坚持用 setImmediate 了。 |
6
yangff 2014-04-11 08:46:39 +08:00
话说我一般用process.nextTick哎?
|
7
jakwings OP @yangff process.nextTick 有更专门的用途,我觉得用来取代 setImmediate 有点大材小用了……
|
9
jakwings OP @yangff nextTick 会让回调函数在当前线程的下一个事件回调函数被调用前执行。这样我们就可以在链式风格的函数调用中即时绑定任务,然后再为任务提供回调函数,而且不怕任务在提供回调函数之前就开始执行。
http://nodejs.org/api/process.html#process_process_nexttick_callback |