【问题标题】:Which for loop is more efficient in javascript? [closed]哪个 for 循环在 javascript 中更有效? [关闭]
【发布时间】:2013-02-22 17:10:56
【问题描述】:

哪个效率更高?

// < 11
for(var i = 0; i < 11; i++){ ... }

// <= 10
for(var i = 0; i <= 10; i++){ ... }

我不确切知道 for 函数是如何工作的,但我假设 &lt; 11 更高效,因为在 &lt;= 10 中,似乎在每个 10 比较中它也必须检查它是否相等,不仅仅是更小,所以它必须进行 2 次比较而不是 1 次。

我说得对吗,或者这是如何工作的?

【问题讨论】:

  • jsPerf.com,看起来像FF18上的第一个was negligibly faster,但这真的重要吗?
  • 我看到你找到了你的应用程序的瓶颈......恭喜。顺便说一句,i++?!使用i= i+1 可能会快很多!也检查一下。
  • 编译器非常聪明,它总是在 i
  • 嘿,谢谢@Chad 真棒!我认为有很多 for 循环很重要:P。您可以将其发布为答案吗? :)

标签: javascript for-loop comparison performance


【解决方案1】:

只要您有性能问题,请随时通过jsPerf.com 提出。

this test case:

  • 在 FF18 中,first 循环的速度快得可以忽略不计
  • 在 FF19 中,second 循环的速度快得可以忽略不计。
  • 在 Chrome 25 中,它们完全相同

真的,这充其量只是一个微预优化,您可能应该关注其他地方。

【讨论】:

  • 在我的 FF19 和 Linux 上的 Chromium 24.0.1312.70 中,第二个循环的速度快得可以忽略不计。 ;)
  • 只是表明它的重要性:)
【解决方案2】:

如果有任何区别,那将是非常小的。您应该使用更易于维护的代码。通常首选 &lt; 运算符,因为在计数器为 &lt; x 时从 0 开始循环会产生 x 迭代。

但是,任何区别都不是因为&lt;= 进行了两次比较,而是因为它没有。

当比较两个数值时,计算机实际上将它们相减,然后检查会发生什么。如果结果是正数、负数或零,则不同的运算符会给出正确的结果:

operator:   true when result is:
----------  ---------------------
<           negative
<=          not positive
==          zero
>           positive
>=          not negative

【讨论】:

    猜你喜欢
    • 2017-03-11
    • 2016-08-26
    • 1970-01-01
    • 2021-04-13
    • 1970-01-01
    • 2013-03-18
    • 2017-02-19
    • 2011-01-07
    相关资源
    最近更新 更多