Script Preparation code:
x
 
var bigdata = {};
for (var i = 0; i < 100; i++) {
  var usdata = {
    name: 'user' + i,
    surname: 'user' + i,
    friends: {}
  };
  for (var j = 0; j < 10; j++) {
    usdata.friends['friend' + j] = {
      _ref: 'firend' + j
    };
  }
  bigdata['user' + i] = usdata;
}
function lazyExtend(prev, next) {
  if (!prev) return;
  for (var k in next) {
    var val = next[k];
    if (typeof(val) !== 'object') continue;
    lazyExtend(prev[k], val);
  }
  if (!next.toJSON) next.toJSON = jsonAll;
  Object.setPrototypeOf(next,prev);
}
function jsonAll() {
  var tmp = {};
  for(var key in this) {
    var to = typeof this[key];
    if(to !== 'function')
      tmp[key] = this[key];
  }
  return tmp;
}
Tests:
  • JSON rw

     
    var copy = JSON.parse(JSON.stringify(bigdata.user0));
  • Prototype

     
    var copy = {};
    lazyExtend(bigdata.user0,copy);
Rendered benchmark preparation results:

Suite status: <idle, ready to run>

Previous results

Experimental features:

  • Test case name Result
    JSON rw
    Prototype

    Fastest: N/A

    Slowest: N/A

Latest run results:
Run details: (Test run date: 8 years ago)
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36
Chrome 53 on Mac OS X 10.10.5
View result in a separate tab
Test name Executions per second
JSON rw 134600.4 Ops/sec
Prototype 1611371.9 Ops/sec