Javascript改进了native for循环

10 javascript performance for-loop

我刚刚安装了Aptana Studio进行开发,其中一个可用的Javascript命令是Insert a for循环,如下所示:

for (var i=0; i < Things.length; i++) {
  Things[i]
};
Run Code Online (Sandbox Code Playgroud)

另一个选项是Insert Improved for loop,如下所示:

for (var i = Things.length - 1; i >= 0; i--){
  Things[i]
};
Run Code Online (Sandbox Code Playgroud)

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

h2o*_*ooo 12

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

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


这可能对你更有意义:

for (var i=0; i < Things.length; i++) {
    Things[i] = null;
};
Run Code Online (Sandbox Code Playgroud)

可以改写如下:

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

for (var i = Things.length - 1; i >= 0; i--){
    Things[i] = null;
};
Run Code Online (Sandbox Code Playgroud)

可以改写如下:

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


Yan*_*nis 5

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

它真的是微观优化.您会发现在我的代码中可以找到更多有趣的东西来优化.