Loop iteration (length comparison variations) (v11)

Revision 11 of this benchmark created on


Description

Comparison of different ways to treat the length of an array when iterating the array.

Setup

window.list = [];
    var x = 100;
    for (var y = 0; y < x; y++) {
      window.list[y] = {a: y, b: "abc" + y};
    }
    
    window.forEach = function (list, fn) {
      var item, list = list.slice(0);
      while (item = list.pop()) {
        fn(item);
      }
    }

Teardown


    delete window.list;
  

Test runner

Ready to run.

Testing in
TestOps/sec
Using list.length
for (var i = 0; i < window.list.length; i++) {
  var fruit = window.list[i];
  fruit.a += 1;
}
ready
Using static len - outside for declr.
var len = window.list.length;
for (var i = 0; i < len; i++) {
  var fruit = window.list[i];
  fruit.a += 1;
}
ready
Using static len - inside for declr.
for (var i = 0, len = window.list.length; i < len; i++) {
  var fruit = window.list[i];
  fruit.a += 1;
}
ready
Reverse Loop (for)
for (var i = window.list.length; i--;) {
  var fruit = window.list[i];
  fruit.a += 1;
}
ready
Reverse Loop (while)
var i = window.list.length;
while (i--) {
  var fruit = window.list[i];
  fruit.a += 1;
}
ready
Reverse Loop (for) w/ outside declaration & --
var i = window.list.length;
for (; i--;) {
  var fruit = window.list[i];
  fruit.a += 1;
}
ready
Reverse Loop (for) w/ outside declaration & >= 0
var i = window.list.length,
    fruit;
for (; i >= 0; i--) {
  fruit = window.list[i];
  fruit.a += 1;
}
ready
Destructive array - shift
var list = window.list.slice(0),
    fruit = list.shift();
while (fruit) {
  fruit.a += 1;
  fruit = list.shift();
}
ready
Destructive array - pop
var list = window.list.slice(0),
    fruit = list.pop();
while (fruit) {
  fruit.a += 1;
  fruit = list.pop();
}
ready
Destructive array - pop w/ reverse
var list = window.list.slice(0).reverse(),
    fruit = list.pop();
while (fruit) {
  fruit.a += 1;
  fruit = list.pop();
}
ready
Destructive array - pop 2
window.forEach(window.list, function (item) { item.a += 1; });
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.