【问题标题】:workaround for FF5 and chrome setInterval(), setTimeout() in inactive tabFF5 和 chrome 的解决方法 setInterval(), setTimeout() 在非活动选项卡中
【发布时间】:2011-08-04 15:14:17
【问题描述】:

有 js 优化导致非活动选项卡减慢 ff5 和 chrome 中的 setInterval() 和 setTimeout()。我已经设置了66米米秒,但它上升到1000瓦涅特选项卡无效。

有办法确定标签处于非活动状态时经过了多长时间,但我需要 js 继续运行并执行操作,例如为某些事件播放声音。有什么办法可以实现吗?

【问题讨论】:

    标签: javascript firefox google-chrome settimeout setinterval


    【解决方案1】:

    这些限制的全部意义在于防止后台页面使用过多的 CPU。即使用户看不到选项卡,您究竟有哪些 15Hz 的事件需要播放声音?

    【讨论】:

    • 我明白了这个限制的原因。我们在浏览器中玩虚拟足球比赛,真正的倒数第二场比赛只有 66 毫秒。每 66 毫秒都会发生一些动作,例如移动时钟或发生某些事件
    • @Michal Kikta 如果心跳定时器没有以 15Hz 触发,你能不能只合并更新?也就是说,在后台选项卡中,计时器会每秒触发一次,您将在 15 秒内完成所有工作。
    • 合并是答案,我想到了。我可以在一秒钟内将所有 15 个操作分组,以便立即发生,只要用户在另一个选项卡上,它就不会有什么不同。这可以通过一些不太长的代码来完成,并且对应用程序没有重大变化,谢谢
    【解决方案2】:

    Mozilla 正在研究一种不同的方式来实现 setInterval 和 setTimeout,称为 requestAnimationFrame,也许它可以帮助您解决问题,或者至少希望未来的更新能够解决这个问题。

    请注意,这是一项实验性功能,在寻求跨浏览器支持时请注意限制。

    https://developer.mozilla.org/en/DOM/window.mozRequestAnimationFrame

    【讨论】:

    • 它看起来不错,并且在 chorme 和 ff 中都得到了实现,但在非活动选项卡中看起来会变慢
    • "回调的次数通常为每秒60次,但通常会根据W3C的建议与大多数Web浏览器中的显示刷新率相匹配。在运行时回调率可能会降低到较低的频率背景标签。” developer.mozilla.org/en-US/docs/Web/API/…
    猜你喜欢
    • 2019-12-09
    • 2011-12-26
    • 2015-01-16
    • 1970-01-01
    • 2012-01-07
    • 2013-08-27
    • 1970-01-01
    • 2014-03-30
    • 2017-03-23
    相关资源
    最近更新 更多