2012-07-29 7 views
6

ejemplos de Socket.IO todos siguen este patrónforma más eficiente para definir Socket.io on ("mensaje")

io.sockets.on("connection", function(mySocket){ 
    mySocket.on("my message", function(myData){ 
     ... 
    }); 
}); 

Me parece que esto crearía una nueva llamada de retorno para cada conexión. Suponiendo que cada toma responde al mensaje de la misma manera, ¿no sería más eficiente de la memoria para definir el manejador de una vez para todos los sockets como este:

function myMessageHandler(data){ 
    ... 
} 

io.sockets.on("connection", function(mySocket){ 
    mySocket.on("my message", myMessageHandler); 
}); 

o incluso esto:

io.sockets.on("my message", function(mySocket, myData){ 
    ... 
}); 

Si es así, ¿por qué Socket.io recomienda una práctica que desperdicia memoria? ¿Se espera que deseemos mantener variables con estado para el socket dentro del cierre de la devolución de llamada de "conexión"?

+2

Estás involucrado en esa forma innecesaria de preocupación conocida como "optimización prematura". Si la diferencia en la sobrecarga hace o rompe su aplicación, node.js es la elección incorrecta de la plataforma. – ebohlman

+0

La lógica de mi aplicación se lleva a cabo a través de docenas de mensajes de socket, y sirve miles de conexiones simultáneas. Si cada conexión duplica miles de líneas de devolución de llamada, eso parecería ser una gran supervisión de optimización para mí – arkanciscan

Respuesta

0

Mirándolo desde otra perspectiva, la primera forma es fácil de leer (porque quedan muchos detalles). Creo que esta forma ilustra mejor cómo funciona la biblioteca. El mismo estilo se usa en el sitio web de Node por la misma razón, creo. Y creo que es precisamente por eso que se usa en esos lugares.

Después de unos minutos, leer blogs y debates sugiere que los desarrolladores suelen optar por pasar funciones nombradas. Aunque estoy seguro de que hay un aumento en el rendimiento, la motivación principal es, sin duda, la legibilidad. Creo que encontrará el segundo formulario (o un formulario más extenso) para que sea más fácil trabajar con él a medida que crecen sus funciones.

Cuestiones relacionadas