push vs concat vs slice (v7)

Revision 7 of this benchmark created by Jonathan Perry on


Description

Fastest method of convert array-like to actual arrays

Setup

var nativeSlice = Array.prototype.slice,
        nativeConcat = Array.prototype.concat,
        nativePush = Array.prototype.push; 
    
    function pushtest() {
      var args = [];
      args.push.apply(args, arguments);
    }
    
    function nativePushTest() {
      nativePush.apply([], arguments);
    }
    
    function concattest() {
      var args = [].concat(arguments);
    }
    
    function slicetest() {
      var args = nativeSlice.call(arguments);
    }
    
    function iteratetest() {
      var args = [], i, l;
    
      for (i = 0, l = arguments.length; i < l; i++) {
          args[i] = arguments[i];
      }
    }
    
    function iterate2test() {
      var args = [];
    
      for (var i = 0, l = arguments.length; i < l; i++) {
          args.push(arguments[i]);
      }
    }
    
    function iterate3test() {
      var i =0, l = arguments.length, args = new Array(l);
    
      for (; i < l; i++) {
          args[i] = arguments[i];
      }
    }

Test runner

Ready to run.

Testing in
TestOps/sec
push
pushtest(1,2,3,4,5,6,7,8,9);
ready
concat
concattest(1,2,3,4,5,6,7,8,9);
ready
slice
slicetest(1,2,3,4,5,6,7,8,9);
ready
iterate
iteratetest(1,2,3,4,5,6,7,8,9);
ready
Native Push Test
nativePushTest(1,2,3,4,5,6,7,8,9);
ready
iterate2
iterate2test(1,2,3,4,5,6,7,8,9);
ready
iterate3
iterate3test(1,2,3,4,5,6,7,8,9);
ready

Revisions

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