forEach vs for vs while + function call (v21)

Revision 21 of this benchmark created by oHessling on


Description

What is the fastest loop for function call ?

Setup

var values = [];
    for (var i = 0; i < 1000; i++)
      values[i] = i+1;
    
    //sum is reset before test to guarantee same condition
    var sum; 
    
    function add (val) {
      sum += val;
    }

Test runner

Ready to run.

Testing in
TestOps/sec
forEach
sum = 0;

values.forEach(add);
ready
for in
sum = 0;

for (var i in values)
  add(values[i]);
ready
for(i=0;i<L;i++)
sum = 0;

for (var i = 0; i < values.length; i++)
  add(values[i]);
ready
for(i=L-1;i>=0;--i)
sum = 0;

for (var i = values.length - 1; i >= 0; --i)
  add(values[i]);
ready
for(i=L-1;i>=0;i--)
sum = 0;

for (var i = values.length - 1; i >= 0; i--)
  add(values[i]);
ready
for(i=L-1;i!==0;i--)
sum = 0;

for (var i = values.length - 1; i !== 0; i--)
  add(values[i]);
ready
for(i=0;i<L;i++)
sum = 0;
var L = values.length;

for (var i = 0; i < L; i++)
  add(values[i]);
ready
for(;i!==L;)
sum = 0;
var L = values.length,
    i = 0;

for (; i !== L;)
  add(values[i++]);
ready
for(i=0;i<L;i++) call()
sum = 0;
var L = values.length;

for (var i = 0; i < L; i++)
  add.call(values[i]);
ready
for(i=L-1;i!==0;--i)
sum = 0;

for (var i = values.length - 1; i !== 0; --i)
  add(values[i]);
ready
for(i=L;--i>=0;)
sum = 0;

for (var i = values.length; --i >= 0; )
  add(values[i]);
 
ready
for(i=L;--i!==-1;)
sum = 0;

for (var i = values.length; --i !== -1;)
  add(values[i]);
ready
for(i=L;i;)
sum = 0;

for (var i = values.length; i ; )
  add(values[--i]);
ready
for(i=L;i--;)
sum = 0;

for (var i = values.length; i--;)
  add(values[i]);
ready
for(i=L;i;--i)
sum = 0;

for (var i = values.length; i; --i)
  add(values[i]);
ready
for(i=L;--i!==-1;)
sum = 0;

for (var i = values.length; --i !== -1;)
  add(values[i]);
ready
while(i--!==-1)
sum = 0;
var i = values.length + 0;

while (i-- !== -1)
  add(values[i]);
 
ready
while(--i>=0) call()
sum = 0;
var i = values.length;

while (--i >= 0)
  add.call(values[i]);
ready
while(i-->0)
sum = 0;
var i = values.length;

while (i-- > 0)
  add(values[i]);
ready
while(i<L)
sum = 0;
var L = values.length,
    i = 0;

while (i < L)
  add(values[i++]);
ready
while(i)
sum = 0;

var i = values.length;
while (i)
  add(values[--i]);
ready
while(i!==L)
sum = 0;
var L = values.length,
    i = 0;

while (i !== L)
  add(values[i++]);
ready
while(--i>=0)
sum = 0;
var i = values.length;

while (--i >= 0)
  add(values[i]);
ready
while(--i)
sum = 0;
var i = values.length;

while (--i)
  add(values[i]);
ready
while(--i!==0)
sum = 0;
var i = values.length;

while (--i !== 0)
  add(values[i]);
ready
for(i=0;match=values[i];++i)
sum = 0;

for (var i = 0; match = values[i]; ++i)
  add(match);
 
ready
for(i=L-1;match=values[i];--i)
sum = 0;

for (var i = values.length-1; match = values[i]; --i)
  add(match);
ready
for(i=L;match=values[--i];)
sum = 0;

for (var i = values.length; match = values[--i];)
  add(match);
ready

Revisions

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