object maps -- map vs object vs struct (v10)

Revision 10 of this benchmark created by Ben Mosher on


Setup

var a = 1;
    var b = 2.15923;
    var c = 0xFFFFFF | 0;
    var d = 'asdf';
    var e = 'i should be undefined';
    
    function MapStruct() {
    this[a] = a;
    this[b] = b;
    this[c] = c;
    this[d] = d;
    };
    
    var obj = {};
    obj[a] = a;
    obj[b] = b;
    obj[c] = c;
    obj[d] = d;
    
    var map = new Map();
    map.set(a, a);
    map.set(b, b);
    map.set(c, c);
    map.set(d, d);
    
    var struct = new MapStruct();
    
    var array = [a, b, c, d]
      , lookup = { a: 0, b: 1, c: 2, d: 3 }
    
    function Datum(a, b, c, d) {
      this.a = a;
      this.b = b;
      this.c = c;
      this.d = d;
    }
    
    var datum = new Datum(a, b, c, d)
      , frozen = Object.freeze(new Datum(a, b, c, d))
    
    var aSymbol = Symbol()
      , bSymbol = Symbol()
      , cSymbol = Symbol()
      , dSymbol = Symbol()
      , eSymbol = Symbol()
    
    var symbolic = {
      [aSymbol]: a,
      [bSymbol]: b,
      [cSymbol]: c,
      [dSymbol]: d
    }

Test runner

Ready to run.

Testing in
TestOps/sec
obj property lookup
obj[a];
obj[b];
obj[c];
obj[d];
obj[e];
ready
struct property lookup
struct[a];
struct[b];
struct[c];
struct[d];
struct[e];
ready
map lookup 1
map.get(a);
map.get(b);
map.get(c);
map.get(d);
map.get(e);
ready
array with index lookup
array[lookup.a];
array[lookup.b];
array[lookup.c];
array[lookup.d];
array[lookup.e];
ready
data object wrapper
datum.a;
datum.b;
datum.c;
datum.d;
datum.e;
ready
frozen datum
frozen.a;
frozen.b;
frozen.c;
frozen.d;
frozen.e;
ready
symbolic datum
symbolic[aSymbol];
symbolic[bSymbol];
symbolic[cSymbol];
symbolic[dSymbol];
symbolic[eSymbol];
ready

Revisions

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