V8 Internals - Obsługa funkcji anonimowych

Aby uzyskać pełną historię, sprawdźmoje drugie pytanie.

Zasadniczo zapytałem, czy bardziej efektywne jest używanie nazwanych funkcji w procedurach obsługi gniazd dla następującego kodu:

<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>

Ogólna odpowiedź brzmiała „tak” (więcej informacji w powyższym linku), ale następujący komentarz został opublikowany przezThiefMaster:

Nie jestem zaznajomiony z wewnętrznymi elementami V8, ale może być na tyle sprytny, aby raz skompilować tę funkcję i użyć jej ponownie za każdym razem, tylko z dołączonym innym zakresem.

Więc to moje pytanie. Czy V8 jest wystarczająco inteligentny, aby raz skompilować anonimowe funkcje i użyć ich ponownie w różnych zakresach w sytuacjach, gdy anonimowe funkcje zwykle prowadzą do utworzenia kilku instancji funkcji? Na przykład powyżej oczekiwałbym, że przewodnik dlaconnection wydarzenie, które zostanie utworzone raz, ale programy obsługi dlaaction1, action2, idisconnect do utworzenia dla każdego połączenia. W drugim pytaniu zostało to rozwiązane za pomocą nazwanych funkcji, ale jestem bardziej zainteresowany, jeśli jest to konieczne w wersji 8 lub jeśli dokona pewnych optymalizacji.

questionAnswers(1)

yourAnswerToTheQuestion