for vs forEach vs function

JavaScript performance comparison

Revision 127 of this test case created

Info

Is it faster to use the native forEach or just loop with for?

Inspired by Adrian Sutton's tests at: http://www.symphonious.net/2010/10/09/javascript-performance-for-vs-foreach/

Preparation code

 
<script>
Benchmark.prototype.setup = function() {
    var i,
      value,
      length,
      values = [],
      sum = 0,
      context = values;
   
   
    for (i = 0; i < 10000; i++) {
      values[i] = i + 1;
    }
   
    function add(val) {
      sum += val;
    }
};

Benchmark.prototype.teardown = function() {
    i = 0;
    value = 0;
    length = 0;
    values = [];
    sum = 0;
};
</script>

Test runner

Warning! For accurate results, please disable Firebug before running the tests. (Why?)

Java applet disabled.

Testing in unknown unknown
Test Ops/sec
forEach
values.forEach(add);
pending…
for loop, optimized
for (i = 0
  var x; x = values[i; i++) {
    sum += x;
  }
pending…
for loop, cached length
length = values.length;
for (i = 0; i < length; i++) {
  sum += values[i];
}
pending…
for loop, reverse
for (i = values.length - 1; i >= 0; i--) {
  sum += values[i];
}
pending…
for loop, cached length, callback
length = values.length;
for (i = 0; i < length; i++) {
  add(values[i], i, values);
}
pending…
for loop, cached length, callback.call
length = values.length;
for (i = 0; i < length; i++) {
  add.call(context, values[i], i, values);
}
pending…
$.each
$.each(values, function(key, value) {
  sum += value;
});
pending…
for ... in
for (i in values) {
  sum += values[i];
}
pending…
for loop, reverse, decrement condition
for (i = values.length; i--;) {
  sum += values[i];
}
pending…
for loop, reverse, pre-decrement
for (i = values.length - 1; i >= 0; --i) {
  sum += values[i];
}
pending…
for loop, assignment condition
for (i = 0; value = values[i]; i++) {
  sum += value;
}
pending…
for loop, assignment condition, reversed
for (i = values.length - 1; value = values[i]; i--) {
  sum += value;
}
pending…
for loop, assignment condition, callback
for (i = 0; value = values[i]; i++) {
  add(value, i, values);
}
pending…
for loop, assignment condition, callback.call
for (i = 0; value = values[i]; i++) {
  add.call(context, value, i, values);
}
pending…

Compare results of other browsers

Revisions

You can edit these tests or add even more tests to this page by appending /edit to the URL. Here’s a list of current revisions for this page:

0 comments

Add a comment