3 Stimmen

Stapelgröße und Rückrufe in Javascript

Erhöhen asynchrone Operationen mit Rückrufen die Stapelgröße? Ich habe nicht genug Wissen über Javascript-Interpreter oder die richtigen Werkzeuge, um dies herauszufinden. Mein Goto-Tool ist die Firebug-Konsole und es zeigt, dass die Stack-Größe nicht erhöht wird, aber ich könnte es falsch zu sehen. Weiß das jemand?

6voto

Angiosperm Punkte 454

Ein asynchroner Rückruf wird, genau wie ein Ereignisrückruf, nacheinander durch die Ereignisschleife ausgeführt. Er wird nicht aus dem gleichen Aufrufstapel der Funktion aufgerufen, die ihn in die Ereignisschleife gestellt hat, da jede Funktion in der Schleife bis zum Ende ausgeführt wird, bevor die nächste aufgerufen wird. Sie erhöhen also nicht die Stapelgröße.

4voto

Cameron Skinner Punkte 48467

Ich glaube, alle Javascript-Engines in modernen Browsern sind Single-Thread, was bedeutet, dass der Rückruf kann nicht tatsächlich auftreten, bis die aktuelle Ausführung Pfad beendet ist. Dies bedeutet, dass der Stapel vollständig abgewickelt hat und der Rückruf wird mit (im Wesentlichen) einen neuen Stapel auftreten.

Die Stackgröße erhöht sich nur, wenn Sie eine Funktion aufrufen oder eine lokale Variable deklarieren. Der Stack verkleinert sich wieder, wenn Sie den Bereich verlassen, der die Vergrößerung verursacht hat.

Wenn Sie sich mehr für den Gesamtspeicherverbrauch interessieren, ist die Sache etwas komplizierter.

Callbacks wird ein bisschen Speicher, bis sie ausgeführt werden, aber die Javascript-Engine sollte sauber nach sich selbst, sobald der Rückruf beendet ist. Wenn Sie neue Daten auf dem Heap (über globale Variablen, zum Beispiel) dann, dass der Speicher nicht freigegeben werden, weil es immer noch in Gebrauch sein, nachdem der Rückruf.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X