Was ist der Begriff, der verwendet wird, um eine komplette Call-Frame-Zyklus-Sache in JavaScript zu beschreiben?

8

In JavaScript gibt es das Konzept des Ausführungsweges, der an einem bestimmten Punkt beginnt (z. B. ein Event-Handler), wobei das Control irgendwann an den Browser zurückgegeben wird.

Gibt es einen richtigen Namen für diesen Prozess?

Ursprünglich dachte ich, du könntest das als "aktueller Stack Frame" bezeichnen, aber nachdem ich Wikipedia gelesen habe, sehe ich, dass es sich auf etwas anderes bezieht. Es ist nicht der Call-Stack, das ist die Brotkrume von wo wir waren.

(Entschuldigung für den peinlichen Titel ... Ich bin offen für Vorschläge:))

    
Wolverine 15.05.2015, 18:59
quelle

5 Antworten

5

Ich habe gehört, dass dies eine Wende der Ereignisschleife (von Ingenieuren bei Mozilla und von Mitgliedern des TC39, dem ECMAScript-Standardkomitee) genannt wurde.

Im ECMAScript-Standard ist ein Job definierte als" eine abstrakte Operation, die eine ECMAScript-Berechnung einleitet, wenn derzeit keine andere ECMAScript-Berechnung ausgeführt wird ". Das ist genau das, wonach Sie suchen, aber der Begriff ist nicht weit verbreitet.

Der HTML-Standard beschreibt Ereignisschleifen in verwirrenden Einzelheiten , aber den Begriff, den er verwendet , Aufgabe , wird ebenfalls nicht häufig verwendet.

    
Jason Orendorff 15.05.2015, 19:07
quelle
4

Ich glaube nicht, dass es einen gut etablierten Standardbegriff für das gibt, wonach Sie fragen.

Ich habe es gerade als "zurück zur Ereignisschleife" gehört oder "beende den aktuellen Thread der Ausführung und kehre zur Ereignisschleife zurück" .

Und node.js verwendet den Begriff "next tick" , um etwas Ähnliches zu meinen.

Javascript (sowohl in einem Browser als auch in node.js) ist ereignisgesteuert und alle asynchronen Operationen oder Benutzerereignisse werden ausgeführt, indem ein Ereignis in die Ereigniswarteschlange gestellt wird und dieses Ereignis nur verarbeitet wird, wenn der aktuelle Ausführungs-Thread ausgeführt wird Die JS-Engine kann dann das nächste Ereignis aus der Ereigniswarteschlange ziehen und ihre Ausführung starten. Da der zugrundeliegende Mechanismus eine Ereigniswarteschlange ist, ist es üblich, den Ausdruck "event" in dem Begriff zu verwenden, mit dem Sie ihn beschreiben.

Dieser Artikel zum Verständnis von process.nextTick () bezieht sich auf "jedes Häkchen der Ereignisschleife ".

  

Sie können sich diese Ereignisschleife als eine Warteschlange von Callbacks vorstellen   verarbeitet von Node bei jedem Tick der Ereignisschleife.

Die Dokumentation von node.js für process.nextTick() verwendet "Event-Loop-Turn-Läufe bis zum Abschluss". .

  

Sobald die aktuelle Ereignisschleife abgeschlossen ist, rufen Sie den Rückruf auf   Funktion.

Die Dokumentation von node.js für setImmediate() bezieht sich auf "Ereignisschleifeniteration" .

  

Rückrufe für sofortige Nachrichten werden in der Reihenfolge eingereiht, in der sie sich befanden   erstellt. Die gesamte Rückrufwarteschlange wird in jeder Ereignisschleife verarbeitet   Iteration. Wenn Sie eine sofortige aus einer ausgeführten ausführen   Callback, das sofortige wird nicht bis zur nächsten Ereignisschleife ausgelöst   Iteration.

    
jfriend00 15.05.2015 19:36
quelle
1

