Wenn Sie im <script>
Tag nichts gegenteiliges definieren, wird das Script synchron ausgeführt - das heißt, der Rest der Seite ist blockiert bis der Code ausgeführt ist.
Die Browser nehmen sich da aber u.U. einige Freiheiten. Eventuell zeigen Sie eine Warnung, dass ein Script die Seite blockiert - oder sie brechen es sogar ab, weil sie "denken", es handle sich um eine Fehlfunktion. Für die Browser steht die Benutzerfreundlichkeit im Vordergrund. Und da sind Script, welche die Seite für mehr als ein paar Millisekunden blockieren, ein Fehler.
Zuverlässiger wäre es, wenn Sie den Timer für den Seitenwechsel einfach erst nach Abschluss der Berechnungen starten. Sie können da ja auch die bereits vergangene Zeit subtrahieren bzw. gleich weiterleiten, wenn mehr als die 2-3 Sekunden vergangen sind.
Damit die Browser nicht interferieren, sollten Sie das Script auch nicht synchron (=blockierend) aufrufen, sondern z.B. über ein window.setTimeout()
mit ein paar Millisekunden.