首页 > 解决方案 > 在 socket.io 上添加事件侦听器以节省资源的最佳方法

问题描述

所以我想知道javascript如何处理函数。

如果我有这样的代码:

io.on("connection", function(socket) {
  socket.on("hi", function(data) {
    socket.emit("emit", "hey")
  })
})

我的想法是,每个新连接,javascript 都会为“hi”事件创建另一个函数。所以我目前在我的应用程序中做的是这样的:

function hi(data) {
    this.emit("emit", "hey")
}

io.on("connection", function(socket) {
  socket.on("hi", hi)
})

这样javascript只会重用hi函数而不是实例化一个新函数??我不确定这是否有必要,但我想尽可能少地消耗资源,因为我正在考虑当服务器有数千个连接时会发生什么。

标签: javascriptnode.jsmemory-managementsocket.ioevent-handling

解决方案


JavaScript 中的函数被视为对象,因此它们是引用类型。我们可以通过这样一个简单的测试来判断:

const a = () => {};
const b = () => {};
const c = a;

console.log(a === b); // false
console.log(a === c); // true

每当在您的情况下创建新连接时,都会将函数的引用作为回调传递,这意味着每个连接都将调用最初存储函数的相同内存地址。所以你的实现是正确的,你不必担心在这种情况下使用大量内存的可能性:-)


推荐阅读