![](/img/trans.png)
[英]What is the value of "this" within an anonymous function in setTimeout below?
[英]What is minimum millisecond value of setTimeout?
我想放
var minValue = 0;
if ( typeof callback == 'function' ) {
setTimeout( callback, minValue );
}
当我使用JavaScript实现回调函数时,此代码。
但是我发现现代的浏览器和一些旧的浏览器
具有不同的最小超时值。
我知道零不能是最小值。
setTimeout的最小值是多少
现代浏览器和某些旧版浏览器是否存在兼容性问题?
我认为10是所有浏览器中最可靠的最小值,因为我已经看到很多使用它的代码。
但是, HTML5最少需要4毫秒
实际上,HTML5规范指定了4毫秒,并且在2010年及以后发布的浏览器中保持一致。 在(Firefox 5.0 / Thunderbird 5.0 / SeaMonkey 2.2)之前,嵌套超时的最小超时值为10 ms。
在现代浏览器中,最小值为4毫秒(从HTML5开始),在此之前为10毫秒。 请注意,这些时间永远不会100%准确。
setTimeout
最有可能调用sleep
或Sleep
系统调用 。
setTimeout
的实际机制(包括最短毫秒)是专有的和/或系统相关的,因为它们不在ECMA官方规范中。 它取决于Javascript运行时以及运行它的系统。 给定的是,您的Javascript运行时不会增加很多开销,最小毫秒数由操作系统和硬件的时间片分辨率确定。 最小的“可睡眠”时间通常是系统的调度算法将进程分配给另一个时间片所花费的时间 。
例如,在Windows(XP后)上, 睡眠系统调用的文档显示:
值为零会导致线程将其时间片的其余部分放弃给准备运行的任何其他线程。 如果没有其他线程可以运行,该函数将立即返回,并继续执行该线程。
这意味着,在某些极为罕见的情况下,当前没有其他进程正在等待运行Javascript运行时进程的硬件线程 ,它可能在调用者执行完后立即继续运行,具体取决于Javascript运行时的方式被实施。 您可能不会经常观察到这种情况:)
本文测试Firefox,Safari和Opera,并绘制性能图:
http://ejohn.org/blog/analyzing-timer-performance/
Firefox 2,Opera和Safari的底部都有10毫秒的延迟窗口
对于较旧的浏览器,您可以像该文章中那样进行测试。 我刚刚使用IE6中的10ms间隔运行了一段时间前的setInterval
进行的测试,平均得到了55ms 。 setTimeout
似乎更低,为35ms 。
我在Chromium中进行了测试,并在10ms的超时时间内获得了平均11ms的时间。 我以4ms和1ms的间隔尝试了一下,两者都达到了〜4.5ms 。 另外,请记住,数字在操作系统之间可能会有所不同。
如果您有兴趣,这里是测试代码:
<script>
// number of times to call setTimeout before calculating average
var ITERATIONS = 200;
window.onload = function()
{
testTimeout(10, +new Date, 0, 0);
}
// calls setTimeout repeatedly at a specified interval, tracking the amount
// of time that passes between successive calls
function testTimeout(interval, last, sum, ii)
{
var time = +new Date;
var difference = time - last;
sum += difference;
if (ii % ITERATIONS == 1)
{
document.body.innerHTML = sum / ITERATIONS;
sum = 0;
}
window.setTimeout(
function() {
testTimeout(interval, time, sum, ii + 1)
}, interval);
}
</script>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.