All Types of Loops (v30)

Revision 30 of this benchmark created by Jasper on


Description

This is a collection of all the possible loop constructs you can think of. I want to have a comprehensive reference to all creative solutions regardless of beautiful code, standards, etc... the goal is to find the holy grail for the fastest loop.

Setup

var result = 0,
        steps = 100;
    
    function arrayLoop(a)
     {
       result = result + a;
       return result;  
     }

Test runner

Ready to run.

Testing in
TestOps/sec
a
var result = 0;
for (var i = steps - 1; i >= 0; i--) {
  result = result + i;
}
ready
b
var result = 0;
for (var i = steps; i--;) {
  result = result +i;
}
ready
c
var i = steps, result =0;
while (i--) {
  result = result + i;
}
ready
d
var result = 0;
for (var i = 0; i < steps; i++) {
  result = result + i;
}
ready
e
var result = 0;
for (var i = 0; i < steps; i++) result += i;
ready
f
var i = 0, result =0;
for (;;) {
  result += i++;
  if (i == steps) break;
}
ready
g
var i, result = 0;
for (i = steps - 1; i; i--) {
  result = result + i;
}
ready
h
var i = steps, result = 0;
while (i) {
  result = result + i;
  i = ~-i;
}
ready
i
var i = steps, result = 0;
redo:
while (i--) {
  result = result + i;
  continue redo;
}
ready
j
var i = steps, result = 0;

redo:
while (i) {
  result = result + i;
  i--;
  continue redo;
}
ready
k
var i = steps, result = 0;
// this is just to see in best case scenario how many ops/sec we could get
// this is not a loop!

result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
result = result + i--;
 
ready
l
// will not work in IE < 9

var xarray = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1];

xarray.every(arrayLoop);
ready
m
var i = steps, result = 0;
while (i) {
  result = result + i;
  i = i - 1;
}
ready
n
var i = steps, result = 0;
while (i) {
  result = result + i;
  i--;
}
ready
o
var i = steps, result = 0;
while (true) {
  result = result + i;
  i--;
  if (i === 0) break;
}
ready
p
var i = steps, result = 0;
while (i=~-i) {
  result = result + i;
}
ready
q
var result = 0, i = steps - 1;
for (; i >= 0; i--) {
  result = result + i;
}
ready
r
var result = 0, i = steps - 1;
for (; i > -1; i--) {
  result = result + i;
}
ready
s
var result = 0, i = steps - 1;
for (; i > -1;) {
  result = result + i;
  i = ~-i;
}
ready
t
var i = steps;
redo:
do
  {
   i--;
   result = result +i;
   if (i === 0) break;
   continue redo;
  }
while (i);
ready
u
var i = steps, result = 0;
do 
{
  result = result + i;
  i = ~-i;
}
while (i) 
ready
v
var i = steps, result = 0;
while (i) {
  result = result + i--;
  result = result + i--;
  result = result + i--;
  result = result + i--;
  result = result + i--;
}
ready
w
var i = steps, result = 0;
while (i) {
  arrayLoop(i--);
  arrayLoop(i--);
  arrayLoop(i--);
  arrayLoop(i--);
  arrayLoop(i--);
}
ready
x
var result = 0, i = steps - 1;
for (; i > -1;) {
  result = result + i--;
  result = result + i--;
  result = result + i--;
  result = result + i--;
  result = result + i--;
}
ready

Revisions

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

  • Revision 1: published by antimatter15 on
  • Revision 2: published by David Calhoun on
  • Revision 3: published by Leonardo Dutra on
  • Revision 4: published by Anthony M on
  • Revision 5: published on
  • Revision 6: published on
  • Revision 7: published on
  • Revision 8: published by devu on
  • Revision 9: published by Jörn Berkefeld on
  • Revision 11: published by Milan Adamovsky on
  • Revision 18: published by Milan Adamovsky on
  • Revision 24: published by Milan Adamovsky2 on
  • Revision 30: published by Jasper on