【问题标题】:JSPerf, For Loop vs While Loop [closed]JSPerf,For 循环与 While 循环 [关闭]
【发布时间】:2016-03-25 19:09:47
【问题描述】:

大家好,谁能告诉我为什么我在这个 JSPerf 中的代码似乎表明 for 循环实际上比 while 循环快?

我什至将值降低到零,for 似乎仍然表现出色?

http://jsperf.com/html-canvas-performance

为了记录,我正在制作一个 HTML / Canvas 游戏,我需要遍历实体以进行渲染。

编辑:代码 - 编辑 如果不清楚问题是什么; “for 似乎仍然表现出色?”

  Benchmark.prototype.setup = function() {
    var e = [];
    var i = 100;
    while(i--) e.push(Math.random() * -1 << 1);
  };

  Benchmark.prototype.teardown = function() {
    e.length = 0;
  };

//WHILE
var i = e.length;
while(i--) e[i] *= 123;

//FOR
for(var i = 0; i < e.length; i++) e[i] *= 123;

【问题讨论】:

  • 请把代码贴在这里
  • 我怀疑 JS 编译器有一个优化,可以检测常见的for 循环习语。
  • 我想它也可能是我的浏览器。有什么方法可以跨多个测试?
  • 很抱歉,您是无法阅读@meagar 还是您只是度过了糟糕的一天? “为什么 THIS 代码的性能不如 THAT 代码是一个非常明确的问题陈述,并且运行 itself 的 JSPerf 的链接是就繁殖而言,您可以尽可能清楚地了解。我是在这里服用疯狂的药丸,还是您在种地?-由于问题的性质,问题本身中的代码将没有用朝着答案的方向前进,因为它是特定于机器的……尽量不要太拘泥于规则,关键是有用。
  • @AndrueAnderson 您实际上并没有在代码中包含一个简短的、独立的、完整的示例。您已经包含了 一些 代码,但我们无法在不依赖外部页面的情况下实际执行它。请重新阅读结束原因:...必须在问题本身中包含所需的行为、特定问题或错误以及重现它所需的最短代码。* 取决于关闭的问题意义的站点链接在这里是题外话。

标签: javascript performance loops for-loop while-loop


【解决方案1】:

看起来向后访问数组很慢,但不是因为while。

http://jsperf.com/html-canvas-performance/3

以下代码对我来说具有相同的性能。

var i = 0, z = e.length;
while(i < z) e[i++] *= 123;

【讨论】:

  • 请在您的回答中包含一些相关数据。就目前而言,您的答案实际上并不是一个答案,它只是一个指向场外资源的链接。
  • @YOU 如果不打开您的 jsperf.com 链接,我不知道您的答案是什么。它是否表明您的代码更快、更慢或相同?
  • @meagar,我也说过 same perf。我无法从 jsperf 发布结果,因为它是我的机器特定的。还是如您所愿?
  • 这些家伙是野蛮人,我真的很感谢你花时间。谢谢@YOU,任何支持meagar的人,请下马。
  • 我在他的测试中也获得了与for 循环相同的性能。我同意性能损失来自向后访问数组。
猜你喜欢
  • 2017-02-19
  • 1970-01-01
  • 2014-03-22
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 2020-09-17
  • 1970-01-01
  • 2014-03-23
相关资源
最近更新 更多