gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 23:27:28 24 4
gpt4 key购买 nike

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

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

通过阅读这段代码,我可以看出,在连接时,每个套接字都独立定义其事件。虽然,由于使用相同的函数来定义这些事件,所以它们都是相同的。也就是说,每个套接字都有“我的其他事件”,它们做同样的事情,但每个都是该函数的一个新实例(浪费)。

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

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

此外,如果传达不当,我深表歉意,如有必要,我可以尝试澄清。

最佳答案

这个函数可以重写为:

 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 风格编写代码。

关于javascript - Socket.IO 中是否为每个套接字都定义了一个新函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22881698/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com