Array.prototype.push.apply vs concat (v42)

Revision 42 of this benchmark created on


Description

This page tests speed of two different methods for array concatenation. Array method concat() has no side effects (it creates a new array to store its result in), while Array.prototype.push.apply(A, [1, 2, ...]) extends the array A.

Preparation HTML

<script>
  var x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
      y = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0];
  var arrPush = Array.prototype.push;
</script>

Test runner

Ready to run.

Testing in
TestOps/sec
concat
var a = x.slice(0),
    b = y.slice(0);

a = a.concat(b);
ready
Array#push.apply
var a = x.slice(0),
    b = y.slice(0);

Array.prototype.push.apply(a, b);
ready
Array#push with loop
var a = x.slice(0),
    b = y.slice(0),
    i = 0,
    c = b.length;

for (; i < c; ++i) {
  a.push(b[i]);
}
ready
Cached Array#push
var a = x.slice(0),
    b = y.slice(0);

arrPush.apply(a, b);
ready
Splice
var a = x.slice(0),
    b = y.slice(0);
a.splice.apply(b, [b.length, 9e9].concat(b))
ready
Apply all in one
var a = x.slice(0),
    b = y.slice(0);

Array.prototype.concat.call([], a, b)
ready
Array#write index with a loop
var a = x.slice(0),
    b = y.slice(0),
    i = 0,
    c = b.length;

for (; i < c; ++i) {
  a[a.length] = b[i];
}
ready
Array#write cached index with a loop
var a = x.slice(0),
    b = y.slice(0),
    i = 0,
    j = a.length,
    c = b.length;

for (; i < c; ++i, ++j) {
  a[j] = b[i];
}
ready

Revisions

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