我正在使用NodeJS在WebSocket服务器上工作,我真的需要能够查找一个"类"通过套接字和用户的id。
所以我试图弄清楚什么会更有效,以及为什么。
var usersBySocket = {};
var usersById = {}
// ID is pulled from database in NetworkClient constructor.
server.on('connection', function(client) {
var networkClient = new NetworkClient(client);
usersBySocket[client] = networkClient;
usersById[networkClient.getId()] = networkClient;
});
// When needing to send a specific user some data
// based on his user id (IE: Messaging).
// usersById(...).send(...);
OR
var users = {}
server.on('connection', function(client) {
users[client] = new NetworkClient(socket);
});
function getUserById(id) {
for(var uid in users) {
if(uid == id) return users[uid];
}
return undefined;
}
// Then when I needto use it, call it like so:
// getUserById(..).getSocket().send(..);
我倾向于第一个选项,但我不确定JavaScript如何处理存储值,如果每个"关联数组"按价值而非参考存储,这是完全浪费。我特别不想要痴迷记忆副本。
答案 0 :(得分:0)
通过引用存储对象。但第一个选项总是会为usersById
对象使用更多内存。
第二个选项使用较少的内存,但是您尝试进行线性搜索以找到具有正确ID的用户,这效率不高。