为什么 Chome 会在一小时后停止 setTimeout

2022-12-10 22:54:20 +08:00
 christin

我有个接口需要 10 秒钟调用一次,但是根据业务反馈一个多小时后接口就请求不到数据了。我查了日志,发现一个多小时之后就没有再调这个接口了。
查了谷歌,找到了一个 Chrome 88+ 会在页面隐藏 5 分钟后将计时器限制为 1 分钟一次,我自己测试也确实看到了这种情况。但是没有找到 1 小时后停止的相关信息。
问了 chatGPT ,他给我了一个因为性能考虑会在一小时后做限制,但是没有信源也不知道该不该相信他。
另外,这种情况要怎么解决呢?限制为 1 分钟一次我查到可以通过播放声音来取消限制,但是停止就不知道了。

690 次点击
所在节点    问与答
7 条回复
christin
2022-12-10 23:11:39 +08:00
不好意思看错了,是 setInternal.
```javascript
useEffect(() => {
timer = setInterval(() => {
let nowTime = moment().format('YYYY-MM-DD HH:mm:ss');
let beforeTime = moment(nowTime).subtract(6, 'h').format('YYYY-MM-DD HH:mm:ss');
//umi 请求接口
dispatch({
type: 'namespace/query',
payload: { type: 1, date: [beforeTime, nowTime] },
});
}, 10000)
return componentWillUnmount;
}, []);
```
bjzhush
2022-12-10 23:13:42 +08:00
我先善意嘲讽一下啊,你居然会寄希望与 chatGPT 这种玩具,是不是喝多了哈哈哈
不是写 JS 的,帮你搜了下,用的关键词是 chrome inactive tab settimeout ,大致看到了一些解决方案,没看太细致。
https://developer.mozilla.org/en-US/docs/Web/API/setTimeout 这个里面提到了 Timeouts in inactive tabs
,给出了一些解决方案。
另外 StackOverflow 上也有一些讨论, 比如 https://stackoverflow.com/questions/6032429/chrome-timeouts-interval-suspended-in-background-tabs
最后不建议在 js 中直接搞 10 秒调用 1 次这种任务,毕竟浏览器的非活动页面不是那么可靠,chrome 有一些定时请求和刷页面的扩展可以考虑让用户来使用
bjzhush
2022-12-10 23:14:40 +08:00
另外 inactive tab 可以考虑换成 background tab ,貌似 chrome 中这种叫法多一些
christin
2022-12-11 00:19:15 +08:00
@bjzhush 感谢回复,我自己尝试了一下发现 1 小时后停止 setInternal 并不是必现的,可能是其他原因导致的。业务方也没有做额外的测试就汇报了这个问题。
另外麻烦问一下您说的“chrome 有一些定时请求和刷页面的扩展可以考虑让用户来使用”具体是指什么呢?
bjzhush
2022-12-11 00:22:39 +08:00
christin
2022-12-11 01:27:34 +08:00
@bjzhush 不好意思我又查了一下我们的日志,发现每天都会出现一段时间之后直接停止请求的情况。
https://imgur.com/a/8y8K5Cf
https://imgur.com/a/GpnnThp
https://imgur.com/a/2N7Wc0b
图里面是这一个接口一天的请求情况,柱状图的高度代表请求次数。
麻烦问一下这种情况有碰到吗?我在 so 里面看到的都是减慢请求频率,没有这种直接停止的情况。
这种插件在我们的业务中有点不太好用,我打算用播放音频的方式来试一下,如果还是不行的话就只能用 websocket 或者 web worker 来改造了。希望这样能够解决停止请求的问题。
bjzhush
2022-12-11 09:03:41 +08:00
如果我是你,我会把请求这个事放到服务器端来做,浏览器只看状态统计和执行开始以及停止动作

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/901617

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX