For vs While on array + function call (v23)

Revision 23 of this benchmark created by oHessling on


Description

What is the fastest loop for function call on array?

  • forEach
  • for (i in array)
  • for / while
  • pre / post increment
  • increment / decrement
  • call()
  • retrieve value within stop condition

Please, feel free to add any other ideas...

The test names are the parameters within for(a;b;c) or while(b) statements. For instance:

  • Test i=0;i<L;i++ refers to for(var i=0; i<L; i++) ...
  • Test i-- refers to while(i--) ...

See also a similar bench: jsperf.com/for-vs-while

Setup

var values = [];
    for (var i = 0; i < 100; 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
no-cache
for (var i = 0; i < values.length; i++)
  add (values[i]);
ready
call
var L = values.length;

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

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

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

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

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

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

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

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

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

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

 
ready
i!==L
var L = values.length;
var i = 0;

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

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

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

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

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

for (var i = 0; i < L ; )  {
  add (values[i++]);
  add (values[i++]);
}
ready
i<L * 2
var L = values.length;
var i = 0;

while (i < L)  {
  add (values[i++]);
  add (values[i++]);
}
ready
i=0;m=v[i];++i
var match;

for (var i = 0; match = values[i]; ++i)
  add (match);
ready
i=0;m=v[i];i++
var match;

for (var i = 0; match = values[i]; i++)
  add (match);
ready
i=0;m=v[i++];
var match;

for (var i = 0; match = values[i++]; )
  add (match);
ready
m=v[i++]
var i = 0;
var match;

while (match = values[i++])
  add (match);
ready
(m=v[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.