瀏覽器頁面處于不活躍狀態(tài)時setInterval不定時執(zhí)行

瀏覽器頁面處于不活躍狀態(tài)時setInterval不定時執(zhí)行

1.問題背景

頁面建立webSocket并設置定時?;顧C制,切換到后臺或其他標簽頁一段時間后,定時器未按時調用,導致?;畛瑫r,ws closed

2.原因

當頁面變?yōu)榉腔顒訝顟B(tài)時,WebKit 會自動采取措施來節(jié)省電量:

頁面變?yōu)榉腔顒訝顟B(tài)(不是用戶的主要焦點)的情況有多種,例如:

  • 用戶切換到不同的選項卡。
  • 用戶切換到不同的應用程序。
  • 瀏覽器窗口最小化。
  • 瀏覽器窗口可見但不是焦點窗口。
  • 瀏覽器窗口位于另一個窗口的后面。
  • 窗口所在的空間不是當前空間。

3.解決方案

使用 Web Workers??梢宰尀g覽器窗口在非激活狀態(tài)(或者最小化)也讓setTimeout、setInterval有效不休眠的功能。

而且webWorkers還可以解決一個頁面存在多個定時器時候間隔時間誤差較大的問題。

4.交互狀態(tài)

對于 Web 開發(fā)人員,需要考慮三種交互狀態(tài):

  • 當用戶主動與內(nèi)容交互時。
  • 當頁面位于最前面,但用戶沒有與之交互時。
  • 當頁面不是最前面的內(nèi)容時。

頁面可見性監(jiān)聽:

  • 頁面可見性 API提供了一種方法來響應頁面轉換到后臺或前臺。這是避免在頁面處于后臺時更新 UI
  • blur只要頁面不再聚焦,就會發(fā)送事件。在這種情況下,頁面可能仍然可見,但它不是當前聚焦的窗口。

5.參考:

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 作者:陳大魚頭github: KRISACHAN[https://github.com/KRISACHAN] 在上...
    Kris陳大魚頭閱讀 302評論 0 0
  • 設備齊全的廚房并不一定意味著烤好的甜點。當談到它在烘焙令人驚嘆的蛋糕方面的作用時,廚房只與其中的糕點廚師一樣好。同...
    啟辰閱讀 638評論 0 0
  • 整理中 目標: 了解跨域 解決跨域 服務器配置跨域(java, nginx) 前端調試時配置解決跨域 一、什么是跨...
    麥曦閱讀 1,007評論 0 0
  • 什么是同源策略 同源策略是一個重要的安全策略,它用于限制一個origin[https://developer.mo...
    rangel閱讀 347評論 0 0
  • 在做項目的過程中,經(jīng)常需要把數(shù)據(jù)存儲在本地,便于提高用戶的體驗效果等,如權限驗證的token、用戶信息、數(shù)據(jù)埋點、...
    DoNow閱讀 488評論 0 1

友情鏈接更多精彩內(nèi)容