toJSON vs stringify replacer

Benchmark created by Nathan on


Description

Comparing the performance of using prototype.toJSON vs an analogous replacer function used in the JSON.stringify method.

Setup

var MyClass = function MyClass() {
      this.property = 'something';
    }
    
    var MyClassToJSON = function MyClassToJSON() {
      this.property = 'something';
    }
    
    MyClassToJSON.prototype.toJSON = function toJSON() {
      this.property = 'else';
      return this;
    }
    
    function replacer(prop, value) {
      if(value instanceof MyClass) {
        value.property = 'else';
      }
      return value;
    }
    
    var my = new MyClass();
    var my2json = new MyClassToJSON();

Test runner

Ready to run.

Testing in
TestOps/sec
w/ toJSON
var temp1 = { 
  one: 1,
  two: "two",
  three: true,
  four: null,
  five: new MyClassToJSON(),
  six: new MyClassToJSON(),
  seven: new MyClassToJSON(),
  eight: new MyClassToJSON(),
  nine: new MyClassToJSON(),
  ten: new MyClassToJSON(),
}

JSON.stringify(temp1);
ready
w/ replacer
var temp2 = { 
  one: 1,
  two: "two",
  three: true,
  four: null,
  five: new MyClass(),
  six: new MyClass(),
  seven: new MyClass(),
  eight: new MyClass(),
  nine: new MyClass(),
  ten: new MyClass(),
}

JSON.stringify(temp2, replacer);
ready
w/ neither
var temp2 = { 
  one: 1,
  two: "two",
  three: true,
  four: null,
  five: new MyClass(),
  six: new MyClass(),
  seven: new MyClass(),
  eight: new MyClass(),
  nine: new MyClass(),
  ten: new MyClass(),
}

JSON.stringify(temp2);
ready

Revisions

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

  • Revision 1: published by Nathan on
  • Revision 2: published by Alexandre Barreira on