aboutsummaryrefslogtreecommitdiff
path: root/bench/snippets/private.mjs
blob: ca75c6e07aabe48c5653bcf9a9518d3f7de06fab (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
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();