Toggle navigation
MeasureThat.net
Create a benchmark
Tools
Feedback
FAQ
Register
Log In
Run results for:
proxy vs getter/setter vs prototype getter/setter
Go to the benchmark
Embed
Embed Benchmark Result
Run details:
User agent:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36
Browser:
Chrome 143
Operating system:
Mac OS X 10.15.7
Device Platform:
Desktop
Date tested:
4 months ago
Test name
Executions per second
proxy
8511.6 Ops/sec
getter/setter
115552.7 Ops/sec
prototype getter/setter
111269.4 Ops/sec
native
5072.8 Ops/sec
many proxy
763.1 Ops/sec
many getter/setter
413.0 Ops/sec
many prototype getter/setter
1173.7 Ops/sec
Script Preparation code:
const obj = { x:1, y:2, z:3 }; const native = { _x:1, _y:2, _z:3, get x() { return this._x; }, set x(v) { this._x = v + 10; }, get y() { return this._y; }, set y(v) { this._y = v + 10; }, get z() { return this._z; }, set z(v) { this._z = v + 10; } } const proxyFactory = (obj) => new Proxy(structuredClone(obj), { set(target, prop, value) { if (!Object.hasOwn(target, prop)) { throw new Error(); } target[prop] = value + 10; return true; }, }); const gsFactory = (obj) => { const gs = { __internal: structuredClone(obj) }; for(let k in gs.__internal) { Object.defineProperty(gs, k, { get() { return this.__internal[k]; }, set(value) { this.__internal[k] = value + 10; } }) } return gs; } function Factory() { this.__internal = structuredClone(obj); } for(let k in obj) { Object.defineProperty(Factory.prototype, k,{ get() { return this.__internal[k]; }, set(value) { this.__internal[k] = value + 10; } }) } const protoFactory = () => new Factory(); const run = (sut, times = 1000) => { let i = times; let y = 0; while (i--) { sut.x = i + 2 sut.y = i + 1 sut.z = i y += sut.x + sut.y + sut.z } return y; } const runMany = (f, obj) => { const sut = f(obj); let i = 1000; let y = 0; while (i--) { y += run(sut, 10) } return y; } window.proxyFactory = proxyFactory; window.gsFactory = gsFactory; window.protoFactory = protoFactory; window.run = run; window.runMany = runMany; window.native = native; window.obj = obj; window.proxy = proxyFactory(obj); window.gs = gsFactory(obj); window.proto = protoFactory();
Tests:
proxy
return run(proxy);
getter/setter
return run(gs);
prototype getter/setter
return run(proto);
native
return run(native);
many proxy
return runMany(proxyFactory, obj);
many getter/setter
return runMany(gsFactory, obj);
many prototype getter/setter
return runMany(protoFactory, obj);