Toggle navigation
MeasureThat.net
Create a benchmark
Tools
Feedback
FAQ
Register
Log In
Object.setPrototypeOf vs Proxy - property access
(version: 1)
Comparing performance of:
Object.setPrototypeOf vs Proxy
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 }
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
Rendered benchmark preparation results:
Suite status:
<idle, ready to run>
Run tests (2)
Previous results
Fork
Test case name
Result
Object.setPrototypeOf
Proxy
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) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36
Browser/OS:
Chrome 133 on Linux
View result in a separate tab
Embed
Embed Benchmark Result
Test name
Executions per second
Object.setPrototypeOf
133188504.0 Ops/sec
Proxy
1566577.1 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 initialization (with baseline)
Object.setPrototypeOf vs Proxy - property access (with baseline)
Comments
Confirm delete:
Do you really want to delete benchmark?