proto-vs-class (v2)

Revision 2 of this benchmark created on


Setup

const rawSymbol = Symbol('pino-raw-res-ref')
const pinoResProto = Object.create({}, {
  statusCode: {
    enumerable: true,
    writable: true,
    value: 0
  },
  headers: {
    enumerable: true,
    writable: true,
    value: ''
  },
  raw: {
    enumerable: false,
    get: function () {
      return this[rawSymbol]
    },
    set: function (val) {
      this[rawSymbol] = val
    }
  }
})
Object.defineProperty(pinoResProto, rawSymbol, {
  writable: true,
  value: {}
})

class PinoRes {
	statusCode = 0;
	headers = '';
	#raw = {};
	get raw () {return this.#raw};
	set raw (v) {this.#raw = v};
}

const res = {
	headersSent: true,
	statusCode: 200,
	getHeaders: () => [],
}

let lastFromProto = null
let lastFromClass = null

Test runner

Ready to run.

Testing in
TestOps/sec
proto
const _res = Object.create(pinoResProto)
_res.statusCode = res.headersSent ? res.statusCode : null
_res.headers = res.getHeaders ? res.getHeaders() : res._headers
_res.raw = res

lastFromProto = _res
ready
class
const _res = new PinoRes
_res.statusCode = res.headersSent ? res.statusCode : null
_res.headers = res.getHeaders ? res.getHeaders() : res._headers
_res.raw = res

lastFromClass = _res
ready

Revisions

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