aboutsummaryrefslogtreecommitdiff
path: root/bench/snippets/callbacks-overhead.mjs
blob: 65171145c4b7905ad62c20b1819f8a2d01b1a8bf (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
const iterations = 1_000;

export var report = {
  async: 0,
  callback: 0,
  sync: 0,
  then: 0,
};

const tests = {
  callback(n, cb) {
    if (n === iterations) return cb();
    tests.callback(1 + n, () => cb());
  },

  sync(n) {
    if (n === iterations) return;

    tests.sync(1 + n);
  },

  async async(n) {
    if (n === iterations) return;

    await tests.async(1 + n);
  },

  then(n) {
    if (n === iterations) return;
    return Promise.resolve(1 + n).then(tests.then);
  },
};

async function test(log) {
  {
    const a = performance.now();
    await tests.async(0);
    if (log)
      console.log(
        `async/await: ${(report.async = (performance.now() - a).toFixed(4))}ms`
      );
  }

  {
    const a = performance.now();
    tests.callback(0, function () {
      if (log)
        console.log(
          `callback: ${(report.callback = (performance.now() - a).toFixed(
            4
          ))}ms`
        );
    });
  }

  {
    const a = performance.now();
    await tests.then(0);
    if (log)
      console.log(
        `then: ${(report.then = (performance.now() - a).toFixed(4))}ms`
      );
  }

  {
    const a = performance.now();
    tests.sync(0);
    if (log)
      console.log(
        `sync: ${(report.sync = (performance.now() - a).toFixed(4))}ms`
      );
  }
}

let warmup = 10;
while (warmup--) await test();

await test(true);
0'>2022-06-10Update bunfig.zigGravatar Jarred Sumner 1-0/+1 2022-06-10Update jest.zigGravatar Jarred Sumner 1-6/+9 2022-06-09Update bun.d.tsGravatar Jarred Sumner 1-2/+5 2022-06-09Add typesGravatar Jarred Sumner 1-2/+32 2022-06-09`new Response(stream).arrayBuffer()` + 3 moreGravatar Jarred Sumner 16-39/+478 2022-06-09fix some memory leaks with stringsGravatar Jarred Sumner 4-28/+45 2022-06-09Support console.log(myBigInt)Gravatar Jarred Sumner 1-1/+6 2022-06-09Fix defaultProps with JSX optimizationGravatar Jarred Sumner 6-34/+73 2022-06-09small perf improvements to encodingGravatar Jarred Sumner 1-43/+37 2022-06-07Update event_loop.zigGravatar Jarred Sumner 1-1/+2 ylan/github-api-option&id=66b15a8df6257e85a69fd01327ee661c10e2b6ca&follow=1'>Update settings.jsonGravatar Jarred Sumner 1-2/+3 2023-10-06fix a couple install testsGravatar Dylan Conway 1-8/+8 2023-10-06formatGravatar Dylan Conway 1-1/+2 2023-10-06Fix memory leak in fetch() (#6350)Gravatar Jarred Sumner 1-2/+0 Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2023-10-06[types] allow onLoad plugin callbacks to return undefined (#6346)Gravatar Silver 1-1/+1 Returning undefined simply falls through to the next plugin, or to the default loader. This is defined by esbuild, and supported by Bun, but the types don't reflect it properly. 2023-10-06docs: `file.stream()` is not a promise (#6337)Gravatar Paul Nodet 1-1/+1