splice vs rebuild array

Benchmark created by michael mclaughlin on


Description

splice is notoriously slow. wanted to see if rebuilding an array would be faster or slower than splice.

Setup

var newStrArr_splice,
    newObjArr_splice,
    newStrArr_rebuild,
    newObjArr_rebuild,
    arrayLength = 10,
    strArr = new Array(arrayLength),
    objArr = new Array(arrayLength);
    for (var i = arrayLength - 1; i >= 0; i--) {
        var objTemplate = {something: 'stringy', id: i, attributes: {}},
            strTemplate = 'stringy-' + i,
            newObj = objTemplate;
        strArr[i] = strTemplate;
        objArr[i] = objTemplate;
    }
    
    
    var randPos = Math.round(Math.random()* (arrayLength / 2)) + (arrayLength / 4);
    
    function rebuildArray(array, index, excludeTo) {
        var newArr = [];
        for (var i = array.length - 1; i >= 0; i--) {
            if (i >= index + excludeTo) {
                newArr.push(array[i]);
            }
            if (i < index) {
                newArr.push(array[i]);
            }
        }
        return array.reverse();
    }

Teardown


    window.console.log(newStrArr_splice);
    window.console.log(newObjArr_splice);
    window.console.log(newStrArr_rebuild);
    window.console.log(newObjArr_rebuild);
  

Test runner

Ready to run.

Testing in
TestOps/sec
splice string array
var newStrArr_splice = strArr.splice(randPos, 1);
ready
splice object array
var newObjArr_splice = objArr.splice(randPos, 1);
ready
rebuild string array
var newStrArr_rebuild = rebuildArray(strArr, randPos, 1);
ready
rebuild object array
var newObjArr_rebuild = rebuildArray(objArr, randPos, 1);
ready

Revisions

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

  • Revision 1: published by michael mclaughlin on
  • Revision 2: published by Jeremy Diviney on