delim split vs json parse

Benchmark created on


Preparation HTML

<script>
  // mimicing php's array_combine()
  function combine(a, b) {
        var i, o = {};
  
        for (i in a)
          o[a[i]] = b[i];
  
        return o;
  }
  
  // parses recordsets and returns an array of object instances
  function recSet(data, facts) {
        facts = facts || window;
        
        var head = data.head.split(data.fldt),
                recs = data.recs.split(data.rect),
                fact = data.fact ? facts[data.fact] : function(obj) {return obj;};
  
        for (var i in recs)
                recs[i] = fact(combine(head, recs[i].split(data.fldt)));
        
        return recs;
  }
  
  // factories
  var facts = {
        person: function(obj) {return obj;}
  };
  
  // recordset
  var data = {
        type: "delim",
        fldt: "|",
        rect: "~",
        fact: "person",                                 // object instantiation factory
        head: "fname|lname|age|location|gender",
        recs: ""
  };
  
  var i = 10000, recs = [];
  while (i-- > 0)
    recs.push("john q|public|34|chicago, il|male");
  data.recs = recs.join("~");
  
  var i = 10000, recs2 = [];
  while (i-- > 0) {
        recs2.push({
                fname: "john q",
                lname: "public",
                age: "34",
                location: "chicago, il",
                gender: "male"
        });
  }
  recs2 = JSON.stringify(recs2);
</script>

Test runner

Ready to run.

Testing in
TestOps/sec
from short csv string
recs = recSet(data, facts);
ready
from long json string
var rex = JSON.parse(recs2);
for (var j in rex)
        rex[j] = facts.person(rex[j]);
ready

Revisions

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