if for for循环 - 性能差异

时间:2016-05-12 07:40:18

标签: javascript performance for-loop conditional

条件1

for( var i = 0; i < 1000; i++ ) {
    if( i != 0 ) {
        console.log("i is not zero.!");
    } else {
        console.log("i is zero.!");
    }
}

条件2

for( var i = 0; i < 1000; i++ ) {
    if( i == 0 ) {
        console.log("i is zero.!");     
    } else {
        console.log("i is not zero.!");
    }
}
  1. 哪种方法更可取(我的意思是更合适)。?

  2. 这两者之间是否有任何性能差异。?

5 个答案:

答案 0 :(得分:1)

试试吧!

还有另一种方法可以做到这一点:

body,button,input{font-family:sans;font-size:8pt;padding:0pt}div{font-size:12pt;}

有一点 bench

&#13;
&#13;
Loop: <input id=loopcnt value="3000000" size="8" />
<button id="==" onclick="run(event)">if == {} else {}</button>
<button id="!=" onclick="run(event)">if != {} else {}</button>
<button id="(=" onclick="run(event)">( == ? "" : "" )</button>
<button id="(!" onclick="run(event)">( != ? "" : "" )</button>
<div id="elapsed"></div>
&#13;
!=
&#13;
==
&#13;
&#13;
&#13;

使用 firefox chrome ,没有明显的区别,但 Spidermonkey 似乎通过使用{{1}更快地做事情而不是使用time smjs <<<' for( var i = 0; i < 10000000; i++ ) { if ( i == 0 ) { var log="i is zero.!"; } else { var log="i is not zero.!"; } } ' real 0m0.054s user 0m0.044s sys 0m0.004s time smjs <<<' for( var i = 0; i < 10000000; i++ ) { if ( i != 0 ) { var log="i is not zero.!"; } else { var log="i is zero.!"; } } ' real 0m0.043s user 0m0.040s sys 0m0.000s time smjs <<<' for( var i = 0; i < 10000000; i++ ) { var log=(i==0?"i is zero.!":"i is not zero.!"); } ' real 0m0.051s user 0m0.048s sys 0m0.000s time smjs <<<' for( var i = 0; i < 10000000; i++ ) { var log=(i!=0?"i is not zero.!":"i is zero.!"); } ' real 0m0.049s user 0m0.040s sys 0m0.008s

{{1}}

但是这并没有经过充分测试(在真正免费的主机上,通过大量的测试和完整的统计数据)。

答案 1 :(得分:0)

这两种方法都会产生相同的结果。这两种方法之间没有任何性能和效率差异。你可以使用其中任何一个。

答案 2 :(得分:0)

条件1 条件2 中,输出将为

i is zero.!

然后是999次

i is not zero.!
  1. 使用它的两个条件中的哪一个将保持不变。
  2. 不,不会有任何性能差异。执行的迭代仍然是相同的

答案 3 :(得分:0)

您可能听说过处理器如何预测是否跳转,以便同时计算多个相关操作。这在某些情况下是相关的,但在您的情况下,无论您执行哪些操作,处理器都会正确预测。

无论如何,这样的事情充其量只能达到纳秒。当你关于核心机制而不是常规应用程序时,你会考虑这些因素。 我甚至不确定这样的东西是否适用于JavaScript,可能不是,因为它被解释了。

最有可能的是,对于你的程序来说,跟上可读性这样的事情会更加重要。

答案 4 :(得分:0)

例如,如果您使用稀疏矩阵并且您不知道值但知道大多数项目的值为零,则最好使用条件2.

如果您无法估算零计数,最好使用:

        for( var i = 0; i < 1000; i++ ) {
                bool a = i;
                switch(a){
                case true:
                     console.log("i is not zero");
                     break;
                case false:
                     console.log("i is zero");
                      break;
                     }

        }
相关问题