【发布时间】:2019-05-08 09:48:31
【问题描述】:
我的代码从服务器获取所有在线人 但我只需要我的联系人列表中的那些在线人员。
我有两种方法:
- 有两个
nested loop将所有在线人员与我的联系人列表中的在线人员进行比较,然后只需将我的联系人列表中的在线人员添加到我的应用程序 中的Object。代码如下:
people = {};
myContacts = [...];
this.socket.on('online', users => {
for (let i = users.length - 1; i >= 0; i--) {
for (let j = myContacts.length - 1; j >= 0; j--) {
if (myContacts[j].userid === users[i]) {
this.people[myContacts[j].userid] = 'online';
}
}
}
this.setState({refresh: !this.state.refresh});
});
- 只有一个循环并将所有在线人员添加到我的应用程序中的一个对象。代码如下:
people = {};
myContacts = [...];
this.socket.on('online', users => {
for (let i = users.length - 1; i >= 0; i--) {
this.people[users[i]] = 'online';
}
this.setState({refresh: !this.state.refresh});
});
现在我的问题是:在使用 App 的过程中,您更喜欢上述数字中的哪一个,因为它具有良好的性能和快速的工作。
**注意:为什么我担心这个,虽然他们两个都很好,你认为有10000人同时在线。
你可以告诉我第二个更好,因为有一个循环, 但是我很困惑,如果那时我们有 10000 人在线,我们将在对象中有 10000 人,并且通过用户名从对象访问我们需要的在线人可能需要很长时间。 但是在第一个代码中让人们花费很多时间,因为我们有两个循环并比较它们,但是在应用程序中访问会很容易,因为我们只有那些在线人在我的联系人列表中。**
【问题讨论】:
-
我觉得第二个更好,你的运行时间更快
-
@NoobDEV-GBL 请阅读我编辑的注释部分
-
你是对的,对不起,在这种情况下,第一个的运行时间会比第二个更快,因为你只添加了不在联系人列表中的在线,在另一种情况下您将始终添加所有在线...以便第二批或时间运行
-
一点建议,不要尝试预先优化的 Javascript。它通常在您意想不到的领域表现更好。例如,由于哈希表查找性能,
map似乎总是比Array.find快,这似乎是合乎逻辑的。但情况并非总是如此。让您的代码正常工作,然后在需要时进行优化通常是一个更好的主意。
标签: javascript reactjs react-native socket.io