【问题标题】:multi level objects javascript多级对象 javascript
【发布时间】:2013-09-27 23:01:09
【问题描述】:

在性能方面有区别吗

for(x=0;x<data.list.length;x++){
//...
}

对比

var dList=data.list;

for(x=0;x<dList.length;x++){
//...
}

非常感谢

【问题讨论】:

    标签: javascript performance object multi-level


    【解决方案1】:

    微不足道,大部分时间不用担心。最佳做法是这样做:

    for(var x = 0, len = data.list.length; x < len; x++){
       //...
    }
    

    如果你倒数到 0 会更好,但这是另一个问题。

    【讨论】:

    • 谢谢杰夫曼。这个问题出现在我们的代码审查中。我只想知道是否真的有很大的性能改进。有人告诉我使用第二个(将它放在变量上的位置),但正如你所说,这是微不足道的。
    【解决方案2】:

    您将在此处实际看到的唯一性能增强是存储长度值,因此无需在每次迭代时都进入您的 data.list 进行比较。

    int size = data.list.length;
    
    for(x=0x<size;x++){
        //...
    } 
    

    正如其他人所提到的,这对于 99.99999% 的情况来说是极其微不足道的,当命名空间是一个问题时甚至会皱眉头。一般的经验法则是越容易阅读越好。

    【讨论】:

      【解决方案3】:

      让我们试一试。

      第一种情况:

      var start = new Date();
      var data = {};
      data.list = Array(100000);
      for(x=0;x<data.list.length;x++){
          data.list[x] = Math.sqrt(Math.pow(x, 7));
      }
      var finish = new Date();
      console.log(finish - start + "ms"); //245ms
      

      第二种情况:

      var start = new Date();
      var data = {};
      data.list = Array(100000);
      var dList = data.list
      for(x=0;x<dList.length;x++){
          dList[x] = Math.sqrt(Math.pow(x, 7));
      }
      var finish = new Date();
      console.log(finish - start + "ms"); //251ms
      

      但还有另一种提高性能的方法:

      var start = new Date();
      var data = {};
      data.list = Array(100000);
      for(x = data.list.length; x--; ){
          data.list[x] = Math.sqrt(Math.pow(x, 7));
      }
      var finish = new Date();
      console.log(finish - start + "ms"); //199ms
      

      x-- 返回递减数字,当它达到零时,其布尔值变为假,因此循环停止。 这工作得更快,因为与零的比较比与任何其他数字的比较执行得更快。

      【讨论】:

      • 感谢 Oshibka404。你用什么浏览器做这个测试?
      • Yandex.Browser(基于 Chromium 的浏览器)、OS X 10.8.5、Macbook Pro i7。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-30
      • 2015-02-23
      • 1970-01-01
      • 2017-06-05
      • 1970-01-01
      • 2022-11-17
      • 2016-07-08
      相关资源
      最近更新 更多