object expand vs array push

Benchmark created by Stephen Hamer on


Setup

var ident8 = function() {
    var id = Math.floor(Math.random() * Math.pow(2, 32) + 1);
    // Pad the front of the string with zeros so it is 8 hex digits long
    var idstr = id.toString(16);
    var zerostr = '00000000';
    return (zerostr.substr(0, 8 - idstr.length) + idstr);
  };
  
  var ident = function() {
    return ident8() + ident8();
  };
  
  var rounds = 1000000;
  
  var idents = [];
  var things = {};
  for (var n = 0; n < rounds; n++) {
    var id = ident();
    idents.push(id);
    things[id] = {'last_check': 0};
  }
  
  var obj = {};
  var arr = [];

Test runner

Ready to run.

Testing in
TestOps/sec
full obj set
for (var pass = 0; pass < 1; pass++) {
  for (var i = 0; i < rounds / 1; i++) {
    obj[idents[i]] = true;
  }
}
var all_keys = Object.keys(obj);
ready
full array push
var check_num = 1;
for (var pass = 0; pass < 1; pass++) {
  for (var i = 0; i < rounds / 1; i++) {
    var id = idents[i];
    if (things[id].last_check != check_num) {
      things[id].last_check = check_num;
      arr.push(id);
    }
  }  
}
ready
50% duplication obj set
for (var pass = 0; pass < 2; pass++) {
  for (var i = 0; i < rounds / 2; i++) {
    obj[idents[i]] = true;
  }
}
var all_keys = Object.keys(obj);
ready
50% duplication array push
var check_num = 1;
for (var pass = 0; pass < 2; pass++) {
  for (var i = 0; i < rounds / 2; i++) {
    var id = idents[i];
    if (things[id].last_check != check_num) {
      things[id].last_check = check_num;
      arr.push(id);
    }
  }  
}
ready
90% duplication obj set
for (var pass = 0; pass < 10; pass++) {
  for (var i = 0; i < rounds / 10; i++) {
    obj[idents[i]] = true;
  }
}
var all_keys = Object.keys(obj);
ready
90% duplication array push
var check_num = 1;
for (var pass = 0; pass < 10; pass++) {
  for (var i = 0; i < rounds / 10; i++) {
    var id = idents[i];
    if (things[id].last_check != check_num) {
      things[id].last_check = check_num;
      arr.push(id);
    }
  }  
}
ready

Revisions

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

  • Revision 1: published by Stephen Hamer on