For vs While + function (v22)

Revision 22 of this benchmark created by oHessling on


Description

What is the fastest loop for function call?

  • forEach
  • for (i in array)
  • for / while
  • pre/post increment
  • increment / decrement
  • call()
  • retrieve value within stop condition
  • feel free to add more ideas...

Setup

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

Test runner

Ready to run.

Testing in
TestOps/sec
forEach
values.forEach(add);
ready
for in
for (var i in values)
  add(values[i]);
ready
for(i=0;i<L;i++)
for (var i = 0; i < values.length; i++)
  add(values[i]);
ready
for(i=L-1;i>=0;--i)
for (var i = values.length - 1; i >= 0; --i)
  add(values[i]);
ready
for(i=L-1;i>=0;i--)
for (var i = values.length - 1; i >= 0; i--)
  add(values[i]);
ready
for(i=L-1;i!==0;i--)
for (var i = values.length - 1; i !== 0; i--)
  add(values[i]);
ready
for(i=0;i<L;i++)
var L = values.length;

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

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

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

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

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

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

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

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

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

while (--i)
  add(values[i]);

 
ready
while(i<L)
var L = values.length;
var i = 0;

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

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

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

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

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

while (match = values[i++])
  add(match);
ready
while((match=values[i++])!==undefined)
var i = 0;
var match;

while ((match = values[i++]) !== undefined)
  add(match);
ready

Revisions

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