Es gibt zwei wichtige Ansatzpunkte.
Zum einen das Neu-Laden der Seite. Wenn man den Timer mit PHP koppelt, kann man dafür sorgen, dass das Neu-Laden keinen Einfluss hat.
Zum anderen das Verhalten des Browsers, wenn eine Seite keinen Input bekommt oder in den Hintergrund geschaltet wird (weil man parallel eine andere Seite öffnet), oder wenn das Display dunkel schaltet. Da kann es durchaus passieren, dass Browser einen Timer "herunterregeln" und bei der Rückkehr zum Tab die Seite evtl. sogar neu lädt.
Ein möglicher Workaround könnte darin bestehen, dass man die Seite automatisiert alle 30 Sekunden neu lädt. Dann kann sich der Timer mit dem Server synchronisieren (s. PHP oben) und die Abweichung dürfte deutlich geringer ausfallen. Natürlich ist das nu eine Option, wenn das Neu-Laden die Wirkung des Stimulus nicht beeinträchtigt.
Und ja, vermutlich wäre es auch hilfreich, wenn die Seite offen/im Vordergrund bleibt und das Display nicht abschaltet.