concat vs push.apply vs loop vs slice (v37)

Revision 37 of this benchmark created on


Setup

var  A = [];
    
    for (var i = 0; i < 42; ++i) {
      A[i] = {};
    }

Test runner

Ready to run.

Testing in
TestOps/sec
concat
function test() {
  A = A.concat(arguments);
}

for (i = 0; i < 1000; ++i) {
  test(1,2,3,4,5,6,7,8,9,10);
}
ready
push.apply
function test() {
  A.push.apply(A, arguments);
}

for (i = 0; i < 1000; ++i) {
  test(1,2,3,4,5,6,7,8,9,10);
}
ready
Array.prototype.push.apply
function test() {
  Array.prototype.push.apply(A, arguments);
}

for (i = 0; i < 1000; ++i) {
  test(1,2,3,4,5,6,7,8,9,10);
}
ready
Array.prototype.push cached
var cachedPush = Array.prototype.push;

function test() {
  cachedPush.apply(A, arguments);
}

for (i = 0; i < 1000; ++i) {
  test(1,2,3,4,5,6,7,8,9,10);
}
ready
Loop push
function test() {
  for (var a = 0; a < arguments.length; a++) {
    A.push(arguments[a]);
  }
}

for (i = 0; i < 1000; ++i) {
  test(1,2,3,4,5,6,7,8,9,10);
}
ready
Slice
function test() {
  A = A.slice(arguments);
}

for (i = 0; i < 1000; ++i) {
  test(1,2,3,4,5,6,7,8,9,10);
}
ready
set index
function test() {
  var argLength=arguments.length;
  var oldLength=A.length;
  A.length = oldLength+argLength;
  for (var a = 0, i=oldLength; a < argLength; a++, i++) {
    A[i]=arguments[a];
  }
}

for (i = 0; i < 1000; ++i) {
  test(1,2,3,4,5,6,7,8,9,10);
}
ready

Revisions

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