javascript - 在 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函数而不是实例化一个新函数??我不确定这是否有必要,但我想尽可能少地消耗资源,因为我正在考虑当服务器有数千个连接时会发生什么。
解决方案
JavaScript 中的函数被视为对象,因此它们是引用类型。我们可以通过这样一个简单的测试来判断:
const a = () => {};
const b = () => {};
const c = a;
console.log(a === b); // false
console.log(a === c); // true
每当在您的情况下创建新连接时,都会将函数的引用作为回调传递,这意味着每个连接都将调用最初存储函数的相同内存地址。所以你的实现是正确的,你不必担心在这种情况下使用大量内存的可能性:-)
推荐阅读
- android - ds.child(key).setValue() 进入子级时出错
- avr - AVR 和 FATFS 多块读取
- python - VB,净值。您如何处理要求多个用户输入的 cmd 进程
- magento2 - Magento 2 UI dataprovider 不加载数据
- python - 字典到面向对象的转换
- reactjs - React Redux -> 为什么我得到 TypeError: state.item is not iterable
- python-3.x - 如何使用 TensorFlow 训练两塔模型?
- algorithm - NIce Subsequence - 最长递增子序列的变体
- redux - 登录后不导航到经过身份验证的页面
- r - 通过列选择将数据帧拆分为多个数据帧