Javascript改进了native for循环

时间:2013-07-05 08:18:28

标签: javascript performance for-loop

我刚安装了Aptana Studio进行开发,其中一个可用的Javascript命令就是这样插入一个for循环:

for (var i=0; i < Things.length; i++) {
  Things[i]
};

另一个选项是Insert improved for loop:

for (var i = Things.length - 1; i >= 0; i--){
  Things[i]
};

为什么最后一个比第一个好?

4 个答案:

答案 0 :(得分:12)

//   (  A  )  (       B       )  (C)
for (var i=0; i < Things.length; i++) {
  Things[i]
};
  • 在循环开始之前执行
  • B 在每次迭代之前重新评估 ,如果不是,则退出循环(因此它会检查Things的长度属性每一次迭代。)
  • C 在每次迭代后执行

也就是说,通过更改循环获得的性能很小,而且您可能会牺牲部分可读性,因此请坚持使用您认为最具可读性的内容 - 而不是最正确的性能。


这对你来说更有意义:

for (var i=0; i < Things.length; i++) {
    Things[i] = null;
};

可以改写如下:

var i = 0; //A
while (true) {
    if (!(i < Things.length)) { //B - We check the length all the time
        break;
    }
    Things[i] = null;
    i++; //C
}

for (var i = Things.length - 1; i >= 0; i--){
    Things[i] = null;
};

可以改写如下:

var i = Things.length - 1; //A - We only check the length once
while (true) {
    if (!(i >= 0)) { //B
        break;
    }
    Things[i] = null;
    i--; //C
}

答案 1 :(得分:5)

因为每次(每次迭代)都没有评估Things.length的结果。它刚刚在开始时分配一次,并从那时开始使用。除此之外,迭代次数显然是相同的。

真的是微观优化。你会发现在我认为的代码中可以优化更多有趣的东西。

答案 2 :(得分:4)

那怎么样?

this._getFormFields(this.byId("newEntitySimpleForm"));

更新

对不起,英语不是我的母语。所以我不知道如何与你们开始对话。无论如何,这里是Youtube网址,我从该视频中了解到。我希望这对你有帮助。它解释了原因!

https://spark.apache.org/docs/1.3.0/sql-programming-guide.html

答案 3 :(得分:1)

我猜第二个你只能访问Things.length一次(初始化i时)你在第一个访问它的地方每次都要检查你是否在那里