vez una tiempo solo segundos loop intervalo funcion ejecutar cierto cada javascript google-chrome firefox timer setinterval

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á.