我有一个显示实时统计信息的页面。它运行大量的 javascript,发出大量的 HTTP 请求,使用 D3.js 每隔几秒渲染一次 SVG 图表,有大量的 CSS 动画,并且经常重新排列 DOM。
只要页面有焦点,它就可以顺利运行。如果我切换到另一个选项卡并稍后返回,通常会出现短暂的停顿,页面似乎被冻结,然后视图突然似乎重新呈现并且页面再次可用。选项卡的背景时间越长,此暂停的时间就越长。如果选项卡已经在后台很长时间(几个小时)并且我切换回它,它将被冻结很长时间然后崩溃。
在 Chrome 中观察到所有这些行为。我没有在其他浏览器中测试太多。
选项卡在后台时 Chrome 没有做什么,当我第一次切换回选项卡时它在暂停期间做什么?
更新:
我也在做一些 jQuery 动画。这个答案 和这个答案可能是相关的。
根据第一个答案:
“非活动浏览器选项卡缓冲了一些 setInterval 或 setTimeout 函数。”
stop(true,true) 将停止所有缓冲事件并立即执行最后一个动画。
我在我的代码中添加了对 .stop(true, true) 的调用,至少对于远离标签的短途旅行,我没有检测到打嗝。我需要将它留在后台很长时间并对其进行测试,然后才能判断它是否有显着差异。