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:
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
});
});
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.