双关联数组或1(n)循环更有效?

时间:2015-10-20 21:35:13

标签: javascript

我正在使用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如何处理存储值,如果每个"关联数组"按价值而非参考存储,这是完全浪费。我特别不想要痴迷记忆副本。

1 个答案:

答案 0 :(得分:0)

通过引用存储对象。但第一个选项总是会为usersById对象使用更多内存。

第二个选项使用较少的内存,但是您尝试进行线性搜索以找到具有正确ID的用户,这效率不高。