Tengo un setInterval
código de ejecución 30 veces por segundo. Esto funciona muy bien, sin embargo, cuando selecciono otra pestaña (para que la pestaña con mi código se vuelva inactiva), setInterval
se establece en un estado inactivo por alguna razón.
Hice este caso de prueba simplificado ( http://jsfiddle.net/7f6DX/3/ ):
var $div = $('div');
var a = 0;
setInterval(function() {
a++;
$div.css("left", a)
}, 1000 / 30);
Si ejecuta este código y luego cambia a otra pestaña, espere unos segundos y regrese, la animación continúa en el punto en que estaba cuando cambió a la otra pestaña. Por lo tanto, la animación no se ejecuta 30 veces por segundo en caso de que la pestaña esté inactiva. Esto puede confirmarse contando la cantidad de veces setInterval
que se llama a la función cada segundo; no será 30 sino solo 1 o 2 si la pestaña está inactiva.
Supongo que esto se hace por diseño para mejorar el rendimiento, pero ¿hay alguna forma de desactivar este comportamiento? En realidad es una desventaja en mi escenario.
Date
. De modo que cuando los intervalos no se disparan rápidamente (por esta u otras razones), la animación se vuelve más brusca, no más lenta.
Date
objeto para ver realmente qué tiempo ha pasado.