dojo lang.getObject vs js direct (v2)

Revision 2 of this benchmark created on


Preparation HTML

<script src="//ajax.googleapis.com/ajax/libs/dojo/1.9.1/dojo/dojo.js"></script>

Setup

var data = [];
    var MAX = 100000;
    for (var i = 0; i < MAX; i++) {
      data.push({
        id: i,
        nested: {
          id: i
        }
      });
    }
    
    getProp = function(/*Array*/parts, /*Boolean*/create, /*Object*/context){
                        var p, i = 0;                   
                        while(context && (p = parts[i++])){
                                context = (p in context ? context[p] : (create ? context[p] = {} : undefined));
                        }
                        return context; // mixed
                }
    
    getPropFunc = function(prop){
                        var parts, p, i = 0, f = "";                    
          parts = prop.split(".");
          for (var i = 0; i < parts.length; i++) {
             var p = parts[i];
             f += "['" + p + "']";
          }
    //      f = new Function("o", "return o" + f);
          f = eval("(function(o){return o" + f + "})");
          return f;
                }
    
    idFunc = getPropFunc("id");
    nestedIdFunc = getPropFunc("nested.id");

Test runner

Ready to run.

Testing in
TestOps/sec
lang.getObject
// async test
require(["dojo/_base/lang"], function(lang) {
  var s = "";

  for (var i = 0; i < data.length; i++) {
    var item = data[i];
    s += lang.getObject("id", null, item);
  }
  deferred.resolve();
});
ready
direct [] access
// async test
require(["dojo/_base/lang"], function(lang) {
  var s = "";
  for (var i = 0; i < data.length; i++) {
    var item = data[i];
    s += item["id"];
  }
  deferred.resolve();
});
ready
getProp
// async test
require(["dojo/_base/lang"], function(lang) {
  var s = "";
  for (var i = 0; i < data.length; i++) {
    var item = data[i];
    s += getProp(["id"], null, item);
  }
  deferred.resolve();
});
ready
getPropFunc
// async test
require(["dojo/_base/lang"], function(lang) {
  var s = "";
  for (var i = 0; i < data.length; i++) {
    var item = data[i];
    s += idFunc(item);
  }
  deferred.resolve();
});
ready
getPropFunc nested
// async test
require(["dojo/_base/lang"], function(lang) {
  var s = "";
  for (var i = 0; i < data.length; i++) {
    var item = data[i];
    s += nestedIdFunc(item);
  }
  deferred.resolve();
});
ready

Revisions

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