Basierend auf meinen aktuellen Annahmen über VMs und ihr Verhalten, ich denke, Schließungen sind zugeordnet und kompiliert jedes Mal, wenn ihre Definition getroffen wird; im Gegensatz zu Funktionen, die außerhalb von Closures deklariert sind, die einmal zugewiesen und kompiliert werden (weil sie irgendwo platziert sind, wird ihre Definition nur einmal getroffen). Ist diese Annahme richtig?Wann werden Schließungen in Node.js V8 zugeordnet und kompiliert?
Also, wenn ich eine Schließung in socket.on('data', function (data) {...})
habe, vergibt V8 neuen Speicher (und möglicherweise re-kompiliert) die Schließung jedes Mal Daten vom Socket empfangen werden?
Wirklich technische Antwort. Danke für die Antwort. Ich habe Ihren Beitrag bearbeitet, um eine Zusammenfassung hinzuzufügen. Bitte sehen Sie, ob Sie damit einverstanden sind. –
Und können Sie klären, was "verschiedene Umgebungen" bedeuten? Meinst du, wenn das gleiche Modul von mehreren anderen Modulen aufgerufen wird? Und Sie sagten, es gab eine Einschränkung: Optimierungskandidaten werden oft zusammengestellt. Was qualifiziert sich als "Optimierungskandidat"? –
@Geotarget: Eine * lexikalische * Umgebung, der Umfang der Funktion, d. H. Die Sache, die der Verschluss schließt. Die Sache, die im Heap zugewiesen werden muss (im Gegensatz zum Stack für nicht geschlossene Umgebungen) und dass sich der Abschluss merken muss. – Bergi