aboutsummaryrefslogtreecommitdiff
path: root/bench/snippets/private.mjs
diff options
context:
space:
mode:
Diffstat (limited to 'bench/snippets/private.mjs')
-rw-r--r--bench/snippets/private.mjs80
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();