Estoy desarrollando un juego web que utiliza un paso de tiempo físico fijo.
Actualmente estoy haciendo toda mi física y renderizando en una función requestAnimationFrame .
Esto funciona perfectamente, pero requestAnimationFrame suspende y deja de ejecutarse cuando el usuario se desconecta (supongo que para ahorrar rendimiento del procesador).
Como resultado, si saltas durante unos 30 minutos y luego vuelves, el juego tiene que simular 30 minutos de física para volver al punto correcto.
Esto es muy malo, ya que hace que la pestaña se congele mientras la CPU funciona al 100 % durante los próximos 3 minutos mientras ejecuta todos esos cálculos físicos.
Creo que la única solución es hacer que la física se ejecute mientras la pestaña está inactiva, pero no estoy seguro de cómo. Supongo que solo debería tener la representación en requestAnimationFrame , porque no importa si se pierde. Pero la física necesita ser mantenida.
Aparentemente, setInterval también se suspende cuando el usuario se retira.
Entonces, ¿cómo se debe manejar esto? Necesito una forma de ejecutar la física cada 16,6667 milisegundos, independientemente de si el usuario está tabulado o no. es posible? Escuché sobre WebWorkers, pero ¿es esa la solución real? ¿Para poner todo el juego dentro de un WebWorker? ¿Qué pasa cuando quiero cambiar el DOM y cosas así? Parece un poco demasiado.