setTimeout 对比睡眠模式
setTimeout Vs. sleep mode
根据我在几个 SO 答案中的理解,如果计算机在调用 setTimeout
后进入睡眠模式,则应忽略睡眠时间。
例如:
- t0:
setTimeout(foo, 30000);
- t0+20s:电脑进入睡眠模式
- t0+40s:计算机退出睡眠模式
- t0+50s:
foo
被调用
但是,我的测试显示了以下行为:
- t0:
setTimeout(foo, 30000);
- t0+20s:电脑进入睡眠模式
- t0+40s:电脑退出休眠模式,
foo
被调用
我的理解是,当计算机唤醒时,如果在休眠期间触发了超时,则立即触发,否则在t0+[超时值]时触发。
那么预期的行为是什么?
它在所有浏览器和 OS 中都一样吗?
我的一项测试(在 Windows 10 上使用最新版本的 Chrome):https://codepen.io/robloche/pen/GRJvEJB
总结以上评论:
- 我描述的行为似乎对每个人都有意义。
- 我仍然不确定是否符合规范或所有浏览器都以这种方式实现它。
我最初的问题是更新身份验证令牌,我最终得到了一个不使用 setTimeout
的解决方案(感谢 ):
- 当我获得令牌时,我计算并存储下一个续订日期
- 我使用
setInterval
定期检查下一个续订日期是否已过。
这样,计算机在下一个续订日期前 1 秒或 36 小时后唤醒都没有关系。
根据我在几个 SO 答案中的理解,如果计算机在调用 setTimeout
后进入睡眠模式,则应忽略睡眠时间。
例如:
- t0:
setTimeout(foo, 30000);
- t0+20s:电脑进入睡眠模式
- t0+40s:计算机退出睡眠模式
- t0+50s:
foo
被调用
但是,我的测试显示了以下行为:
- t0:
setTimeout(foo, 30000);
- t0+20s:电脑进入睡眠模式
- t0+40s:电脑退出休眠模式,
foo
被调用
我的理解是,当计算机唤醒时,如果在休眠期间触发了超时,则立即触发,否则在t0+[超时值]时触发。
那么预期的行为是什么? 它在所有浏览器和 OS 中都一样吗?
我的一项测试(在 Windows 10 上使用最新版本的 Chrome):https://codepen.io/robloche/pen/GRJvEJB
总结以上评论:
- 我描述的行为似乎对每个人都有意义。
- 我仍然不确定是否符合规范或所有浏览器都以这种方式实现它。
我最初的问题是更新身份验证令牌,我最终得到了一个不使用 setTimeout
的解决方案(感谢 ):
- 当我获得令牌时,我计算并存储下一个续订日期
- 我使用
setInterval
定期检查下一个续订日期是否已过。
这样,计算机在下一个续订日期前 1 秒或 36 小时后唤醒都没有关系。