array cloning (v91)

Revision 91 of this benchmark created on


Description

speed comparissons between slice, splice, for, $.merge, Array

Preparation HTML

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script>
function arrayClone(arr, i) {
  var copy = new Array(i);
  while (i--)
    copy[i] = arr[i];
  return copy;
}
</script>

Setup

var a = [{
        test: 'bye'
      },
      'z',
      'a',
      'q',
      'w',
      's',
      'x',
      'c',
      'd',
      'v',
      'e',
      'f',
      't',
      'r',
      'g',
      't',
      'm',
      'y',
      'h',
      't',
      'y',
      'j',
      'i',
      'o',
      'l',
      'f',
      's',
      'd',
      'j',
      'n'
    ];
    var b = [];

Teardown


    if (b.length !== a.length) {
      throw {
        message: "Test failed! b.length !== a.length"
      };
    }
    b[0].test = 'hi';
    if (a[0].test === 'hi') {
      //  throw {message: "Not a deep clone"};
    }
    for (var i = 1, l = a.length; i < l; i++) {
      if (b[i] !== a[i]) {
        throw {
          message: "Test failed! b array is " + b
        };
      }
    }
  

Test runner

Ready to run.

Testing in
TestOps/sec
slice
b = a.slice();
ready
concat
b = [].concat(a);
ready
for-unshift
b = [];
for (var i = a.length; i--;) {
  b.unshift(a[i]);
}
ready
for-push
b = [];
for (var i = 0, l = a.length; i < l; i++) {
  b.push(a[i]);
}
ready
for-index
b = [];
for (var i = 0, l = a.length; i < l; i++) {
  b[i] = a[i];
}
ready
while loop
var i = a.length;
while (i--) {
  b[i] = a[i];
}
ready
slice(0)
b = a.slice(0);
ready
a.concat()
b = a.concat()
ready
Array
b = Array.apply(undefined, a);
ready
Regular For
for (var i = 0; i < a.length; ++i) {
  b[i] = a[i];
}
ready
arrayClone
var b = arrayClone(a, a.length);
ready
map
b = a.map(function(v) {
  return v;
})
ready
For loop predefined
b = new Array(a.length);
for (var i = 0; i < a.length; i++) {
  b[i] = a[i];
}
ready
For loop predefined opt
b = new Array(a.length);
for (var i = 0, n = a.length; i < n; i++) {
  b[i] = a[i];
}
ready
haloshadow method
        var i = a.length;
        var j = a.length % 32;
        do { switch (j) {
                case 0: b[--i] = a[i];
                case 31: b[--i] = a[i];
                case 30: b[--i] = a[i];
                case 29: b[--i] = a[i];
                case 28: b[--i] = a[i];
                case 27: b[--i] = a[i];
                case 26: b[--i] = a[i];
                case 25: b[--i] = a[i];
                case 24: b[--i] = a[i];
                case 23: b[--i] = a[i];
                case 22: b[--i] = a[i];
                case 21: b[--i] = a[i];
                case 20: b[--i] = a[i];
                case 19: b[--i] = a[i];
                case 18: b[--i] = a[i];
                case 17: b[--i] = a[i];
                case 16: b[--i] = a[i];
                case 15: b[--i] = a[i];
                case 14: b[--i] = a[i];
                case 13: b[--i] = a[i];
                case 12: b[--i] = a[i];
                case 11: b[--i] = a[i];
                case 10: b[--i] = a[i];
                case 9: b[--i] = a[i];
                case 8: b[--i] = a[i];
                case 7: b[--i] = a[i];
                case 6: b[--i] = a[i];
                case 5: b[--i] = a[i];
                case 4: b[--i] = a[i];
                case 3: b[--i] = a[i];
                case 2: b[--i] = a[i];
                case 1: b[--i] = a[i];
        }j = 0; } while (i!==0);
ready

Revisions

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