Javascript 设置间隔延迟不准确
我目前正在使用setInterval创建一个倒计时,不过目前它运行速度比应该的慢。根据,延迟参数以毫秒为单位,但并不准确 我将我的倒计时与手机上的倒计时进行了比较,手机运行速度快了近5倍Javascript 设置间隔延迟不准确,javascript,jquery,setinterval,Javascript,Jquery,Setinterval,我目前正在使用setInterval创建一个倒计时,不过目前它运行速度比应该的慢。根据,延迟参数以毫秒为单位,但并不准确 我将我的倒计时与手机上的倒计时进行了比较,手机运行速度快了近5倍 var count = setInterval( function() { if (iMil == 0) { if (iS == 0) { if (iMin == 0) {
var count = setInterval( function() {
if (iMil == 0) {
if (iS == 0) {
if (iMin == 0) {
if (iH == 0) {
// DONE
} else {
iH--;
iMin = 59;
iS = 59;
iMil = 999;
}
} else {
iMin--;
iS = 59;
iMil == 999;
}
} else {
iS--;
iMil = 999;
}
} else {
iMil--;
}
hours.text(iH);
minutes.text(iMin);
seconds.text(iS);
milliseconds.text(iMil);
}, 1 );
这是我剧本的主要部分。变量小时
、分钟
、秒
和毫秒
是jQuery对象元素
我想说的是,它的运行速度是否也比预期的慢?setInterval()
不能保证在javascript中完全按时运行。这部分是因为JS是单线程的,部分是因为其他原因。如果要使用setInterval()
显示时间,请获取每个计时器上的当前时间并显示该时间。setInterval()
将不是您的计时器,而只是一种定期屏幕更新机制。如果你这样做,你的时间显示总是准确的
此外,任何浏览器都不能保证以1毫秒的间隔呼叫您的手机。事实上,许多浏览器调用setInterval
的频率永远不会超过每5毫秒一次,有些甚至超过5毫秒一次。另外,如果浏览器中发生任何其他事件,并且其他代码响应这些事件,则setInterval()
调用可能会延迟更长时间。HTML5规范建议4ms为setTimeout()
的最短间隔,10ms为setInterval()
的最短间隔,但允许实现者在需要时使用更长的最短时间
事实上,如果你看一下,算法的第5步说:
如果超时小于10,则将超时增加到10
第8步说:
(可选)等待另一个用户代理定义的时间长度
其中包括以下注释:
这是为了允许用户代理根据需要填充超时,以
优化设备的电源使用。例如,一些处理器
具有低功耗模式,其中定时器的粒度减小;在…上
在这样的平台上,用户代理可以降低计时器的运行速度以适应这一时间表
而不是要求处理器使用更精确的模式
它与更高的功耗相关
setInterval()
不能保证在javascript中完全按时运行。这部分是因为JS是单线程的,部分是因为其他原因。如果要使用setInterval()
显示时间,请获取每个计时器上的当前时间并显示该时间。setInterval()
将不是您的计时器,而只是一种定期屏幕更新机制。如果你这样做,你的时间显示总是准确的
此外,任何浏览器都不能保证以1毫秒的间隔呼叫您的手机。事实上,许多浏览器调用setInterval
的频率永远不会超过每5毫秒一次,有些甚至超过5毫秒一次。另外,如果浏览器中发生任何其他事件,并且其他代码响应这些事件,则setInterval()
调用可能会延迟更长时间。HTML5规范建议4ms为setTimeout()
的最短间隔,10ms为setInterval()
的最短间隔,但允许实现者在需要时使用更长的最短时间
事实上,如果你看一下,算法的第5步说:
如果超时小于10,则将超时增加到10
第8步说:
(可选)等待另一个用户代理定义的时间长度
其中包括以下注释:
这是为了允许用户代理根据需要填充超时,以
优化设备的电源使用。例如,一些处理器
具有低功耗模式,其中定时器的粒度减小;在…上
在这样的平台上,用户代理可以降低计时器的运行速度以适应这一时间表
而不是要求处理器使用更精确的模式
它与更高的功耗相关
setInterval()
不能保证在javascript中完全按时运行。这部分是因为JS是单线程的,部分是因为其他原因。如果要使用setInterval()
显示时间,请获取每个计时器上的当前时间并显示该时间。setInterval()
将不是您的计时器,而只是一种定期屏幕更新机制。如果你这样做,你的时间显示总是准确的
此外,任何浏览器都不能保证以1毫秒的间隔呼叫您的手机。事实上,许多浏览器调用setInterval
的频率永远不会超过每5毫秒一次,有些甚至超过5毫秒一次。另外,如果浏览器中发生任何其他事件,并且其他代码响应这些事件,则setInterval()
调用可能会延迟更长时间。HTML5规范建议4ms为setTimeout()
的最短间隔,10ms为setInterval()
的最短间隔,但允许实现者在需要时使用更长的最短时间
事实上,如果你看一下,算法的第5步说:
如果超时小于10,则将超时增加到10
第8步说:
(可选)等待另一个用户代理定义的时间长度
其中包括以下注释:
这是为了允许用户代理根据需要填充超时,以
优化设备的电源使用。例如,一些处理器
具有低功耗模式,其中定时器的粒度减小;在…上
在这样的平台上,用户代理可以降低计时器的运行速度以适应这一时间表
而不是要求处理器使用更精确的模式
它与更高的功耗相关
setInterval()
不能保证在javascript中完全按时运行。这部分是因为JS是单线程的,部分是因为其他原因。如果要使用setInterval()
显示时间,请获取