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.
- czas trwania = 5 × 60 000 = 300 000 ms
- termin zostaje ustalony w chwili naciśnięcia startu
- licznik zliczający takty odejmuje przy każdej aktualizacji stały krok, więc pominięte aktualizacje to stracony czas
- ten przelicza termin − teraz, więc pominięte aktualizacje nic nie kosztują
- 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.