Toggle navigation
MeasureThat.net
Create a benchmark
Tools
Feedback
FAQ
Register
Log In
Object.setPrototypeOf vs Proxy - property access (with baseline)
(version: 1)
Comparing performance of:
Object.setPrototypeOf vs Proxy vs baseline class
Created:
one year ago
by:
Registered User
Jump to the latest result
HTML Preparation code:
<!--your preparation HTML code goes here-->
Script Preparation code:
class Car { constructor(make, model, year, mileage = 0, fuelLevel = 100) { this.make = make; this.model = model; this.year = year; this.mileage = mileage; this.fuelLevel = fuelLevel; } start() { console.log(`${this.make} ${this.model} is starting...`); } stop() { console.log(`${this.make} ${this.model} is stopping...`); } drive(distance) { if (this.fuelLevel > 0) { this.mileage += distance; this.fuelLevel -= distance * 0.05; // Assuming 1 unit of fuel per 20 miles console.log(`You drove ${distance} miles. Mileage is now ${this.mileage} miles.`); } else { console.log('Not enough fuel to drive.'); } } refuel(amount) { this.fuelLevel += amount; console.log(`Refueled ${amount}%. Fuel level is now ${this.fuelLevel}%.`); } getCarInfo() { return `${this.year} ${this.make} ${this.model}, Mileage: ${this.mileage} miles, Fuel Level: ${this.fuelLevel}%`; } } function createCar() { return new Car('Toyota', 'Corolla', 2021, 5000, 100); } function createProperties() { return { make: 'Toyota', model: 'Corolla', year: 2021, mileage: 5000, fuelLevel: 100 } } function createProto() { return { start: function() { console.log(`${this.make} ${this.model} is starting...`); }, stop: function() { console.log(`${this.make} ${this.model} is stopping...`); }, drive: function(distance) { if (this.fuelLevel > 0) { this.mileage += distance; this.fuelLevel -= distance * 0.05; // Assuming 1 unit of fuel per 20 miles console.log(`You drove ${distance} miles. Mileage is now ${this.mileage} miles.`); } else { console.log('Not enough fuel to drive.'); } }, refuel: function(amount) { this.fuelLevel += amount; console.log(`Refueled ${amount}%. Fuel level is now ${this.fuelLevel}%.`); }, getCarInfo: function() { return `${this.year} ${this.make} ${this.model}, Mileage: ${this.mileage} miles, Fuel Level: ${this.fuelLevel}%`; } } } function extendTarget(target, proto) { Object.setPrototypeOf(proto, Object.getPrototypeOf(target)) Object.setPrototypeOf(target, proto) return target } function createProxy(target) { return new Proxy(target, { get(target, key, receiver) { if (key in target) return Reflect.get(target, key, receiver) }, set(target, key, value, receiver) { target[key] = value; return true; } }) } const proxy = createProxy(createCar()) function getProxy() { return proxy } const extended = extendTarget(createProperties(), createProto()) function getExtendedObject() { return extended } const obj = createCar() function getCar() { return obj }
Tests:
Object.setPrototypeOf
const object = getExtendedObject() object.drive object.start object.stop object.refuel object.getCarInfo object.make object.model object.year object.mileage object.fuelLevel
Proxy
const object = getProxy() object.drive object.start object.stop object.refuel object.getCarInfo object.make object.model object.year object.mileage object.fuelLevel
baseline class
const object = getCar() object.drive object.start object.stop object.refuel object.getCarInfo object.make object.model object.year object.mileage object.fuelLevel
Rendered benchmark preparation results:
Suite status:
<idle, ready to run>
Run tests (3)
Previous results
Fork
Test case name
Result
Object.setPrototypeOf
Proxy
baseline class
Fastest:
N/A
Slowest:
N/A
Latest run results:
Run details:
(Test run date:
one year ago
)
User agent:
Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0
Browser/OS:
Firefox 128 on Linux
View result in a separate tab
Embed
Embed Benchmark Result
Test name
Executions per second
Object.setPrototypeOf
1726555904.0 Ops/sec
Proxy
4234527.0 Ops/sec
baseline class
1661324928.0 Ops/sec
Related benchmarks:
Access to Proxy vs Object with getter v2
Proxy set performance
Proxies
making proxies vs defining getters properties
Proxy vs defineProperty, assign to local
Proxy getter vs object getter
Object.setPrototypeOf vs Proxy initialization
Object.setPrototypeOf vs Proxy - property access
Object.setPrototypeOf vs Proxy initialization (with baseline)
Comments
Confirm delete:
Do you really want to delete benchmark?