Last active
June 27, 2019 12:49
-
-
Save warpech/08ad9b3ff64f2dd2bbbe045f82aaf21b to your computer and use it in GitHub Desktop.
getOwnPropertyDescriptor vs getPropertyDescriptor #jsbench #jsperf (http://jsbench.github.io/#08ad9b3ff64f2dd2bbbe045f82aaf21b) #jsbench #jsperf
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <!DOCTYPE html> | |
| <html> | |
| <head> | |
| <meta charset="utf-8"/> | |
| <title>getOwnPropertyDescriptor vs getPropertyDescriptor #jsbench #jsperf</title> | |
| <script src="https://cdnjs.cloudflare.com/ajax/libs/benchmark/1.0.0/benchmark.min.js"></script> | |
| <script src="./suite.js"></script> | |
| </head> | |
| <body> | |
| <h1>Open the console to view the results</h1> | |
| <h2><code>cmd + alt + j</code> or <code>ctrl + alt + j</code></h2> | |
| </body> | |
| </html> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| "use strict"; | |
| (function (factory) { | |
| if (typeof Benchmark !== "undefined") { | |
| factory(Benchmark); | |
| } else { | |
| factory(require("benchmark")); | |
| } | |
| })(function (Benchmark) { | |
| var suite = new Benchmark.Suite; | |
| Benchmark.prototype.setup = function () { | |
| class Animal { | |
| set otherFoo(newVal){ | |
| } | |
| }; | |
| class Dog extends Animal{ | |
| set foo(newVal){ | |
| } | |
| }; | |
| const obj = new Dog(); | |
| const prop = "foo"; | |
| const newValue = "bar"; | |
| const context = {}; | |
| // https://gist.github.com/WebReflection/3373484 | |
| function getPropertyDescriptor(o, name) { | |
| var proto = o, descriptor; | |
| while (proto && !( | |
| descriptor = Object.getOwnPropertyDescriptor(proto, name)) | |
| ) proto = proto.__proto__; | |
| return descriptor; | |
| }; | |
| }; | |
| suite.add("const descriptor = Object.getOwnPropertyDescriptor(obj, prop);", function () { | |
| const descriptor = Object.getOwnPropertyDescriptor(obj, prop); | |
| if (descriptor && descriptor.set) { //descriptor is undefined on array items | |
| Reflect.set(obj, prop, newValue, context); | |
| } | |
| else { | |
| obj[prop] = newValue; | |
| } | |
| }); | |
| suite.add("const descriptor = getPropertyDescriptor(obj, prop);", function () { | |
| const descriptor = getPropertyDescriptor(obj, prop); | |
| if (descriptor && descriptor.set) { //descriptor is undefined on array items | |
| Reflect.set(obj, prop, newValue, context); | |
| } | |
| else { | |
| obj[prop] = newValue; | |
| } | |
| }); | |
| suite.on("cycle", function (evt) { | |
| console.log(" - " + evt.target); | |
| }); | |
| suite.on("complete", function (evt) { | |
| console.log(new Array(30).join("-")); | |
| var results = evt.currentTarget.sort(function (a, b) { | |
| return b.hz - a.hz; | |
| }); | |
| results.forEach(function (item) { | |
| console.log((idx + 1) + ". " + item); | |
| }); | |
| }); | |
| console.log("getOwnPropertyDescriptor vs getPropertyDescriptor #jsbench #jsperf"); | |
| console.log(new Array(30).join("-")); | |
| suite.run(); | |
| }); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment