Kontekst
Gra dostarczana jako progresywna aplikacja internetowa, która ma liczniki czasu ( setTimeout
, setInterval
) i połączenia z gniazdem sieciowym , aby uzyskać komunikację w czasie rzeczywistym.
Co się dzieje
Wszystko jest w porządku, dopóki użytkownik pozostaje w aplikacji. Ale kiedy użytkownik przechodzi do innej karty lub innej aplikacji lub wyłącza ekran (w przypadku telefonu komórkowego), staje się on „piekielnie nieznanym światem”.
- Gniazda sieciowe mogą, ale nie muszą, zostać „wstrzymane” lub „wyłączone”
- Czasomierze wyglądają, jakby były dławione lub debugowane.
To zachowanie wydaje się zależeć od przeglądarki i platformy, a może nawet zależy od konkretnego zachowania użytkownika. Wydaje mi się, że przeglądarki i system operacyjny mają swój własny cykl życia / mechanizmy oszczędzania baterii i / lub obliczeń.
Gdy użytkownik powraca, aplikacja jest w nieznanym stanie i mam trudności z prawidłowym przywróceniem stanu.
Jeśli chodzi o websockets, mam automatyczne ponowne połączenie z socket.io i reconnecting-websocket, ale to nie wszystko, aby rozwiązać wszystko.
Poszukuję odpowiedzi
- Jakie są „cykle życia” różnych przeglądarek w odniesieniu do nich? Czy to jest udokumentowane? Kiedy decydują się na wyłączenie i otwarcie przepustnicy?
- Co robią dokładnie z gniazdami internetowymi? Przeglądarki po prostu je rozłączają?
- Co dokładnie robią z licznikami czasu? Przepustają je, ogłaszają, czy coś innego?
- Co się dzieje z wykonywaniem javascript w ogóle? Wstrzymano / zniszczono / dławiono?
- Czy istnieje sposób, aby dołączyć do jakiegoś wydarzenia w cyklu życia przeglądarki, gdy ma to wyłączyć? Jedyne, co mogłem znaleźć, to API widoczności
Czy istnieje sposób na sztuczne odtworzenie tego zachowania w celu przetestowania rozwiązań? Jest to szczególnie trudne na komputerze. Websockets nie można wyłączyć, a programiści chromu nie wydają się spieszyć, aby pomóc w rozwiązaniu problemu z 2014 roku (!): Websockets nie są uwzględnione podczas korzystania z ograniczania połączenia
Niezależnie od powyższego, czy istnieje pragmatyczne rozwiązanie dla różnych przeglądarek w celu wykrycia / rozwiązania tego problemu? (na przykład z doświadczenia Firefox wydaje się zachowywać zupełnie inaczej niż Chrome, a iPhone rozłącza się znacznie częściej niż Android)
powiązane linki