Ich möchte JavaScript-Ausführung auf Client-Seite für eine bestimmte Anzahl von Millisekunden (z. B. Schlaf) völlig synchrone blockieren, indem Sie einige JavaScript an der Spitze Die Seite.Blockieren JavaScript-Ausführung für eine bestimmte Zeit ohne unnötige Berechnung
Während des Wartens sollte nichts passieren. Die Seite sollte nicht weiter geladen werden. Es sollte nicht reagieren. Außerdem möchte ich, wenn möglich, eine Genauigkeit von 1-10 Millisekunden haben, und die Wartezeit kann über 1000 Millisekunden betragen.
Der Standard "Lösung" für dieses Problem ist ... eine andere Frage zu stellen, weil dies NICHT etwas ist, das Sie normalerweise tun möchten. Was Sie normalerweise tun möchten, ist etwas in Richtung await Promise.delay(1000)
.
Also bin ich mir der Probleme bewusst, die dabei auftreten, ich bin mir bewusst, dass es unter fast allen Umständen eine schreckliche Idee ist, aber ich muss es trotzdem tun. Und um Ihre Seele baumeln zu lassen, wird die Seite nur von einem kopflosen Browser benutzt, so dass keine Benutzer bei der Ausführung dieses Hacks verletzt werden.
Eine tatsächliche Lösung für das Problem wäre:
while (expectedTime > Date.now()) { }
die sehr gut funktioniert. Aber es hat den Nebeneffekt viel unnötige Berechnungen zu machen, wenn ich nur die Ereignisschleife an stop sagen will.
Ich denke, der Trick könnte sein, die Seite zu zwingen, einige synchrone I/O für die ersten paar 100ms von ms zu tun und dann auf die obige Taktik zurückgreifen, aber ich bin nicht sicher, wie dies zu erreichen. Ich kann den Server auch benutzen, wenn das hilft.
WEB Javascript Kontext hat keinen „Schlaf“ wie-Funktion zur Verfügung, die die inneren Ereignisschleife setzen würde in dem Ruhezustand und CPU-Zyklen zu speichern. Aus welchem Grund sollte Ihre Webseite warten? – Stphane