Javascript 当转到另一个chrome选项卡时,setInterval计时器将更慢

Javascript 当转到另一个chrome选项卡时,setInterval计时器将更慢,javascript,Javascript,我建立了一个倒计时计时器,所以-当我停留在倒计时铬标签,它的工作良好。 但是当我转到另一个选项卡(倒计时)时,它会使它变慢 例如,当你开始倒计时30秒,你转到另一个选项卡10秒,当你回到倒计时选项卡时,它将在24秒内,而不是20秒(只是一个非常多变的例子) 这里不需要progressCountdown函数,因为当我在倒计时选项卡中时,它工作正常 有一些选项可以解决这个问题?不能保证在给定的延迟之后运行超时。事实上,延迟会比您给出的延迟长的原因可能有很多,例如,如果您的网页或CPU超负荷工作,或者

我建立了一个倒计时计时器,所以-当我停留在倒计时铬标签,它的工作良好。 但是当我转到另一个选项卡(倒计时)时,它会使它变慢

例如,当你开始倒计时30秒,你转到另一个选项卡10秒,当你回到倒计时选项卡时,它将在24秒内,而不是20秒(只是一个非常多变的例子)

这里不需要
progressCountdown
函数,因为当我在倒计时选项卡中时,它工作正常


有一些选项可以解决这个问题?

不能保证在给定的延迟之后运行超时。事实上,延迟会比您给出的延迟长的原因可能有很多,例如,如果您的网页或CPU超负荷工作,或者如果浏览器为了节省电源和电池而对其进行节流(这是许多浏览器使用后台选项卡所做的事)

然而,您实际的问题似乎是,您正在使用超时来跟踪时间本身。由于上述问题,这通常是非常不准确的。您应该做的是使用时钟来跟踪触发超时之前所花费的时间:

//performance.now()是测量持续时间的好方法
让atStart=performance.now();
函数timeoutCallback(){
让现在=性能。现在();
//毫秒现在是准确的,不管超时实际花费了多长时间
//无论是在前台还是在后台选项卡中
让毫秒=现在-开始时;
//剩余秒数
设secondsLeft=Math.ceil(30毫秒/1000);
console.log('倒计时:'+secondsLeft);
如果(secondsLeft>0)
setTimeout(timeoutCallback,1000);
}

setTimeout(timeoutCallback,1000)你的代码很棒,但只是为了跟踪,我试着想办法将你的代码与我的倒计时合并,但我没有。@AmandaWhite我已经将我的示例更新为实际的倒计时,希望这更有帮助。
stopper = setTimeout(progressCountdown, 1000);