Sven Rautenberg: Sekundenzähler stoppen und Starten

Beitrag lesen

Moin!

function zaehler() {
  if (ss == true) {
    s++;
  }
}

setInterval("zaehler()", 1000);

Es ist eine schlechte Idee, die Sekunden durch deine Zählfunktion hochzuzählen, die im vermeintlichen Sekundentakt aufgerufen wird. So eine "Uhr" wird schon nach kurzer Zeit ziemlich falsch gehen, weil Javascript im Browser nicht parallele Tasks ausführt, und das Timing von setTimeout bzw. setInterval extrem davon abhängt, was sonst noch so auf der Seite zu tun ist. Außerdem ist die Ausführungszeit des Skriptes zu berücksichtigen.

Unter dem Strich würde die Zählfunktion also nicht exakt alle 1000 Millisekunden aufgerufen, sondern tendentiell vielleicht alle 1015 bis 1063 Millisekunden - das ist immerhin eine Abweichung von 1 bis 6 %.

Die bessere Idee ist es, die Computeruhr einzusetzen zur Zeitzählung. Dazu merkt man sich in einem Date-Objekt die Uhrzeit des Starts und errechnet zu jedem Skriptdurchlauf dann die seitdem vergangene Zeit. Wenn die Uhranzeige dann nicht sekundengenau aktualisiert wird, macht das nichts - dann springt halt die Zeitanzeige mal nicht sekundengenau um, läuft aber trotzdem sekundengenau weiter.

- Sven Rautenberg