【问题标题】:For Loop optimization in JavascriptJavascript 中的 For 循环优化
【发布时间】:2012-12-23 09:00:23
【问题描述】:

所以我一直在学习使用 C+ 来教授编程概念的计算机科学课程。今天我学到了一个我不确定是否适用于 JS 的新概念,其中每次计算 string.length 都会消耗系统资源。这似乎是一件小事,但它让我想到了巨大的阵列以及如何将它们加起来。看看这个例子,让我知道循环 #2 是否确实比第一个更有效,谢谢:

var weekDay = ["Monday", "Tuesday", "Wednesday"];

//for loop #1
for(i=0; i<weekDay.length; i++){
 //code code code
;}

//for loop #2
for(i=0; var n=weekDay.length; i<n; i++){
 //code code code
;}

【问题讨论】:

    标签: javascript performance memory optimization for-loop


    【解决方案1】:

    我总是会明确地预先缓存长度,即

    var n = weekDay.length;
    var i;
    for(i=0;i<n; i++){ 
    do_something;
    }
    

    一种更清晰的方法,因为所有变量定义都被“提升”到函数的顶部。

    【讨论】:

      【解决方案2】:

      首先,premature optimization is the root of all evil

      其次;你完全正确,循环 #2 更有效。

      循环#1 会为循环的每次 迭代计算weekDay 的长度。这意味着它将在 10,000 长度的数组中计算长度 10,000 次。

      循环 #2 将计算 weekDay 的长度并将变量 n 设置为结果,因此我们将长度保存在变量中,而不是每次迭代都重新计算它。

      Read more about why premature optimization is bad.

      【讨论】:

      • 技术上 array.length 不计算长度。长度是按添加/删除计算的,因此 .length 仅获取存储的值。
      【解决方案3】:

      这个问题已经被问过好几次了... Is optimizing JavaScript for loops really necessary?

      我发现以下链接非常有用。基本上它取决于浏览器版本和供应商。

      在某些情况下,例如IE 是的 #2 更快

      http://jsperf.com/loop-iteration-length-comparison-variations

      【讨论】:

        【解决方案4】:

        第二种方法更快,但不是很多。另外,还有一点语法错误

        for( var i = 0, n = weekDay.length; i < n; i++ ){ ... }
        

        这在 javascript 代码中相当常见。请注意使用var 声明所有变量的重要性,以免它们踩到错误的范围。

        您可以在此处查看此 js 性能测试:http://jsperf.com/forloopiterator,这表明使用第二种方法时结果快了 24%。

        【讨论】:

          猜你喜欢
          • 2011-08-30
          • 1970-01-01
          • 1970-01-01
          • 2015-04-15
          • 2017-09-20
          • 2017-02-21
          • 2020-12-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多