Ist der Begriff tick das, wonach Sie suchen? In node.js (das zugegebenermassen JavaScript ist) gibt es eine Funktion namens process.nextTick() , die eine Callback-Funktion akzeptiert, die angeblich unmittelbar nach dem aktuellen Ausführungszyklus auf dem "Tick" ausgeführt wird. Dies ist der Begriff, den ich immer verwendet habe, aber es könnte andere gebräuchliche Begriffe geben, um den Ereigniszyklus von JavaScript zu beschreiben.

    
Patrick Roberts 15.05.2015 19:06
quelle
1

Der Begriff, nach dem Sie suchen, ist die "Ereignisschleife" .

Während eine der Bedeutungen der Ereignisschleife die Sammlung von "Zyklen" über die Lebensdauer der Anwendung ist, bedeutet dies auch einfach "einen Zyklus" - zumindest auf Englisch.

Die Regel für die Nutzung ist grammatikalisch ähnlich der Differenz zwischen "der Straße", die sich auf die gesamte Strecke bezieht, und einer "Straße", die sich auf ein Straßensegment unter vielen Segmenten bezieht, die zusammenfahren up "die Straße".

Wenn wir also von der Architektur sprechen, nennen wir sie "die Event-Schleife". Und wenn wir über einen Zyklus in dieser Schleife sprechen, sagen wir einfach "eine Schleife" oder genauer gesagt "einen Zyklus der Ereignisschleife".

Diese Terminologie ist alt. Es entstand in GUI-Frameworks, die in den späten 70er und frühen 80er Jahren erstellt wurden. Frühe Entwicklerdokumentation des ursprünglichen Mac OS bezieht sich darauf als die Ereignisschleife (der Mac hatte damals keine Threadunterstützung, so wie JavaScript das gesamte Betriebssystem single threaded war).

Die ehrwürdige Tk UI-Bibliothek, die in den frühen 80er Jahren veröffentlicht wurde, bezeichnet sie auch als Event-Loop. Übrigens, die Tcl-Programmiersprache, wie Javascript, das danach kam, kommt mit einer eingebauten Ereignisschleife.

Traditionell ist der Ausdruck, der verwendet wird, um die Steuerung an die Ereignisschleife zurückzugeben, "yield" . In einigen Sprachen und / oder Frameworks gibt es tatsächlich ein Keyword oder eine Funktion namens "yield", um dies zu tun. In Tcl heißt es "update", weil das der Name der Funktion ist, die Sie aufrufen würden, um die Ereignisschleife absichtlich in Code einzugeben.

Javascript hat dieses Feature nicht *, daher gibt es in der JavaScript-Programmierung keine Terminologie, um bewusst in die Ereignisschleife zu gelangen. Der Interpreter wird einfach in die Ereignisschleife eintreten, in der nichts mehr läuft (im Grunde, wenn das Ende aller Dateien erreicht ist).

* Hinweis: Technisch können Sie indirekt bewirken, dass Code ausgesetzt und in den Ereignis-Loop im Browser eingetragen wird. Wenn Sie das DOM aktualisieren und es sofort abfragen (z. B. die Einstellung margin-width und dann die Abfrage von offsetWidth), wird der Browser in die Ereignisschleife eintreten, um das DOM aufzulösen. Diese Funktion kann jedoch nicht für andere Zwecke verwendet werden, da der Browser nur den Reflow-Prozess ausführt und keine anderen Ereignisse auslöst.

    
slebetman 15.05.2015 20:00
quelle
0

Sie beziehen sich auf eine leere " Callback-Warteschlange ". Dies wird durch die " Ereignisschleife " wie in anderen Antworten erwähnt geleert.

Philip Roberts ( @latentflip fantastischen Vortrag. Hier ist das Video und die Abschrift seines Vortrags Ссылка . Große Uhr und wird definitiv Sie besser verstehen, wie Javascript ausgeführt wird!

    
galenandrew 21.05.2015 14:08
quelle

Tags und Links