diff options
author | 2023-08-03 20:14:17 -0700 | |
---|---|---|
committer | 2023-08-03 20:14:17 -0700 | |
commit | 76dee9312ba5201583ba9f8232b96397fa490808 (patch) | |
tree | dabe6ede81cb669968654743dd3d3b473592a6fa /bench | |
parent | 9beccc3305b1931311605d512ca3e85295c23f55 (diff) | |
download | bun-76dee9312ba5201583ba9f8232b96397fa490808.tar.gz bun-76dee9312ba5201583ba9f8232b96397fa490808.tar.zst bun-76dee9312ba5201583ba9f8232b96397fa490808.zip |
Add microbenchmark for private properties
Diffstat (limited to 'bench')
-rw-r--r-- | bench/snippets/private.mjs | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/bench/snippets/private.mjs b/bench/snippets/private.mjs new file mode 100644 index 000000000..ca75c6e07 --- /dev/null +++ b/bench/snippets/private.mjs @@ -0,0 +1,80 @@ +import { bench, run } from "../node_modules/mitata/src/cli.mjs"; +// This is a benchmark of the performance impact of using private properties. + +bench("Polyfillprivate", () => { + "use strict"; + var __classPrivateFieldGet = + (this && this.__classPrivateFieldGet) || + function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) + throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); + }; + var __classPrivateFieldSet = + (this && this.__classPrivateFieldSet) || + function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) + throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return kind === "a" ? f.call(receiver, value) : f ? (f.value = value) : state.set(receiver, value), value; + }; + var _Foo_state, _Foo_inc; + class Foo { + constructor() { + _Foo_state.set(this, 1); + _Foo_inc.set(this, 13); + } + run() { + let n = 1000000; + while (n-- > 0) { + __classPrivateFieldSet( + this, + _Foo_state, + __classPrivateFieldGet(this, _Foo_state, "f") + __classPrivateFieldGet(this, _Foo_inc, "f"), + "f", + ); + } + return n; + } + } + (_Foo_state = new WeakMap()), (_Foo_inc = new WeakMap()); + new Foo().run(); +}); + +bench("NativePrivates", () => { + class Foo { + #state = 1; + #inc = 13; + + run() { + let n = 1000000; + while (n-- > 0) { + this.#state += this.#inc; + } + return n; + } + } + + new Foo().run(); +}); + +bench("ConventionalPrivates", () => { + class Foo { + _state = 1; + _inc = 13; + + run() { + let n = 1000000; + while (n-- > 0) { + this._state += this._inc; + } + return n; + } + } + + new Foo().run(); +}); + +await run(); |