Implementar dos loops sincronizados a 60fps de manera similar a como se hace en motores de juegos.
En el hilo de UI resulta necesario:
Simplificar event listeners moviendo la creación de acciones al worker.
Desacoplar event listeners del loop de renderizado del navegador. Sólo deben actualizar valores que serán leidos en el momento más apropiado para ser enviados al worker.
Implementar un loop basado en request animation frame encargado de gestionar los tiempos.
En el worker:
Implementar la creación de acciones basadas en eventos. En la mayor parte de los casos esto implica sólo mover código de index.js a worker.js.
Implementar un loop de actualización que envie actualizaciones al hilo UI como máximo una vez cada 16ms sólo cuando existan modificaciones.
Estas modificaciones permiten:
Remplazar store-emmiter por un reducer mucho más simple que no necesita heredar de event emitter.
Evitar el efecto rebote (similar al que se observa en electrónica) tanto para event listeners en el hilo UI como para actualizaciones de estado en el worker.
Sincronizar la aplicación completa con la frecuencia de actualización del navegador de manera de obtener un renderizado fluido y consistente preservando la capacidad de respuesta de la interface en todo momento.
Implementar dos loops sincronizados a 60fps de manera similar a como se hace en motores de juegos.
En el hilo de UI resulta necesario:
En el worker:
Estas modificaciones permiten: