美文网首页
setTimeout,setInterval计时器不准的问题

setTimeout,setInterval计时器不准的问题

作者: 他爱在黑暗中漫游 | 来源:发表于2021-04-26 14:42 被阅读0次

setTimeout、setInterval 属于定时触发器线程属于macrotask,它的回调会受到GUI渲染、事件触发、http请求、等的影响。所以这两个不适合做精准的定时。最好的方法是定时矫正,用new Date(targetDate:Date - new Date )格式化成你需要的时分秒即可。

setInterval的回调函数并不是到了时间立即执行,而是等系统计算资源空闲下来后才会执行。 下一次触发时间是在setInterval回调函数执行完毕后才开始的。

为了js里可以使用相对准确的计时功能,我们可以用setTimeout代替setInterval

每次触发及时修正

var startTime = new Date().getTime();
var count = 0;
setInterval(function(){
    var i = 0;
    while(i++ < 100000000);
}, 0);
function fixed() {
    count++;
    var offset = new Date().getTime() - (startTime + count * 1000);
    var nextTime = 1000 - offset;
    if (nextTime < 0) nextTime = 0;
    setTimeout(fixed, nextTime);
     
    console.log(new Date().getTime() - (startTime + count * 1000));
}
setTimeout(fixed, 1000);

参考 https://www.cnblogs.com/zouxinping/p/5038287.html

相关文章

网友评论

      本文标题:setTimeout,setInterval计时器不准的问题

      本文链接:https://www.haomeiwen.com/subject/wswsrktx.html