Skip to content

Instantly share code, notes, and snippets.

@calebmer
Last active October 29, 2023 05:13
Show Gist options
  • Star 5 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save calebmer/c74e2a7941044e5f28b8 to your computer and use it in GitHub Desktop.
Save calebmer/c74e2a7941044e5f28b8 to your computer and use it in GitHub Desktop.
Object.setPrototypeOf vs Object.create benchmark test
Iteration(s): 0
==================================
Object.create: 0
Object.setPrototypeOf: 0
Iteration(s): 1
==================================
Object.create: 0
Object.setPrototypeOf: 0.04
Iteration(s): 2
==================================
Object.create: 0
Object.setPrototypeOf: 0
Iteration(s): 5
==================================
Object.create: 0
Object.setPrototypeOf: 0
Iteration(s): 100
==================================
Object.create: 0
Object.setPrototypeOf: 0
Iteration(s): 1000
==================================
Object.create: 0.04
Object.setPrototypeOf: 0.04
Iteration(s): 10000
==================================
Object.create: 0.16
Object.setPrototypeOf: 0.2
Iteration(s): 100000
==================================
Object.create: 1.56
Object.setPrototypeOf: 1.44
Iteration(s): 1000000
==================================
Object.create: 13
Object.setPrototypeOf: 11.8
Iteration(s): 10000000
==================================
Object.create: 89.72
Object.setPrototypeOf: 71.88
Iteration(s): 25000000
==================================
Object.create: 168.4
Object.setPrototypeOf: 178.8
Iteration(s): 50000000
==================================
Object.create: 339.2
Object.setPrototypeOf: 357.44
Iteration(s): 75000000
==================================
Object.create: 503
Object.setPrototypeOf: 535.72
Iteration(s): 100000000
==================================
Object.create: 667.88
Object.setPrototypeOf: 708.44
function A() {
var subA = Object.create(A.prototype);
return subA;
}
A.prototype.yes = function () { return true; };
function B() {
var subB = {};
Object.setPrototypeOf(subB, B.prototype);
return subB;
}
B.prototype.yes = function () { return true; };
var runs = 25;
var iterations = [0, 1, 2, 5, 10e1, 10e2, 10e3, 10e4, 10e5, 10e6, 25e6, 50e6, 75e6, 10e7];
var results = {};
iterations.forEach(function (iterate) {
var i;
var start;
if (!results[iterate]) {
results[iterate] = { a: 0, b: 0 };
}
start = new Date();
for(i = 0; i < iterate; i++) {
var a = new A();
if (a.yes() !== true) {
throw new Error('incorrect output @ ' + i);
}
}
results[iterate].a += new Date() - start;
start = new Date();
for(i = 0; i < iterate; i++) {
var b = new B();
if (b.yes() !== true) {
throw new Error('incorrect output @ ' + i);
}
}
results[iterate].b += new Date() - start;
});
iterations.forEach(function (iterate) {
var a = results[iterate].a / runs;
var b = results[iterate].b / runs;
console.log('Iteration(s): ', iterate);
console.log('==================================');
console.log('Object.create: ', a);
console.log('Object.setPrototypeOf: ', b);
console.log('');
});
@alexmnv
Copy link

alexmnv commented Feb 14, 2019

node 8.9.1 results:

Iteration(s):            100000000
==================================
Object.create:           46.56
Object.setPrototypeOf:   353.4

Chrome 59.0.3071.104 results:

Iteration(s):            100000000
==================================
Object.create:           46.36
Object.setPrototypeOf:   326.56

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment