我正在尝试使用HTTPRequest下载文件所需的时间,如下所示:
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()
都会增加一个变量,理论上它应该具有一个以毫秒为单位的值,即间隔的运行时间。
下载文件后,我输出数据,清除定时器并以ms为单位显示时间。但是,该值不会累加。我应该差不多2秒,但只能站在250毫秒左右。
为什么setInterval
真的不是每1毫秒?
答案 0 :(得分:2)
<强>延迟强>
计时器应该以毫秒(千分之一秒)为单位的时间 执行指定函数或代码之间的延迟。 如果这样 参数小于10,使用值10。注意实际 延迟可能会更长;
(Mozilla,但其他浏览器似乎使用类似的值)
还提到the documentation of setTimeout
提到“实际延迟可能更长”的原因。
简而言之:
在现代浏览器中似乎有a way using window.postMessage
。
答案 1 :(得分:0)
setInterval()
和setTimeout()
的延迟可能会超过指定时间。这有很多原因:
有关详细信息,请参阅MDN WindowTimers.setTimeout(): Reasons for delays longer than specified。
答案 2 :(得分:-1)
如果将结果乘以 4,它将得到以 ms 为单位的实数。 我只是在 chrome 中尝试过。