2
在用户离开标签页或关闭屏幕后,如何检测浏览器何时阻止计时器和WebSocket断开连接?(javascript)
语境 运是一种进步的Web应用程序具有定时器(A比赛setTimeout,setInterval)和WebSocket连接来获得实时通信。 怎么了 只要用户停留在应用程序中,一切都很好。但是,当用户转到另一个选项卡或另一个应用程序或关闭屏幕(在移动设备的情况下)时,它变成了一个“可怕的未知世界”。 Websocket可能会或可能不会“暂停”或“关闭” 计时器看起来像在节流或防抖。 这种行为似乎取决于浏览器和平台,甚至可能取决于特定的用户行为。我想浏览器和操作系统都有自己的生命周期/机制来节省电池和/或计算。 当用户回来时,该应用程序处于未知状态,我正在努力正确恢复该状态。 关于websocket,我可以通过socket.io和reconnecting-websocket自动重新连接,但这还不足以解决所有问题。 寻找答案 关于这些浏览器的不同浏览器的“生命周期”是什么?有记录吗?他们什么时候决定关闭并节流? 他们对websockets到底做了什么?浏览器只是断开它们的连接? 他们到底对计时器做什么?他们会抑制它们或使其反跳吗? 一般而言,javascript执行会怎样?暂停/破坏/节流? 有什么办法可以关闭某些浏览器生命周期事件?我唯一能找到的可能是可见性API 有没有一种方法可以人为地重现此行为以能够测试解决方案?在台式机上尤其困难。Websocket无法关闭,Chrome开发人员似乎并不急于解决2014年以来的问题(!):使用连接限制时不包含 Websocket 不管以上哪种情况,是否都存在实用的跨浏览器解决方案来检测/解决此问题?(例如,根据经验,台式机上的Firefox的行为似乎与Chrome完全不同,iPhone断开连接的频率要比Android高得多) 相关链接 由于页面不在焦点时,由于不活动,Safari断开了Web套接字连接