javascript - una - setinterval ajax
setInterval no se ralentiza en la pestaƱa inactiva (1)
Esto es quizás lo opuesto a un problema muy común: cuando usa setInterval
en una pestaña y cambia a otra, el intervalo disminuye significativamente (es decir, se ralentiza). Esto es muy notable con la sincronización de audio ya que puede escuchar que se ralentiza.
Pero en los últimos Chrome 56 y Firefox 51, ya no puedo hacerlo realidad.
Sin embargo, en Chrome muy raramente, y aparentemente al azar, las pestañas de conmutación pueden tener un efecto. E incluso acelera a los Trabajadores Web por alguna razón.
Esto me está causando dolores de cabeza porque estoy tratando de escribir algunas cosas de Web Audio API que requieren un tiempo muy preciso, y ni siquiera puedo ver la diferencia entre setInterval y Web Workers, que deberían ejecutarse en su propio hilo.
¿Por qué no setInterval
actúa como solía hacerlo y setInterval
pestañas inactivas?
Actualización: incluso un setInterval
dentro de un Web Worker que se ha cargado a través de un URI de Blob, se acelera en algunos casos, como al cambiar de pestaña.
Como javascript es un código de compilación en tiempo de ejecución (compilado por el navegador en tiempo de ejecución, el navegador debe trabajar en él). Cuando navega a otra pestaña, la página tiene sus propios scripts y el navegador tiene que compilar ese código también. Por lo tanto, el navegador asigna una alta prioridad a los scripts en las pestañas activas y los scripts en las pestañas restantes se asignan con una prioridad más baja. Por lo tanto, afectará a los scripts en pestañas inactivas. Sin embargo, si tiene una máquina con mayor cantidad de RAM disponible, este problema no ocurrirá.