是否为Socket.IO中的每个套接字定义了一个新函数?

时间:2014-04-05 13:43:47

标签: javascript node.js socket.io

以下是Socket.IO网站上的服务器代码代码片段:

io.sockets.on('connection', function(socket) {
    socket.emit('news', {hello:'world'});
    socket.on('my other event', function(data) {
        console.log(data);
    });
});

通过阅读此代码,我可以看出,在连接时,每个套接字独立地定义其事件。虽然,由于使用相同的函数来定义这些事件,它们都是相同的。也就是说,每个套接字都有"my other event",它执行相同的操作,但每个套接字都是函数的新实例(浪费)。

我的问题是:V8能否/优化这种明显浪费的做法?比方说,使用相同的功能,但在不同的范围内。由于每个函数的范围不同,我认为任何引用socket的函数都必须单独定义,有效地为每个连接克隆此事件。

我是否缺少优化,或者这只是非常糟糕的做法?这也适用于这种做法的任何其他实例,而不仅仅是SIO;这只是最突出的案例。

另外,如果传达的信息很少,我会道歉,如果有必要,我可以尝试澄清。

1 个答案:

答案 0 :(得分:0)

此功能可以改写为:

 io.sockets.on('connection', callback());

 function callback(socket) {
     socket.emit('news', {hello:'world'});
     socket.on('my other event', function(data) {
     console.log(data);
  }

我对V8的理解是它监视代码中的行为并随着时间的推移进行优化,但这并不能阻止你帮助它。通过编写这样的函数,您可以进行一些优化来帮助V8。大多数V8优化问题都与隐藏类型的对象有关,在这种情况下是的,我认为V8没有看到该函数,因为它是内联的,技术上可以是任何东西,直到代码运行。如果您担心它,请不要用callback hell样式编写代码。