如何替换事件页面扩展中的短(不到一分钟)setTimeouts
How to replace short (less than a minute) setTimeouts in Event Page Extensions
关于从后台持久扩展转换到非持久事件页面的文档,声明:
如果扩展使用window.setTimeout()或window.setInterval(),请改用报警API。如果事件页面关闭,基于DOM的计时器将不会被使用。
很公平,但警告API文件指出:
当可以在没有警告的情况下设置为"现在"后不到1分钟,但实际不会导致警报器启动至少1分钟。
所以,我的EventPage中有一个短的setTimeout,它需要5秒,如果我不能在短时间内使用闹钟,我如何确保它完成。设置1分钟长的警报对我来说不是一个解决方案。
如果您需要经常这样做,那么wOxxOm是绝对正确的:事件页面不适合您的需求。
文档不应被误解:持久的背景页不会以任何方式被否决。对于不规则和/或很少处理事情的后台页面,事件页面是一种更有效的解决方案。
常客不属于这一类。毕竟,频繁"旋转"事件页面是一种相当大的资源/性能损失,而不是让它随时准备好。
现在,当您只需要将此超时作为不频繁(而不是常规)操作的一部分时,问题变得更加棘手,因为您认为这些操作之间的长时间暂停可以从事件页面模型中受益。这是可能发生的!
然后,目标变成对Chrome来说足够"繁忙",这样就不会关闭事件页面。
可能最简单的方法是更频繁地调用计时器,因为事件页面可以保证持续几秒钟:
var SAFE_DELAY = 1000; // Guaranteed not to fall asleep in this interval
function setBusyTimeout(callback, delay) {
if(delay <= SAFE_DELAY) {
setTimeout(callback, delay);
} else {
var start = Date.now(); // setTimeout drifts, this prevents accumulation
setTimeout(
function() {
setBusyTimeout(callback, delay - (Date.now() - start));
}, SAFE_DELAY
);
}
// Can be expanded to be cancellable by maintaining a mapping
// of "busy timeout IDs" to real timeoutIds
}
这是一种非常"稀疏"的繁忙等待,不应该消耗太多资源——同样,如果不经常使用的话。
其他灵魂可能包括通过chrome.runtime.connect
和朋友保持开放端口。我怀疑它是否比上面的CPU效率更高。
相关文章:
- 计时器在使用 jQuery 一分钟后没有触发,或者每 1 分钟后给出一些其他解决方案来触发功能
- 使用 JavaScript 给 hh:mm 添加一分钟
- 设置饼干并在一分钟内过期
- 在 JavaScript Memory Aid 游戏中设置一分钟计时器
- 如何替换事件页面扩展中的短(不到一分钟)setTimeouts
- 带有cookie的JavaScript倒计时计时器在一分钟后停止
- c.beginPath不是函数??那是一分钟前的事了
- 在mongodb的日期字段中添加一分钟
- 如何限制元素在一分钟内被点击的次数?
- 添加一分钟的时间对象
- 如何延迟JavaScript JSON流一分钟
- 获得数学.四舍五入到下一分钟,即使超过一秒
- 一个javascript,可以显示不同的图像,每一分钟的一天
- 一分钟后用原型重定向页面
- 如何在javascript中设置一分钟计数器
- 每隔一分钟运行JS函数
- 在Javascript中为当前时间添加一分钟
- 用Node.js每隔一分钟发出一个请求
- 自动加载在ajax jquery每隔一分钟
- 为什么这个Javascript循环需要一分钟来进行100次迭代?