后台选项卡上的最小 setInterval()/setTimeout() 延迟

发布于 2024-11-18 09:59:42 字数 1200 浏览 3 评论 0原文

可能的重复:
Chrome:后台选项卡中的超时/间隔暂停?

是否有最小值在当前未查看的选项卡上运行 setInterval()setTimeout() 时允许延迟吗?

此代码以 100 毫秒的指定延迟运行 setInterval(),并写出实际延迟多长时间。它还会报告您何时进入/离开选项卡。

<html>
<body>
<script type="text/javascript">

window.onfocus = function () { document.body.innerHTML += 'entered tab<br />'; };
window.onblur = function () { document.body.innerHTML += 'left tab<br />'; };
var previous = new Date().getTime();
setInterval(function () {
    var now = new Date().getTime();
    var elapsed = now - previous;
    document.body.innerHTML += elapsed + '<br />';
    previous = now;
}, 100);

</script>
</body>
</html>

以下是 Ubuntu 10.04.2 LTS 上 Chrome 12.0.742.100 上的输出摘录:

101
101
101
left tab
1001
1000
1004
1003
1002
1000
entered tab
101
101
101
102
101

我也尝试了不同的延迟值。当您查看不同的选项卡时,任何小于 1000 的值都会导致与将其提高到 1000 相同的行为。超过 1000 的值表现正常。此代码的 setTimeout() 版本也会发生同样的情况。

Possible Duplicate:
Chrome: timeouts/interval suspended in background tabs?

Is there a minimum allowed delay for setInterval() and setTimeout() when being run on a tab you're not currently looking at?

This code runs setInterval() with a specified delay of 100ms and writes out how long the delay actually was. It also reports when you enter/leave the tab.

<html>
<body>
<script type="text/javascript">

window.onfocus = function () { document.body.innerHTML += 'entered tab<br />'; };
window.onblur = function () { document.body.innerHTML += 'left tab<br />'; };
var previous = new Date().getTime();
setInterval(function () {
    var now = new Date().getTime();
    var elapsed = now - previous;
    document.body.innerHTML += elapsed + '<br />';
    previous = now;
}, 100);

</script>
</body>
</html>

Here's an excerpt of the output on Chrome 12.0.742.100 on Ubuntu 10.04.2 LTS:

101
101
101
left tab
1001
1000
1004
1003
1002
1000
entered tab
101
101
101
102
101

I tried different values for the delay too. Any value less than 1000 results in the same behavior of it being raised to 1000 when you're looking at a different tab. Values over 1000 behave correctly. And the same thing happens with the setTimeout() version of this code.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

故人的歌 2024-11-25 09:59:42

我知道您的示例适用于 Chrome,但至少适用于 Firefox,来自 Firefox 5 发行说明(位于“Firefox 的新增功能”下)。

后台选项卡有 setTimeout 和
setInterval 钳制为 1000ms
提高性能


哦,我刚刚意识到这已经被问到关于 chrome 的问题了,在这里:Chrome:在后台选项卡中暂停超时/间隔?。那里有一个链接表明这在 Chrome 中也是如此。

I know your example was for Chrome, but for Firefox at least, from the Firefox 5 Release Notes (under "What's New in Firefox").

Background tabs have setTimeout and
setInterval clamped to 1000ms to
improve performance


Oh, and I just realised this has already been asked in regard to chrome, over here: Chrome: timeouts/interval suspended in background tabs?. There's a link there that shows that this is also true in Chrome.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文