Map.get test (v2)

Revision 2 of this benchmark created on


Setup

var map1 = {
      delegate: {},
      put: function(key, val) {
        this.delegate[key] = val;
      },
      get: function(key) {
        return this.delegate[key];
      },
      remove: function(key) {
        delete this.delegate[key];
      },
      contains: function(key) {
        return this.delegate[key] !== undefined;
      }
    };
    
    var map2 = {
      delegate: {},
      put: function(key, val) {
        this.delegate[key] = val;
      },
      get: function(key) {
        if (Object.prototype.hasOwnProperty.call(this.delegate, key)) {
          return this.delegate[key];
        }
        return undefined;
      },
      remove: function(key) {
        delete this.delegate[key];
      },
      contains: function(key) {
        return this.delegate[key] !== undefined;
      }
    };
    var map3 = {
      put: function(key, val) {
        this[':'+key] = val;
      },
      get: function(key) {
        return this[':'+key];
      }
    };
    
    var keys = [];
    var keys2 = [];
    for (var i = 0; i < 100; i++) {
      keys.push('HERE_IS_A_LONG_KEY' + i);
      keys2.push('HERE_IS_A_DIFFERENT_KEY' + i);
    }
    for (var k = 0; k < keys.length; k++) {
      map1.put(keys[k], k);
      map2.put(keys[k], k);
      map3.put(keys[k], k);
    }

Test runner

Ready to run.

Testing in
TestOps/sec
Delegating, no hasOwnProperty check (all in map)
for (var k = 0; k < keys.length; k++) {
  map1.get(keys[k]);
}
ready
Delegating, hasOwnProperty check (all in map)
for (var k = 0; k < keys.length; k++) {
  map2.get(keys[k]);
}
ready
Concat map (all in map)
for (var k = 0; k < keys.length; k++) {
  map3.get(keys[k]);
}
ready
Delegating, no hasOwnProperty check (none in map)
for (var k = 0; k < keys2.length; k++) {
  map1.get(keys2[k]);
}
ready
Delegating, hasOwnProperty check (none in map)
for (var k = 0; k < keys2.length; k++) {
  map2.get(keys2[k]);
}
ready
Concat map (none in map)
for (var k = 0; k < keys2.length; k++) {
  map3.get(keys2[k]);
}
ready

Revisions

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