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.