Mam zegar, który odlicza co sekundę. Działa to świetnie, dopóki użytkownik nie otworzy 3 lub 4 zakładki mojej witryny, w którym to momencie zegar najnowszej zakładki ma podwójną lub potrójną prędkość. Obecnie mogę tylko odtworzyć błąd w IE8. Wcześniej używałem setInterval i mogłem odtworzyć błąd w Firefoksie.Dlaczego mój setTimeout przyspiesza, gdy mam wiele kart otwartych do mojej witryny?
Używam FBJS (Javascript Facebooka), więc podam tylko pseudokod.
function countDown() {
...
setTimeout(function() { countDown() }, 1000);
}
countDown();
Jednak to, czego naprawdę szukam, jest bardziej teoretyczne. Wiem, że przeglądarki mogą próbować odtwarzać "catch up" z setInterval, ale w jaki sposób wiele zakładek może powodować to zachowanie dla setTimeout?
Wow, dając funkcje losowe nazwy zrobili lewę! Jak to możliwe, że javascript w różnych oknach może wpływać na siebie nawzajem? – lamplighter
Dziwaczne, prawda? Sądzę, że musi to być coś w rodzaju "wygładzania" kodu gdzieś w głębi przeglądarki identyfikującej funkcje tylko po nazwie (no, prawdopodobnie przez stronę + nazwę) i bez rozróżniania między różnymi zakładkami/oknami. Może naprawdę warto gdzieś zgłosić błąd. – chaos
To może być alternatywne rozwiązanie bez PHP: http://stackoverflow.com/questions/6112671/settimeout-speeds-up-with-multiple-tabs/6112864#6112864 – namuol