2016-11-22 121 views
0

我想一次文件需要多长时间使用它来下载一个HTTPRequest像这样:的setInterval 1毫秒似乎并没有实际上是1ms的

function getFile() { 
    'use strict'; 
    var url = "data.bin"; 
    var rawFile = new XMLHttpRequest(); 
    var timer_var = setInterval(theTimer, 1); 

    rawFile.open("GET", url, true); 
    rawFile.onreadystatechange = function() { 
     if(rawFile.readyState === XMLHttpRequest.DONE && rawFile.status === 200) { 
      toLog(rawFile.responseText); 
      window.clearInterval(timer_var); 
      toLog("Milliseconds for download: " + time_taken); 
     } 
    }; 
    rawFile.send(null); 
} 

function theTimer() { 
    'use strict'; 
    toLog(time_taken); 
    time_taken++; 
} 

正如你可以看到我已经setInterval打电话theTimer每一毫秒。所有thetimer()确实增加了一个变量,理论上这个变量应该有一个以毫秒为单位的时间间隔运行的值。

当文件被下载时,我输出数据,清除计时器并显示以毫秒为单位的时间。但是,价值不加起来。我应该差不多2秒钟,但只能在250ms左右。

为什么setInterval真的不是每1ms?

+0

可能重复[什么是setTimeout的最小毫秒值?](http://stackoverflow.com/questions/9647215/what-is-minimum-millisecond-value-of-settimeout) –

+1

如果你想知道如何花了很长时间,比较时间戳。 'setInterval'和家人在给定的延迟之后的某个时候发射,当它有机会的时候。 –

+0

嗨,亚历克斯,时间戳!当然。 –

回答

0

From the docs

延迟

的时间,以毫秒为单位(千分之一秒),则定时器应该 延迟中所指定的功能或代码的执行之间。 如果这个 参数小于10,则使用值10。请注意,实际的 延迟可能会更长;

(Mozilla的,但其他浏览器似乎使用类似的值)

也有到the documentation of setTimeout提的原因参考为什么“的实际延迟可能会更长。”

简而言之:

  • 没有为嵌套超时的最小延迟(已经在spec)
  • 非活动选项卡可以夹紧超时以减少负载
  • 页面/浏览器/ OS可能处于繁忙与其他任务

在现代浏览器中似乎有a way using window.postMessage

+0

感谢您解释setTimeout/setInterval中的延迟。我认为比较时间戳是一个好方法。 –

相关问题