Warum beschleunigt sich mein SetTimeout, wenn ich mehrere Registerkarten für meine Website geöffnet habe?

StackOverflow https://stackoverflow.com/questions/1157409

Frage

Ich habe einen Timer, der jede Sekunde zählt. Es funktioniert hervorragend, bis der Benutzer 3 oder 4 Registerkarten der My -Website öffnet. An diesem Punkt wird der Timer der neuesten Registerkarte doppelt oder dreifache Geschwindigkeit. Ich kann derzeit nur den Fehler in IE8 reproduzieren. Ich habe zuvor SetInterval verwendet und konnte auch den Fehler in Firefox reproduzieren.

Ich verwende tatsächlich FBJS (Facebooks JavaScript), also gebe ich nur Pseudocode.

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

countDown();

Was ich jedoch wirklich suche, ist theoretischer. Ich weiß, dass Browser versuchen können, mit SetInterval "COMING UP" zu spielen, aber wie können mehrere Registerkarten dieses Verhalten für SetTimeout verursachen?

War es hilfreich?

Lösung

Diese ganze Situation ist sehr seltsam. Das einzige Szenario, das in den Sinn kommt, wo es einen Sinn macht, ist eines, in dem der Browser versucht, die Zeit der selbstverstöße Sonstiges.

Ich weiß nicht, ob es machbar ist, insbesondere bei Facebook beteiligt, aber ein interessanter Test wäre, jedem Fall einen randomisierten Namen für die zu geben countDown Funktion und prüfen Sie, ob dies einen Unterschied macht, wie:

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

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

Wenn dies das beobachtete Verhalten ändert, argumentiert dies für das Szenario, das ich im Sinn habe. (Und bietet möglicherweise eine Möglichkeit, das Problem anzugehen.)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top