Contesto
Un gioco distribuito come un'app Web progressiva con timer ( setTimeout
, setInterval
) e connessioni Web per ottenere comunicazioni in tempo reale.
Che cosa sta succedendo
Va tutto bene finché l'utente rimane nell'app. Ma quando l'utente passa a un'altra scheda o un'altra app o spegne lo schermo (nel caso di dispositivi mobili), diventa un "mondo infernale sconosciuto".
- I websocket possono o meno diventare "in pausa" o "disattivati"
- I timer sembrano essere strozzati o rimbalzati.
Questo comportamento sembra dipendere dai browser e dalla piattaforma e, forse, dipende anche dal comportamento particolare dell'utente. Suppongo che i browser e il sistema operativo dispongano di un proprio ciclo di vita / meccanismi per risparmiare batteria e / o calcolo.
Quando l'utente torna, l'app si trova in uno stato sconosciuto e faccio fatica a ripristinare correttamente lo stato.
Per quanto riguarda i websocket, ho una riconnessione automatica con socket.io e riconnessione-websocket, ma non è sufficiente per risolvere tutto.
In cerca di risposte
- Quali sono i "cicli di vita" dei diversi browser in merito? Questo è documentato? Quando decidono di spegnere e accelerare?
- Cosa fanno esattamente ai websocket? I browser li disconnettono e basta?
- Cosa fanno esattamente ai timer? Li rallentano o li rimbalzano o qualcos'altro?
- Cosa succede all'esecuzione di JavaScript in generale? In pausa / distrutto / strozzato?
- C'è un modo per agganciarsi a una sorta di evento del ciclo di vita del browser quando spegnerà le cose? L'unica cosa che ho potuto trovare potrebbe essere l' API di visibilità
C'è un modo per riprodurre artificialmente questo comportamento per poter testare le soluzioni? È particolarmente difficile sul desktop. I websocket non possono essere disattivati e gli sviluppatori di cromo non sembrano avere fretta di risolvere un problema dal 2014 (!): I websocket non sono inclusi quando si utilizza la limitazione della connessione
Indipendentemente da quanto sopra, esiste una soluzione pragmatica tra browser per rilevare / risolvere questo problema? (ad esempio, per esperienza, Firefox sul desktop sembra comportarsi in modo completamente diverso rispetto a Chrome e un iPhone si disconnetterà molto più spesso di un Android)
Link correlati