V8-Interna - Umgang mit anonymen Funktionen
Die ganze Geschichte finden Sie hiermeine andere frage.
Grundsätzlich hatte ich gefragt, ob es effizienter ist, benannte Funktionen in den Socket-Handlern für den folgenden Code zu verwenden:
<code>var app = require('express').createServer() var io = require('socket.io').listen(app); app.listen(8080); // Some unrelated stuff io.sockets.on('connection', function (socket) { socket.on('action1', function (data) { // logic for action1 }); socket.on('action2', function (data) { // logic for action2 }); socket.on('disconnect', function(){ // logic for disconnect }); }); </code>
Die allgemeine Antwort war ja (siehe den obigen Link für weitere Details), aber der folgende Kommentar wurde von gepostetDiebesmeister:
Ich bin nicht mit V8-Interna vertraut, aber es ist vielleicht klug genug, die Funktion einmal zu kompilieren und sie jedes Mal wiederzuverwenden, nur mit einem anderen beigefügten Bereich.
Das ist also meine Frage. Ist V8 intelligent genug, um anonyme Funktionen einmal zu kompilieren und in Situationen, in denen anonyme Funktionen normalerweise dazu führen, dass mehrere Funktionsinstanzen erstellt werden, mit unterschiedlichen Gültigkeitsbereichen wiederzuverwenden? Zum Beispiel würde ich oben den Handler für das erwartenconnection
Event muss einmal erstellt werden, aber die Handler füraction1
, action2
, unddisconnect
für jede Verbindung erstellt werden. In der anderen Frage wurde dies mit benannten Funktionen gelöst, aber ich bin mehr daran interessiert, ob dies in V8 notwendig ist oder ob es einige Optimierungen geben wird.