title: for loop vs forEach performance in javascript and credibility of jsperf results
body: <p>I don't trust results from jsperf measuring performance of for loop vs forEach. At least for chrome and firefox on my machine results are completely different than the ones being advertised in jsperf.<br>
  <a href="http://jsperf.com/foreach-vs-loop" rel="nofollow noreferrer">http://jsperf.com/foreach-vs-loop</a> (mine)<br>
  <a href="http://jsben.ch/#/BQhED" rel="nofollow noreferrer">http://jsben.ch/#/BQhED</a> (more popular)<br>
  On my laptop running Ubuntu 11.10 I have the following results in Firefox:  </p>
  
  <pre><code>for: total=1641 ms, avg=164.1 ms  
  forEach: total=339 ms, avg=33.9 ms  
  
  uname -a:  
  Linux 3.0.0-16-generic #29-Ubuntu SMP Tue Feb 14 12:48:51 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
  </code></pre>
  
  <p>Unfortunately, Chrome doesn't return the result of console.timeEnd() but the running times are same and just faster in Chrome. I'm observing that forEach almost 10x faster than for loop in Chrome, and 3x faster in Firefox.<br>
  In Chrome I'm getting approximately these running times:</p>
  
  <pre><code>for: avg=80 ms
  forEach: avg=6 ms
  </code></pre>
  
  <p>Here's the code I ran in Firefox and Chrome console. </p>
  
  <pre><code>var arr = [];
  for(var i = 0; i &lt; 100000; i++) arr[i]=i;
  
  var numberOfRuns = 10;
  
  function time(name, f){
      console.time(name);
      f();
      return console.timeEnd(name);
  }
  
  function runTest(name, f){
      var totalTime = 0;
      for(var r = 0; r &lt; numberOfRuns; r++)
          totalTime += time(name,f);
      return totalTime;
  }
  
  var forTime = runTest('for', function(){
      for(var j = 0; j &lt; arr.length; j++)
          arr[j];    
  });
  var forEachTime = runTest('forEach', function(){
      arr.forEach(function(v){v;});
  });
  
  console.log('for', {total:forTime, avg:forTime / numberOfRuns});
  console.log('forEach', {total:forEachTime, avg:forEachTime / numberOfRuns});
  </code></pre>
  
  <p>Running the tests for one million items has the same performance difference. Could you please advise if I'm missing something and I should trust jsperf results instead of the real ones I'm observing? Of course I do trust the real results that I can see right here right now in my browser.</p>
  
  <p>EDIT: The test scenario isn't objective as discovered during discussion with @Blender. Looks like js optimizer optimezes forEach loop with no action in it and thus obscures running time if there were some real code.</p>