Socket.io的示例均遵循这种模式
io.sockets.on("connection", function(mySocket){
mySocket.on("my message", function(myData){
...
});
});
在我看来,这将为每个连接创建一个新的回调函数。假设每个套接字都以相同的方式响应消息,那么为所有套接字定义一次处理程序,这样的内存使用效率就不会更高:
function myMessageHandler(data){
...
}
io.sockets.on("connection", function(mySocket){
mySocket.on("my message", myMessageHandler);
});
甚至这个:
io.sockets.on("my message", function(mySocket, myData){
...
});
如果是这样,为什么Socket.io会建议浪费内存的做法?我们是否希望在“连接”回调的闭包内为套接字保留状态变量?
最佳答案
从另一个 Angular 看,第一种形式很容易阅读(因为遗漏了很多细节)。我认为此表格最能说明图书馆的工作方式。我相信,出于相同的原因,Node网站本身也使用了类似的样式。我认为这就是为什么在这些地方使用它的原因。
几分钟后,阅读博客和讨论表明开发人员通常选择传递命名函数。尽管我确信其中有性能上的提升,但是主要的动机无疑是可读性。我认为您会发现,随着函数的增长,第二种形式(或更引人注意的形式)更易于使用。