Preparation Code Preparation HTML (this will be inserted in the <body>
of a valid HTML5 document in standards mode) (useful when testing DOM operations or including libraries) <script src ="http://code.jquery.com/jquery-1.8.2.min.js" >
</script >
Setup JS var i,
value,
length,
values = [],
sum = 0 ,
context = values;
for (i = 0 ; i < 10000 ; i++) {
values[i] = Math .random ();
}
function add (val ) {
sum += val;
}
function addEach (k, val ) {
sum += val;
}
var toString = Object .prototype .toString ;
function isArray (obj ) {
return toString.call (obj) === '[object Array]' ;
}
function isObject (obj ) {
return toString.call (obj) === '[object Object]' ;
}
function isString (obj ) {
return toString.call (obj) === '[object String]' ;
}
function each (obj, iterator ) {
var key, length;
if (!obj) {
return ;
}
length = obj.length ;
if (isArray (obj) || isString (obj)) {
for (key = 0 ; key < length; key += 1 ) {
iterator (obj[key], key, obj);
}
return obj;
}
if (isObject (obj)) {
for (key in obj) {
if (obj.hasOwnProperty (key)) {
iterator (obj[key], key, obj);
}
}
return obj;
}
return obj;
};
Teardown JS
i = 0 ;
value = 0 ;
length = 0 ;
values = [];
sum = 0 ;
Test cases
Test #1 Title *
Async
Code * values.forEach (add);
Test #2 Title *
Async
Code * var arr = values,
length = arr.length ;
for (var i = 0 ; i < length; i++) {
add (arr[i], i, arr);
}
Title *
Async
Code * length = values.length ;
for (i = 0 ; i < length; i++) {
add.call (context, values[i], i, values);
}
Title *
Async
Code * $.each (values, addEach);
Title *
Async
Code * for (i = 0 ; (value = values[i]) !== undefined ; i++) {
add (value, i, values);
}
Title *
Async
Code * for (i = 0 ; (value = values[i]) !== undefined ; i++) {
add.call (context, value, i, values);
}
Title *
Async
Code * values.map (add);
Title *
Async
Code * each (values, add);
Title *
Async
Code * var arr = values;
for (var i = 0 ; i < arr.length ; i++) {
add (arr[i], i, arr);
}
Title *
Async
Code * var arr = values;
for (var i = 0 , n = arr.length ; i < n; i++) {
add (arr[i], i, arr);
}