Question

J'ai une minuterie qui compte à rebours à chaque seconde. Il fonctionne très bien jusqu'à ce que l'utilisateur ouvre 3 ou 4 onglets du mon site, à quel point la minuterie de la nouvelle onglet va vitesse double ou triple. Je peux reproduire actuellement que le bogue dans IE8. J'utilisais déjà setInterval, et pourrait reproduire le bug dans Firefox ainsi.

Je suis en fait à l'aide FBJS (Javascript Facebook), donc je vais juste donner quelques pseudo-code.

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

countDown();

Cependant, ce que je suis vraiment pour plus théorique. Je sais que les navigateurs peuvent essayer de jouer « rattraper » setInterval, mais comment plusieurs onglets pour provoquer ce problème setTimeout?

Était-ce utile?

La solution

Cette situation est tout très étrange. Le seul scénario qui vient à l'esprit où il a un sens est celui où le navigateur tente de « lisser » la période de SetTimeouts auto-rétablissement, même que pour setInterval, et le code qui fait cela embrouille fait minuteries dans différentes fenêtres avec chaque autres.

Je ne sais pas s'il est possible, en particulier avec Facebook impliqué, mais un test intéressant serait de donner à chaque exemple un nom aléatoire pour la fonction countDown et voir si cela fait une différence, comme:

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

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

Si cela change le comportement observé, qui plaide pour le scénario que j'ai à l'esprit. (Et peut-être une offre façon d'aborder le problème.)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top