我在某些问题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(期望0
和1
)
我应该如何理解价值4ms
?
答案 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
中的指定超时有两个含义:
0
被视为与1
相同),并且首先添加的将是更早的他们有相同的超时我们不需要关注" minimal"此图层中的延迟值(例如4ms
)。
然后任务将由Javascript运行时执行。运行时将逐个从事件队列中获取任务(也检查超时是否正常),然后执行它们。但是对于某些性能问题,运行时无法在上一个任务完成后立即执行下一个任务,可能会有一个微小的延迟(根据不同的运行时实现),而在HTML5规范中,延迟应该是> = 4ms(早期浏览器中为10ms)