Skip to main content
05:00

Odliczanie, które liczy takty, spóźnia się; takie, które patrzy na zegar, nie

Przeglądarki celowo spowalniają liczniki w kartach, na które nie patrzysz. Odliczanie zbudowane na odejmowaniu stałej wartości przy każdym takcie traci dokładnie tyle czasu, ile przeglądarka wstrzymała, więc kończy się z opóźnieniem — czasem o minuty. To odliczanie zapamiętuje moment, w którym ma się skończyć, i przy każdej aktualizacji porównuje go z zegarem systemowym, co czyni spowalnianie bez znaczenia.

Jak to działa

  • Zamienia godziny, minuty i sekundy w jeden czas trwania i odlicza go.
  • Przy naciśnięciu startu zapisuje docelowy moment zakończenia, a wyświetlanie wyprowadza z zegara.
  • Wstrzymuje i wznawia na pozostałym czasie oraz blokuje pola, gdy odliczanie trwa.
czas trwania = godziny × 3 600 000 + minuty × 60 000 + sekundy × 1000  (milisekundy)
termin = teraz + czas trwania
pozostało = termin − teraz, odczytywane od nowa przy każdej aktualizacji
koniec, gdy pozostało ≤ 0

Przykład z liczbami

Pięciominutowy licznik, uruchomiony i pozostawiony w karcie w tle.

  1. czas trwania = 5 × 60 000 = 300 000 ms
  2. termin zostaje ustalony w chwili naciśnięcia startu
  3. licznik zliczający takty odejmuje przy każdej aktualizacji stały krok, więc pominięte aktualizacje to stracony czas
  4. ten przelicza termin − teraz, więc pominięte aktualizacje nic nie kosztują
  5. gdy wracasz do karty, odczyt jest już poprawny

Odliczanie jest dokładne niezależnie od tego, czy na nie patrzysz. Każdy licznik, który kumuluje własne odejmowania zamiast pytać zegar, będzie dryfował dokładnie w tych warunkach, w jakich najpewniej go użyjesz.

Jak czytać wynik

  • Licznik żyje w stronie. Zamknięcie karty go niszczy i żaden alarm potem do ciebie nie dotrze — do rzeczy, których naprawdę nie możesz przegapić, użyj alarmu w urządzeniu, który przetrwa przeglądarkę.
  • Wstrzymanie zachowuje czas pozostały, a nie pierwotny, więc wznowienie kontynuuje od miejsca zatrzymania. Reset wraca do tego, co aktualnie mówią pola — i dlatego pola są zablokowane w trakcie odliczania.
  • Wyświetlane sekundy są zaokrąglane w górę, więc licznik pokazujący 1:00 ma przed sobą od pięćdziesięciu dziewięciu do sześćdziesięciu sekund. Odliczanie do zera w ten sposób sprawia, że wyświetlacz osiąga 0:00 dokładnie wtedy, gdy czas naprawdę minął, a nie sekundę wcześniej.
  • Karty w tle mogą też opóźnić moment zauważenia końca. Pozostały czas będzie poprawny w chwili, gdy strona znów zadziała, ale przeglądarka, która całkowicie zawiesiła kartę, nie powiadomi cię co do sekundy.

Częste pytania

Czy licznik będzie działał, gdy przełączę karty?
Tak i pozostanie dokładny. Ponieważ moment zakończenia ustala się przy starcie, a wyświetlanie wyprowadza się z zegara systemowego, spowalnianie w karcie w tle zmienia częstotliwość odrysowania liczby, ale nigdy samą liczbę.
Czy mogę zamknąć kartę i wciąż dostać powiadomienie?
Nie. Odliczanie działające w stronie przestaje istnieć razem z nią. Jeśli przegapienie miałoby znaczenie, ustaw dodatkowo alarm w telefonie albo systemie operacyjnym.