Chrome(和其他浏览器)如何在浏览器选项卡隐藏且不活动时处理设置为高于 1000 毫秒的“setTimeout”?
How does Chrome (and other browsers) handle a “setTimeout” set to higher than 1000 milliseconds when a browser tab is hidden and inactive?
我正在调试一个由外部供应商为客户维护的网站上的一些 login/logout 问题,希望标题能说明问题,但更多细节在下面。
据我了解,Chrome 中隐藏选项卡中的任何 JavaScript 运行 都会将任何 setTimeout
的值更改为 1000 毫秒以维护整个系统性能而不浪费资源。作为 explained on this site:
“Browsers do exactly this. For inactive tabs, they automatically throttle timers to run every 1 second, regardless of the original delay specified in the code. For example, if the code originally used setInterval() to run some code every 50 ms, once the application is moved to a background tab, the interval automatically becomes 1000 ms (1 second).”
对于设置为低于 1,000 毫秒(如 50 毫秒等)的 setTimeout
值,这绝对有意义。但是高于 1,000 毫秒的值呢?
即使 900,000 毫秒(又名:900 秒,又名:15 分钟)明显高于该值,Chrome 是否会将 setTimeout
值设置为 1,000 毫秒?
这是供应商网页中的一段代码,我认为它导致了我试图协助调试的问题。它在隐藏选项卡中时不起作用。
function keepSessionAlive() {
if (externalAdminWindow && externalAdminWindow.closed) {
externalAdminWindow = null;
}
if (externalFGWindow && externalFGWindow.closed) {
externalFGWindow = null;
}
if (externalAdminWindow || externalFGWindow) {
$find("ctl00_RadAjaxManager1").ajaxRequest("KeepAlive");
setTimeout(function() {
keepSessionAlive();
}, 900000);
}
}
大多数浏览器 节流 非活动选项卡超时。这意味着所有 setTimeout
的超时时间至少为 1000 毫秒。比这更长的一切都应该按预期工作。所以,回答你的问题,15 分钟超时应该不会受到影响。
查看 MDN 上 setTimeout
的 非活动选项卡超时 部分:https://developer.mozilla.org/en-US/docs/Web/API/setTimeout#timeouts_in_inactive_tabs
我正在调试一个由外部供应商为客户维护的网站上的一些 login/logout 问题,希望标题能说明问题,但更多细节在下面。
据我了解,Chrome 中隐藏选项卡中的任何 JavaScript 运行 都会将任何 setTimeout
的值更改为 1000 毫秒以维护整个系统性能而不浪费资源。作为 explained on this site:
“Browsers do exactly this. For inactive tabs, they automatically throttle timers to run every 1 second, regardless of the original delay specified in the code. For example, if the code originally used setInterval() to run some code every 50 ms, once the application is moved to a background tab, the interval automatically becomes 1000 ms (1 second).”
对于设置为低于 1,000 毫秒(如 50 毫秒等)的 setTimeout
值,这绝对有意义。但是高于 1,000 毫秒的值呢?
即使 900,000 毫秒(又名:900 秒,又名:15 分钟)明显高于该值,Chrome 是否会将 setTimeout
值设置为 1,000 毫秒?
这是供应商网页中的一段代码,我认为它导致了我试图协助调试的问题。它在隐藏选项卡中时不起作用。
function keepSessionAlive() {
if (externalAdminWindow && externalAdminWindow.closed) {
externalAdminWindow = null;
}
if (externalFGWindow && externalFGWindow.closed) {
externalFGWindow = null;
}
if (externalAdminWindow || externalFGWindow) {
$find("ctl00_RadAjaxManager1").ajaxRequest("KeepAlive");
setTimeout(function() {
keepSessionAlive();
}, 900000);
}
}
大多数浏览器 节流 非活动选项卡超时。这意味着所有 setTimeout
的超时时间至少为 1000 毫秒。比这更长的一切都应该按预期工作。所以,回答你的问题,15 分钟超时应该不会受到影响。
查看 MDN 上 setTimeout
的 非活动选项卡超时 部分:https://developer.mozilla.org/en-US/docs/Web/API/setTimeout#timeouts_in_inactive_tabs