2012-07-29 7 views
6

Socket.io die Beispiele alle folgen diesem Mustereffizienteste Weg Socket.io auf („message“) Handler

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

Es scheint mir, zu definieren, dass dies eine neue Callback-Funktion für jede Verbindung schaffen würde. Unter der Annahme, dass jede Buchse auf die Nachricht in der gleichen Art und Weise reagiert, wäre es nicht mehr Speicher effizienter sein, den Handler einmal für alle Buchsen wie folgt zu definieren:

function myMessageHandler(data){ 
    ... 
} 

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

oder auch diese:

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

Wenn ja, warum empfiehlt Socket.io eine Praxis, die Speicher verschwendet? Wird erwartet, dass wir Stateful-Variablen für den Socket innerhalb des Callbacks von "connection" behalten wollen?

+2

Sie beschäftigen sich mit dieser unnötigen Form der Sorge, die als "vorzeitige Optimierung" bekannt ist. Wenn der Unterschied in Overhead Ihre Anwendung macht oder bricht, ist node.js die falsche Plattform. – ebohlman

+0

Meine Anwendungslogik wird über Dutzende von Socket-Nachrichten ausgeführt und bedient Tausende von gleichzeitigen Verbindungen. Wenn jede Verbindung tausende Zeilen von Callbacks dupliziert, scheint das für mich eine große Optimierungsaufsicht zu sein – arkanciscan

Antwort

0

Wenn man es aus einer anderen Perspektive betrachtet, ist die erste Form leicht zu lesen (weil so viele Details weggelassen werden). Ich denke, diese Form zeigt am besten, wie die Bibliothek funktioniert. Ein ähnlicher Stil wird auf der Node-Website selbst aus dem gleichen Grund verwendet, glaube ich. Und ich denke, genau deshalb wird es dort eingesetzt.

Nach ein paar Minuten lesen Blogs und Diskussionen schlägt vor, dass Entwickler in der Regel für die Weitergabe von benannten Funktionen entscheiden. Obwohl ich sicher bin, dass es einen Leistungsgewinn gibt, ist die primäre Motivation zweifellos die Lesbarkeit. Ich denke, Sie werden die zweite Form (oder eine mehr ausgezogene Form) finden, mit der Sie leichter arbeiten können, wenn Ihre Funktionen wachsen.