You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何关闭Chrome Sleep Mode?旧设置失效后的解决方案咨询

解决Chrome新版闲置标签页睡眠模式导致JS/AJAX停止的问题

Chrome新版移除了关闭闲置标签页睡眠模式的设置,现在即便关闭性能节流选项,闲置标签页仍会进入睡眠状态,导致JS停止运行、AJAX请求无法发起。给你几个实测有效的解决思路:

  • 用Web Worker绕开睡眠限制
    Web Worker运行在后台独立线程,不受标签页睡眠影响。把需要持续执行的AJAX逻辑放到Worker中即可,比如定时轮询场景:

    // 主页面代码
    const ajaxWorker = new Worker('ajax-worker.js');
    // 向Worker传递请求地址
    ajaxWorker.postMessage({ apiUrl: '你的接口地址' });
    // 接收Worker返回的请求结果
    ajaxWorker.onmessage = (e) => {
      console.log('AJAX请求结果:', e.data);
    };
    
    // ajax-worker.js 内容
    self.onmessage = (e) => {
      // 每隔5秒发起一次请求
      setInterval(() => {
        fetch(e.data.apiUrl)
          .then(res => res.json())
          .then(data => self.postMessage(data))
          .catch(err => console.error('请求失败:', err));
      }, 5000);
    };
    
  • 页面可见性API+心跳DOM操作
    无法彻底阻止睡眠,但可以在标签页恢复活跃时立刻补发起请求,同时用微小DOM操作尝试延缓睡眠(部分场景有效):

    let heartbeatTimer;
    // 执行微小DOM变更维持标签页活跃
    const keepAlive = () => {
      document.body.style.opacity = document.body.style.opacity === '1' ? '0.999' : '1';
    };
    
    // 监听标签页可见性变化
    document.addEventListener('visibilitychange', () => {
      if (document.hidden) {
        // 标签页隐藏时启动心跳
        heartbeatTimer = setInterval(keepAlive, 1000);
      } else {
        // 标签页恢复时停止心跳,立即发起AJAX
        clearInterval(heartbeatTimer);
        fetch('你的接口地址')
          .then(res => res.json())
          .then(data => console.log('恢复活跃后请求结果:', data));
      }
    });
    
  • 尝试Chrome实验性标志(注意风险)
    在地址栏输入chrome://flags/#calculate-native-win-occlusion,将该选项设置为Disabled,部分新版Chrome中该设置可禁用标签页遮挡检测,间接阻止睡眠。但实验性标志随时可能被移除,也可能导致浏览器不稳定,谨慎使用。

  • 改用服务端推送替代AJAX轮询
    如果业务允许,放弃定时AJAX轮询,换成WebSocket或Server-Sent Events(SSE)。这类持久化连接Chrome对闲置标签页的限制更宽松,能实现服务端主动推送数据,无需前端主动发起请求。

内容的提问来源于stack exchange,提问作者Yunus Emre Polat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 21:45:12