Selbst mit einem aktiven Tab ist ein Interval/Timeout von 1s nicht 1s, da gibt es dauerhaft abweichen (clock drift). Das kann sich schon summieren und somit eine Abweichung von einigen Sekunden verursachen.
Es müsste somit in einem Zeitabstand t dauerhaft die Client-"Uhr" neu synchronisiert werden.
Auch richtig Daaron, deshalb habe ich folgende Idee:
1. Wenn die Seite aufgerufen wird berechnet PHP die bisher vergangene Zeit nach dem Start (beides Serverzeiten)
2. Ab dann berechnet der Client immer die vergangene Zeit seit Scriptstart und addiert immer die von PHP ermittelte Zeit dazu, damit bin ich unabhängig ob der Focus im Browser ist oder nicht...
Das einzige was dann passieren könnte ist, wenn der User in dieser Zeit seine aktuelle Systemzeit ändert, das ist für mich aber ein akzeptabler Fehler.
wenn du einfach mit Intervallen arbeitest bist du vollkommen unabhängig von der eingestellten Zeit beim Nutzer. Sicher gibt es Abweichungen bei sowas, aber ich habe hier für einen Kunden eine laufende Uhr mit Datum programmiert mit ganz ähnlichem Vorgehen (bei Seitenstart gibt Server Anfangswert mit, dann wird sekündlich "+1" gemacht). Ergebnis der Tests: In 2 Tagen Dauerlauf in einer VM, auf der alle möglichen Tests (Hintergrund neuer Browser wird geöffnet, CPU Last über mehrere Stunden 100% etc) liefen: Abweichung von nicht einmal 4 Sekunden. Ich finde, damit kann man leben