문맥
진보적 인 타이머를 가지고 웹 응용 프로그램 (로 제공 게임 setTimeout
, setInterval
)와 웹 소켓 연결은 실시간 통신을 얻을 수 있습니다.
무슨 일이야
사용자가 앱에 머무르는 한 모든 것이 정상입니다. 그러나 사용자가 다른 탭이나 다른 앱으로 이동하거나 화면을 끄면 (모바일의 경우) "지각적인 미지의 세계"가됩니다.
- 웹 소켓이 "일시 중지"되거나 "꺼져"있을 수 있습니다
- 타이머는 스로틀되거나 디 바운스되는 것처럼 보입니다.
이 동작은 브라우저와 플랫폼에 의존하는 것으로 보이며 특정 사용자 행동에 따라 결정될 수도 있습니다. 브라우저와 OS에는 배터리 및 / 또는 계산을 저장하는 자체 수명주기 / 메커니즘이 있다고 생각합니다.
사용자가 돌아 오면 앱이 알 수없는 상태이며 상태를 올바르게 복원하기 위해 고심하고 있습니다.
웹 소켓과 관련하여 socket.io 와 다시 연결하는 웹 소켓 을 자동으로 다시 연결 했지만 모든 것을 해결하기에는 충분하지 않습니다.
답을 찾고
- 이와 관련하여 다른 브라우저의 "라이프 사이클"은 무엇입니까? 이 문서가 있습니까? 그들은 언제 끄고 조절하기로 결정합니까?
- 웹 소켓에 정확히 무엇을합니까? 브라우저가 연결을 끊습니까?
- 타이머와 정확히 어떤 관계가 있습니까? 그들은 그들을 조절하거나 그들 또는 다른 것을 디 바운스합니까?
- 자바 스크립트 실행은 일반적으로 어떻게됩니까? 일시 중지 / 파괴 / 스로틀?
- 기능을 끌 때 브라우저 수명주기 이벤트에 연결하는 방법이 있습니까? 내가 찾을 수있는 유일한 것은 가시성 API 일 수 있습니다.
솔루션을 테스트 할 수 있도록이 동작을 인위적으로 재현하는 방법이 있습니까? 데스크탑에서는 특히 어렵습니다. 웹 소켓을 끌 수 없으며 크롬 개발자는 2014 (!)부터 문제를 해결 하기 위해 서둘러 보이지 않습니다. 연결 조절을 사용할 때 웹 소켓이 포함되지 않음
위와 상관없이이 문제를 감지 / 해결할 수있는 실용적인 크로스 브라우저 솔루션이 있습니까? (예를 들어 경험상 데스크톱의 Firefox는 Chrome과 완전히 다르게 작동하며 iPhone은 Android보다 훨씬 자주 연결이 끊어집니다)
관련된 링크들