Map vs IterableMap

JavaScript performance comparison

Revision 11 of this test case created

Preparation code

<script>
/**
 * A wrapper for a harmony Map that is iterable.
 * It does not allow deletion of keys however.
 */

function IterableMap() {
  this._internal = new Map();
  this._keys = new Array(100);
}

IterableMap.prototype.has = function(key) {
  return this._internal.has(key);
};

IterableMap.prototype.get = function(key) {
  return this._internal.get(key);
};

IterableMap.prototype.set = function(key, val) {
  var internal = this._internal;
  internal.set(key, val);
};

IterableMap.prototype.delete = function(key) {
  return this._internal.delete(key);
};

IterableMap.prototype.forEach = function(cb, thisObj) {
  var keys = this._keys,
    internal = _internal;
  for(var i = 0, il = internal.size; i < il; i++) {
    var key = keys[i];
    cb.call(thisObj, internal.get(key), key, this);
  }
};

Object.defineProperty(IterableMap.prototype, "size", {
  get: function() { return this._internal.size; }
});
</script>
 
<script>
Benchmark.prototype.setup = function() {
    var keys = [
      1,
      {},
      [],
      "1"
    ];
   
    var m1 = new Map();
    var m2 = new IterableMap();
};
</script>

Preparation code output

Test runner

Warning! For accurate results, please disable Firebug before running the tests. (Why?)

Java applet disabled.

Testing in unknown unknown
Test Ops/sec
Map
for(var i = 0, il = keys.length; i < il; i++) {
   m1.set(keys[i], 1);
   m1.has(keys[i]);
   m1.get(keys[i]);
}
pending…
IterableMap
for(var i = 0, il = keys.length; i < il; i++) {
   m2.set(keys[i], 1);
   m2.has(keys[i]);
   m2.get(keys[i]);
}
pending…

Compare results of other browsers

Revisions

You can edit these tests or add even more tests to this page by appending /edit to the URL. Here’s a list of current revisions for this page:

0 comments

Add a comment