window.setImmediate

非标准
该特性是非标准的,请尽量不要在生产环境中使用它!

该方法用来把一些需要长时间运行的操作放在一个回调函数里,在浏览器完成后面的其他语句后,就立刻执行这个回调函数。

注意: 该方法可能不会被批准成为标准,目前只有最新版本的 Internet Explorer 和Node.js 0.10+实现了该方法。它遇到了 Gecko(Firefox) 和Webkit (Google/Apple) 的阻力.

语法

var immediateID = setImmediate(func, [param1, param2, ...]);
var immediateID = setImmediate(func);
  • immediateID 是这次setImmediate方法设置的唯一ID,可以作为 window.clearImmediate 的参数.
  • func 是将要执行的回调函数

所有参数都会直接传给你的函数。

备注

window.clearImmediate 方法可以用来取消通过setImmediate设置的将要执行的语句, 就像 window.clearTimeout 对应于 window.setTimeout一样.

该方法可以用来替代 setTimeout(fn, 0) 去执行繁重的操作(heavy operations

可以通过以下几种方式来模仿该功能:

  • window.postMessage 可以被用来触发一个 immediate 但会产生回调. 请注意, Internet Explorer 8包含postMessage的同步版本, 这意味着它不能被用来作为代替品.
  • MessageChannel 可以在Web Workers 内部很好的被使用, 而postMessage 的语义意味着它不能在那使用.
  • setTimeout(fn, 0)可以使用, 然而按照HTML规范, 嵌套深度超过5级的定时器, 会被限制在4ms , 他没有为setImmediate的天然及时性提供合适的polyfill.

所有这些技术都被纳入 robust setImmediate polyfill 中.

浏览器兼容性

Update compatibility data on GitHub
DesktopMobile
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung Internet
setImmediate
Non-standard
Chrome No support NoEdge Full support 12Firefox No support NoIE Full support 10Opera No support NoSafari No support NoWebView Android No support NoChrome Android No support NoFirefox Android No support NoOpera Android No support NoSafari iOS No support NoSamsung Internet Android ?

Legend

Full support  
Full support
No support  
No support
Compatibility unknown  
Compatibility unknown
Non-standard. Expect poor cross-browser support.
Non-standard. Expect poor cross-browser support.

相关链接

window.clearImmediate

Specification: Efficient Script Yielding

Microsoft setImmediate API Demo