Wpis z mikrobloga

#programowanie #javascript

Napisałem stoper i jest taki problem, że jak przełączę kartę w przeglądarce to jakoś dziwnie odlicza sekundy.
Normalnie minęła minuta a tam pokazuje 30sekund, jeśli zostanę na karcie ze stoperem to dobrze odlicza.

...
setTimeout('timerCycle()', 1000);
...

To jest jakiś bug setTimeout i lepiej zastoswać setInterval czy chodzi o coś innego?
  • 11
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@xmadesio: A czy to jest problem? Najlepiej na settimeout/interval pobieraj prawdziwy czas i na jego podstawie obliczaj bo nawet przy aktywnym tabie 1000ms timeoutu nie oznacza, że kod się wykona dokładnie po 1000ms. duże masz szanse na to, że zawsze będzie miał od kilku do nawet kilkunastu tysięcy ms opóźnienia i coś takiego masz na każdym interwale więc opóźnienie będzie się stopniowo zwiększać.
  • Odpowiedz
nawet przy aktywnym tabie 1000ms timeoutu nie oznacza, że kod się wykona dokładnie po 1000ms.duże masz szanse na to, że zawsze będzie miał od kilku do nawet kilkunastu tysięcy ms opóźnienia i coś takiego masz na każdym interwale więc opóźnienie będzie się stopniowo zwiększać.


@lobo: co takiego będzie robił JS przez kilka/naście sekund, że wywoła callbacka tak późno? To de facto oznacza ciągły freeze przeglądarki
  • Odpowiedz
@zackson: Może się wydarzyć mnóstwo rzeczy, ot w innym miejscu jakaś ciężka operacja która zapcha wątek. Na pewno miałeś sytuacje, że strona ci "zawisła" powodów może być naprawdę dużo.
  • Odpowiedz
@zackson: no i mój komentarz bardziej miał na zasadzie pokazanie, że zawsze będziesz miał te kilka/kilkanaście milisekund opóźnienia przy normalnej aktywności przeglądarki, ale mogą się zdarzyć sytuacje, że to opóźnienie może być znacznie większe i nie powinno się polegać na czasie który się podało.
  • Odpowiedz