$.each vs for vs for in loop with numbers (v6)

Revision 6 of this benchmark created by nomiad on


Description

Wanted to run some tests on how fast jQuery's .each() function was versus using a standard JS for loop. I tested a for and a for in loop against .each().

Looked over it and i think for normal arrays jquerys each could be optimized. --nomiad

Preparation HTML

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>

<script>
  var arrayOfStrings = {};
  var arrayLength = 50000;
  for (var i = 0; i <= arrayLength ; i++) {
    arrayOfStrings["string" + i] = "String at " + i + " in the array.";
  }
  
  var numberArray=new Array();
  for (var i=0; i<arrayLength; i++)
    numberArray.push(i);
  
  function optimizedEach(array,func){
    if(array.constructor == Array){
      for (var i=0,ilen=array.length; i<ilen; i++){
        func(i,array[i]);
      }
    } else {
      $.each(array,func);
    }
  }
</script>

Test runner

Ready to run.

Testing in
TestOps/sec
each()
var res=0;
$.each(numberArray, function(index, nr) {
  res+=nr;
});
 
ready
for - standard
var res=0;
for (var index, arrayOfStringsLength = arrayOfStrings.length; index <= arrayOfStringsLength; index++) {
   res+=numberArray[index];
}
ready
for in
var res=0;
var index=0;
for (index in numberArray) {
  res+=numberArray[index];
}
ready
optimized each
var res=0;
optimizedEach(numberArray,function(index,value){
  res+=value;
});
ready
Object Keys
var res=0;
var keys=Object.keys(numberArray);
for (var i=0,l=keys.length; i<l; i++){
  res+=numberArray[keys[i]];
}
ready

Revisions

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