无法理解`setTimeout()`中的最小超时值

时间:2016-06-21 10:05:24

标签: javascript settimeout

我在某些问题What is minimum millisecond value of setTimeout?中看到人们谈论“setTimeout的最小超时”,但我无法真正理解它。

它说HTML5规范中的最小超时值是4ms,所以我想,如果我在浏览器中运行以下代码(比如Chrome):

setTimeout(function() { console.log("333"); }, 3);
setTimeout(function() { console.log("222"); }, 2);
setTimeout(function() { console.log("111"); }, 1);
setTimeout(function() { console.log("000"); }, 0);

输出应为:

333
222
111
000

但实际上是:

111
000
222
333

似乎它们仍然按照指定的超时运行,即使它们小于4(期望01

我应该如何理解价值4ms

2 个答案:

答案 0 :(得分:1)

HTML 5规范指定了4 ms的限制,并且在2010年及之后发布的浏览器中保持一致。

List of all MySQL reserved words

要在现代浏览器中实现0毫秒超时,您可以使用window.postMessage()

http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#timers

更多信息

https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage

https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setTimeout

答案 1 :(得分:1)

阅读推荐文章后(感谢@Rayon和@rafaelcastrocouto),以及这篇文章:

http://www.adequatelygood.com/Minimum-Timer-Intervals-in-JavaScript.html

我意识到也许我误解了" minimal"延迟值。

setTimeout中的指定超时有两个含义:

  1. 该函数将在指定的超时时间或之后运行(不在此之前)
  2. 订单将由指定超时的值决定,越早越早(在某些平台中,0被视为与1相同),并且首先添加的将是更早的他们有相同的超时
  3. 我们不需要关注" minimal"此图层中的延迟值(例如4ms)。

    然后任务将由Javascript运行时执行。运行时将逐个从事件队列中获取任务(也检查超时是否正常),然后执行它们。但是对于某些性能问题,运行时无法在上一个任务完成后立即执行下一个任务,可能会有一个微小的延迟(根据不同的运行时实现),而在HTML5规范中,延迟应该是> = 4ms(早期浏览器中为10ms)