KC vs OM vs Map - Part 2 - Get Key

JavaScript performance comparison

Test case created by Andrew Nurse

Preparation code

 
<script>
Benchmark.prototype.setup = function() {
    function KeyedCollection(keyExtractor) {
        var items = [];
        var table = {};
       
        this.add = function(item) {
            var index = items.length;
            var key = keyExtractor(item);
            items.push(item);
            table[key] = { index: index, value: item };
        }
   
        this.delete = function(key) {
            var node = table[key];
            items.splice(node.index, 1);
            delete table[key];
        }
   
        this.get = function(key) {
            return table[key].value;
        }
   
        this.all = function() {
            return items;
        }
    };
   
    function ObjectMap(keyExtractor) {
        var table = {};
   
        this.add = function(item) {
            var key = keyExtractor(item);
            table[key] = item;
        }
   
        this.delete = function(key) {
            delete table[key];
        }
   
        this.get = function(key) {
            return table[key];
        }
   
        this.all = function() {
            var arr = [];
            for(var key in table) {
                if(table.hasOwnProperty(key)) {
                    arr.push(table[key]);
                }
            }
            return arr;
        }
    }
   
    function Item(name, value) {
        this.name = name;
        this.value = value;
    }
   
    var kc = new KeyedCollection(function(item) { return item.name; });
    var om = new ObjectMap(function(item) { return item.name; });
    var map = {};
   
    for(var i = 0; i < 1000; i++) {
        kc.add(new Item('k' + i, i));
    }
   
    for(var i = 0; i < 1000; i++) {
        om.add(new Item('k' + i, i));
    }
   
    for(var i = 0; i < 1000; i++) {
        var key = 'k' + i;
        map[key] = new Item(key, i);
    }
};
</script>

Test runner

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

Java applet disabled.

Testing in unknown unknown
Test Ops/sec
KeyedCollection
kc.get('k125');
pending…
ObjectMap
om.get('k125');
pending…
Map
map['k125'];
pending…

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

Compare results of other browsers

0 comments

Add a comment