【问题标题】:What is the super fast and prefered way for two code bellow?下面代码的超快速和首选方式是什么?
【发布时间】:2019-05-08 09:48:31
【问题描述】:

我的代码从服务器获取所有在线人 但我只需要我的联系人列表中的那些在线人员。

我有两种方法:

  1. 有两个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});
});
  1. 只有一个循环并将所有在线人员添加到我的应用程序中的一个对象。代码如下:
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


【解决方案1】:

恕我直言,浏览器原生的includes()(适用于更大的数组)方法应该是最快的一种:

for (let j = myContacts.length - 1; j >= 0; j--) {
  this.people[myContacts[j].userid] = users.includes( myContacts[j].userid ) ? 'online' : 'offline';
}

你也可以只存储一个布尔值

for (let j = myContacts.length - 1; j >= 0; j--) {
  this.people[myContacts[j].userid] = users.includes( myContacts[j].userid );
}

并有条件地呈现您需要的内容(翻译的消息、图标等)

【讨论】:

    【解决方案2】:

    如果您真的只想显示联系人列表中的在线人员,我认为您可以将 myContacts 数组转换为键/值对象 {...}。键是用户 ID,值是布尔值(true:在线,false:离线)。这将有助于提高性能一点

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-02
      • 1970-01-01
      • 2021-12-27
      • 1970-01-01
      • 2010-10-25
      • 2021-02-24
      • 2020-05-14
      • 2016-12-21
      相关资源
      最近更新 更多