aboutsummaryrefslogtreecommitdiff
path: root/files/zh-cn/web/api/window/setimmediate
diff options
context:
space:
mode:
Diffstat (limited to 'files/zh-cn/web/api/window/setimmediate')
-rw-r--r--files/zh-cn/web/api/window/setimmediate/index.html54
1 files changed, 54 insertions, 0 deletions
diff --git a/files/zh-cn/web/api/window/setimmediate/index.html b/files/zh-cn/web/api/window/setimmediate/index.html
new file mode 100644
index 0000000000..12016988ac
--- /dev/null
+++ b/files/zh-cn/web/api/window/setimmediate/index.html
@@ -0,0 +1,54 @@
+---
+title: window.setImmediate
+slug: Web/API/Window/setImmediate
+tags:
+ - DOM
+ - setImmediate
+translation_of: Web/API/Window/setImmediate
+---
+<p>{{APIRef("HTML DOM")}}{{Non-standard_header}}</p>
+
+<p>该方法用来把一些需要长时间运行的操作放在一个回调函数里,在浏览器完成后面的其他语句后,就立刻执行这个回调函数。</p>
+
+<div class="note"><strong>注意:</strong> 该方法可能不会被批准成为标准,目前只有最新版本的 Internet Explorer 和Node.js 0.10+实现了该方法。<span style="font-size: 1rem; letter-spacing: -0.00278rem;">它遇到了 </span><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=686201" style="font-size: 1rem; letter-spacing: -0.00278rem;" title="https://bugzilla.mozilla.org/show_bug.cgi?id=686201">Gecko</a><span style="font-size: 1rem; letter-spacing: -0.00278rem;">(Firefox) 和</span><a href="http://code.google.com/p/chromium/issues/detail?id=146172" style="font-size: 1rem; letter-spacing: -0.00278rem;" title="http://code.google.com/p/chromium/issues/detail?id=146172">Webkit</a><span style="font-size: 1rem; letter-spacing: -0.00278rem;"> (Google/Apple) 的阻力.</span></div>
+
+<h2 id="语法">语法</h2>
+
+<pre>var immediateID = setImmediate(func, [param1, param2, ...]);
+var immediateID = setImmediate(func);
+</pre>
+
+<ul>
+ <li><code>immediateID</code> 是这次setImmediate方法设置的唯一ID,可以作为 {{ domxref("window.clearImmediate") }} 的参数.</li>
+ <li><code>func</code> 是将要执行的回调函数</li>
+</ul>
+
+<p>所有参数都会直接传给你的函数。</p>
+
+<h2 id="备注">备注</h2>
+
+<p>{{ domxref("window.clearImmediate") }} 方法可以用来取消通过setImmediate设置的将要执行的语句, 就像 {{ domxref("window.clearTimeout") }} 对应于 {{ domxref("window.setTimeout") }}一样.</p>
+
+<p>该方法可以用来替代 <code>setTimeout(fn, 0)</code> 去执行<a href="http://www.nczonline.net/blog/2009/08/11/timed-array-processing-in-javascript/">繁重的操作</a>(<a href="http://www.nczonline.net/blog/2009/08/11/timed-array-processing-in-javascript/" title="http://www.nczonline.net/blog/2009/08/11/timed-array-processing-in-javascript/">heavy operations</a>) </p>
+
+<p>可以通过以下几种方式来模仿该功能:</p>
+
+<ul>
+ <li>{{ domxref("window.postMessage") }} 可以被用来触发一个 immediate 但会产生回调. 请注意, Internet Explorer 8包含postMessage的同步版本, 这意味着它不能被用来作为代替品.</li>
+ <li><a href="https://developer.mozilla.org/en-US/docs/Web/API/MessageChannel" title="http://www.whatwg.org/specs/web-apps/current-work/multipage/web-messaging.html#channel-messaging">MessageChannel</a> 可以在Web Workers 内部很好的被使用, 而postMessage 的语义意味着它不能在那使用.</li>
+ <li><code>setTimeout(fn, 0)</code><em>可以使用</em>, 然而按照<a href="https://html.spec.whatwg.org/multipage/webappapis.html#timers" title="http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout">HTML规范</a>, 嵌套深度超过5级的定时器, 会被限制在4ms , 他没有为setImmediate的天然及时性提供合适的polyfill.</li>
+</ul>
+
+<p>所有这些技术都被纳入 <a href="https://github.com/NobleJS/setImmediate" title="https://github.com/NobleJS/setImmediate">robust setImmediate polyfill</a> 中.</p>
+
+<h2 id="浏览器兼容性">浏览器兼容性</h2>
+
+<p>{{Compat("api.Window.setImmediate")}}</p>
+
+<h2 id="相关链接">相关链接</h2>
+
+<p>{{ domxref("window.clearImmediate") }}</p>
+
+<p>{{ spec("https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/setImmediate/Overview.html", "Specification: Efficient Script Yielding") }}</p>
+
+<p><a class="external" href="http://ie.microsoft.com/testdrive/Performance/setImmediateSorting/Default.html">Microsoft setImmediate API Demo</a></p>