Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么JavaScript setTimeout在另一个选项卡中滞后?_Javascript_Settimeout - Fatal编程技术网

为什么JavaScript setTimeout在另一个选项卡中滞后?

为什么JavaScript setTimeout在另一个选项卡中滞后?,javascript,settimeout,Javascript,Settimeout,我正在使用setTimeout运行一个JavaScript程序,该程序将使用AJAX获取外部数据,并每1000毫秒或每秒更新一次页面内容 当我的网页所在的标签处于最前端时,这一点非常好。但是,如果页面在具有多个选项卡的浏览器窗口中运行,并且用户当前不在该选项卡中,则setTimeout将开始延迟(在一分钟内,而不是更新60次,它只更新30次左右) 但是,如果网页位于后台浏览器窗口的最前端,则setTimeout将继续以正确的速度运行 有人能解释一下为什么会发生这种情况,以及解决这种情况的方法吗?

我正在使用setTimeout运行一个JavaScript程序,该程序将使用AJAX获取外部数据,并每1000毫秒或每秒更新一次页面内容

当我的网页所在的标签处于最前端时,这一点非常好。但是,如果页面在具有多个选项卡的浏览器窗口中运行,并且用户当前不在该选项卡中,则setTimeout将开始延迟(在一分钟内,而不是更新60次,它只更新30次左右)

但是,如果网页位于后台浏览器窗口的最前端,则setTimeout将继续以正确的速度运行


有人能解释一下为什么会发生这种情况,以及解决这种情况的方法吗?

当选项卡不活动时,浏览器会抑制计时器频率,以节省用户的电池寿命。

有什么方法可以解决这个问题吗?我在另一个网站(progamingleague.com)上查看JavaScript计时器,甚至当我切换标签时,他们的计时器仍然准确运行。我有什么选择?它不在程序控制之下。这是现代浏览器所做的事情。你能做的最好的事情就是检查时钟,看看你的计时器是如何运行的,而不是它认为它是如何运行的。你所说的“检查时钟,看看你的计时器是如何运行的,而不是它认为它是如何运行的”到底是什么意思。这与在开始时记录系统时间有关吗,然后计算每1000毫秒的间隔数,并将其与实际系统时间进行比较?基本上,在超时/间隔处理程序中,您可以通过
Date.now()
或其他方式跟踪实际的挂钟时间,并查看实际频率。这样,如果你正在做增量动画或其他事情,你可以调整浏览器正在做什么。这就是我所想的。谢谢你的建议。这可能会为你提供答案: