Pregunta

Tengo un temporizador de cuenta atrás que cada segundo. Funciona a la perfección hasta que el usuario abre 3 o 4 pestañas de la mi sitio, momento en el que el temporizador de la pestaña más reciente va velocidad doble o triple. Puedo actualmente sólo reproducir el error en IE8. Estaba previamente utilizando setInterval, y podía reproducir el error en Firefox también.

En realidad estoy usando FBJS (de Facebook Javascript), así que voy a dar un poco de pseudocódigo.

function countDown() {
  ...
  setTimeout(function() { countDown() }, 1000);    
}

countDown();

Sin embargo, lo que realmente estoy buscando es más teórica. Sé que los navegadores pueden tratar de jugar "ponerse al día" con setInterval, pero ¿cómo puedo varias pestañas causar este comportamiento para setTimeout?

¿Fue útil?

Solución

Toda esa situación es muy extraña. El único escenario que viene a la mente cuando tiene algún sentido es aquella en la que el navegador está tratando de "suavizar" el período de setTimeouts auto-restablecimiento, lo mismo que para setInterval, y el código que está haciendo eso en realidad confunde temporizadores en diferentes ventanas con cada uno otra.

No sé si es posible, especialmente con Facebook involucrado, pero una prueba interesante sería dar a cada instancia de un nombre aleatorio para la función countDown y ver si hay alguna diferencia, como:

<?php $timerTag = rand(1, 1000); ?>
function countDown<?php echo $timerTag ?>() {
  ...
  setTimeout(function() { countDown<? php echo $timerTag ?>() }, 1000);    
}

countDown<?php echo $timerTag ?>();

Si esto cambia el comportamiento observado, que argumenta a favor de la hipótesis que tengo en mente. (Y, posiblemente, proporciona una forma de abordar el problema.)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top