V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
christin
V2EX  ›  问与答

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

  •  
  •   christin · 2022-12-10 22:54:20 +08:00 · 690 次点击
    这是一个创建于 571 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    第 1 条附言  ·  2022-12-11 00:19:40 +08:00
    此问题作废,浪费各位时间了,深表抱歉。
    christin
        1
    christin  
    OP
       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
        2
    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
        3
    bjzhush  
       2022-12-10 23:14:40 +08:00
    另外 inactive tab 可以考虑换成 background tab ,貌似 chrome 中这种叫法多一些
    christin
        4
    christin  
    OP
       2022-12-11 00:19:15 +08:00
    @bjzhush 感谢回复,我自己尝试了一下发现 1 小时后停止 setInternal 并不是必现的,可能是其他原因导致的。业务方也没有做额外的测试就汇报了这个问题。
    另外麻烦问一下您说的“chrome 有一些定时请求和刷页面的扩展可以考虑让用户来使用”具体是指什么呢?
    bjzhush
        5
    bjzhush  
       2022-12-11 00:22:39 +08:00
    christin
        6
    christin  
    OP
       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
        7
    bjzhush  
       2022-12-11 09:03:41 +08:00 via iPad
    如果我是你,我会把请求这个事放到服务器端来做,浏览器只看状态统计和执行开始以及停止动作
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3491 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 10:31 · PVG 18:31 · LAX 03:31 · JFK 06:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.