浏览器页面处于不活跃状态时setInterval不定时执行

浏览器页面处于不活跃状态时setInterval不定时执行

1.问题背景

页面建立webSocket并设置定时保活机制,切换到后台或其他标签页一段时间后,定时器未按时调用,导致保活超时,ws closed

2.原因

当页面变为非活动状态时,WebKit 会自动采取措施来节省电量:

页面变为非活动状态(不是用户的主要焦点)的情况有多种,例如:

  • 用户切换到不同的选项卡。
  • 用户切换到不同的应用程序。
  • 浏览器窗口最小化。
  • 浏览器窗口可见但不是焦点窗口。
  • 浏览器窗口位于另一个窗口的后面。
  • 窗口所在的空间不是当前空间。

3.解决方案

使用 Web Workers。可以让浏览器窗口在非激活状态(或者最小化)也让setTimeout、setInterval有效不休眠的功能。

而且webWorkers还可以解决一个页面存在多个定时器时候间隔时间误差较大的问题。

4.交互状态

对于 Web 开发人员,需要考虑三种交互状态:

  • 当用户主动与内容交互时。
  • 当页面位于最前面,但用户没有与之交互时。
  • 当页面不是最前面的内容时。

页面可见性监听:

  • 页面可见性 API提供了一种方法来响应页面转换到后台或前台。这是避免在页面处于后台时更新 UI
  • blur只要页面不再聚焦,就会发送事件。在这种情况下,页面可能仍然可见,但它不是当前聚焦的窗口。

5.参考:

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 作者:陈大鱼头github: KRISACHAN[https://github.com/KRISACHAN] 在上...
    Kris陈大鱼头阅读 279评论 0 0
  • 设备齐全的厨房并不一定意味着烤好的甜点。当谈到它在烘焙令人惊叹的蛋糕方面的作用时,厨房只与其中的糕点厨师一样好。同...
    启辰阅读 408评论 0 0
  • 整理中 目标: 了解跨域 解决跨域 服务器配置跨域(java, nginx) 前端调试时配置解决跨域 一、什么是跨...
    麦曦阅读 987评论 0 0
  • 什么是同源策略 同源策略是一个重要的安全策略,它用于限制一个origin[https://developer.mo...
    rangel阅读 289评论 0 0
  • 在做项目的过程中,经常需要把数据存储在本地,便于提高用户的体验效果等,如权限验证的token、用户信息、数据埋点、...
    DoNow阅读 355评论 0 1