วิธีการตรวจสอบเมื่อเบราว์เซอร์ throttles ตัวจับเวลาและ websockets ขาดการเชื่อมต่อหลังจากที่ผู้ใช้ออกจากแท็บหรือปิดหน้าจอ? (จาวาสคริปต์)
บริบท เกมที่จัดส่งเป็นแอปเว็บโปรเกรสซีฟซึ่งมีตัวจับเวลา ( setTimeout, setInterval) และการเชื่อมต่อ websocket เพื่อรับการสื่อสารตามเวลาจริง เกิดอะไรขึ้น ทุกอย่างเรียบร้อยตราบใดที่ผู้ใช้ยังอยู่ในแอพ แต่เมื่อผู้ใช้ไปที่แท็บอื่นหรือแอพอื่นหรือปิดหน้าจอ (ในกรณีที่ใช้มือถือ) มันจะกลายเป็น "โลกที่ไม่รู้จักชั่วร้าย" เว็บซ็อคเก็ตอาจหรือไม่อาจกลายเป็น "หยุดชั่วคราว" หรือ "ปิด" ตัวจับเวลาดูเหมือนว่าพวกเขาจะถูกควบคุมปริมาณหรือเลิก พฤติกรรมนี้ดูเหมือนจะขึ้นอยู่กับเบราว์เซอร์และแพลตฟอร์มและบางทีอาจขึ้นอยู่กับพฤติกรรมของผู้ใช้ ฉันเดาว่าเบราว์เซอร์และระบบปฏิบัติการมีวงจร / กลไกของตัวเองเพื่อประหยัดแบตเตอรี่และ / หรือการคำนวณ เมื่อผู้ใช้กลับมาแอปนั้นอยู่ในสถานะที่ไม่รู้จักและฉันกำลังพยายามกู้คืนสถานะอย่างถูกต้อง เกี่ยวกับเว็บซ็อกเก็ตฉันมีการเชื่อมต่ออัตโนมัติกับsocket.ioและเชื่อมต่ออีกครั้ง - websocketแต่มันก็ไม่เพียงพอที่จะแก้ปัญหาทุกอย่าง กำลังมองหาคำตอบ "วงจรชีวิต" ของเบราว์เซอร์ต่าง ๆ ที่เกี่ยวข้องกับสิ่งเหล่านี้คืออะไร? เป็นเอกสารนี้หรือไม่? พวกเขาตัดสินใจปิดและเค้นเมื่อไหร่? พวกเขาทำอะไรกับ websockets อย่างแน่นอน? เบราว์เซอร์เพิ่งยกเลิกการเชื่อมต่อหรือไม่ พวกเขาทำอะไรกับตัวจับเวลาอย่างแน่นอน? พวกเขาเร่งเร้าพวกเขาหรือหักหลังพวกเขาหรืออย่างอื่น เกิดอะไรขึ้นกับการใช้งานจาวาสคริปต์โดยทั่วไป? หยุดชั่วคราว / ทำลาย / ควบคุมปริมาณ? มีวิธีที่จะขอเข้าสู่วงจรชีวิตของเบราว์เซอร์บางประเภทเมื่อกำลังจะปิดบางสิ่งหรือไม่? สิ่งเดียวที่ฉันสามารถค้นหาได้คือAPI …