copy-loop vs. Array.slice (v10)

Revision 10 of this benchmark created by derry on


Description

The performance difference between copying an array by hand and copying it by slicing it (completely). This is for short arrays.

updated

In previous revision, the For loop test did not have pre-set length like the While loop did. This might contribute to while loop being more performant for the wrong reasons :-)

This discrepancy is fixed in current revision.

updated

Added a function version of the For test. Even it runs faster than slice (at least on my version of Chrome)

Preparation HTML

<script>
function copy_for (list) {
    var n = list.length;
    var copy = new Array(n);

    for( var i = 0; i < n; i ++ ) {
        copy[ i ] = list[ i ];
    }

    return copy;
}

</script>

Setup

var list = [];
    for (i=0; i<256; i++)
        list[i] = ''+i;

Test runner

Ready to run.

Testing in
TestOps/sec
Slice
var copy = list.slice();
ready
For
var n = list.length;
var copy = new Array(n);

for( var i = 0; i < n; i ++ ) {
    copy[ i ] = list[ i ];
}
ready
While
var i    = -1;
var n    = list.length;
var copy = new Array( n );

while( ++ i < n ) {
    copy[ i ] = list[ i ];
}
ready
While Reversed
var i    = list.length;
var copy = Array( i );

while( -- i > 0 ) {
  copy[ i ] = list[ i ];
}
ready
Pointless Pushing
var i    = -1;
var n    = list.length;
var copy = new Array();

while( ++ i < n ) {
    copy.push( list[ i ] )
}
ready
Custom Copy Function (For)
var copy = copy_for(list);
ready
naive for
var copy = new Array(list.length);
for( var i = 0; i < list.length; i ++ ) {
    copy[ i ] = list[ i ];
}
ready

Revisions

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