V8 Internals - manuseio de funções anônimas
Para a história completa, confiraminha outra pergunta.
Basicamente, eu perguntei se era mais eficiente usar funções nomeadas nos manipuladores de soquete para o seguinte código:
<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>
A resposta geral foi sim (veja o link acima para mais detalhes), mas o seguinte comentário foi postado porThiefMaster:
Eu não estou familiarizado com internals V8, mas pode ser inteligente o suficiente para compilar a função uma vez e reutilizá-lo toda vez, apenas com um escopo diferente anexado.
Então agora essa é a minha pergunta. O V8 é inteligente o suficiente para compilar funções anônimas uma vez e reutilizá-las com escopos diferentes em situações nas quais funções anônimas normalmente levam à criação de várias instâncias de função? Por exemplo, acima eu esperaria que o manipulador para oconnection
evento a ser criado uma vez, mas os manipuladores paraaction1
, action2
edisconnect
a ser criado para cada conexão. Na outra questão, isso foi resolvido com funções nomeadas, mas estou mais interessado se isso for necessário no V8 ou se ele fizer algumas otimizações.