mirror of
https://github.com/oven-sh/bun
synced 2026-02-02 15:08:46 +00:00
Add benchmark for [...set] (#26452)
### What does this PR do?
Adds benchmark for `[...set]`
### How did you verify your code works?
### Results
**Bun 1.3.6**
```
clk: ~3.77 GHz
cpu: Apple M4 Max
runtime: bun 1.3.6 (arm64-darwin)
benchmark avg (min … max) p75 p99 (min … top 1%)
------------------------------------------- -------------------------------
[...set] - integers (10) 51.70 ns/iter 51.16 ns █▄
(45.17 ns … 121.75 ns) 87.65 ns ▁▁██▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
[...set] - integers (100) 394.07 ns/iter 394.41 ns █▇▂
(378.73 ns … 443.39 ns) 437.51 ns ▂████▆▄▂▁▁▁▁▂▃▃▄▂▂▁▂▁
[...set] - strings (10) 53.86 ns/iter 53.66 ns █
(50.72 ns … 115.85 ns) 89.37 ns ▃█▆▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
[...set] - strings (100) 422.12 ns/iter 422.80 ns ▅██▄
(392.35 ns … 977.34 ns) 481.31 ns ▂▂▅████▇▃▂▁▂▃▄▄▃▃▁▁▁▁
[...set] - objects (10) 54.07 ns/iter 54.33 ns █▇
(49.83 ns … 98.49 ns) 87.07 ns ▂██▇▃▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
[...set] - objects (100) 446.81 ns/iter 441.72 ns █
(397.71 ns … 954.87 ns) 824.61 ns ▂█▃▃▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
```
**Bun 1.3.7 canary**
```
clk: ~3.82 GHz
cpu: Apple M4 Max
runtime: bun 1.3.7 (arm64-darwin)
benchmark avg (min … max) p75 p99 (min … top 1%)
------------------------------------------- -------------------------------
[...set] - integers (10) 4.71 ns/iter 4.62 ns █▄
(3.88 ns … 48.91 ns) 11.42 ns ▂██▃▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
[...set] - integers (100) 42.52 ns/iter 42.70 ns █
(35.70 ns … 88.03 ns) 74.86 ns ▃█▂██▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
[...set] - strings (10) 6.02 ns/iter 5.86 ns ▇█
(3.99 ns … 49.43 ns) 8.89 ns ▁▁▁▁▁▂██▆▃▃▂▁▁▁▁▁▁▁▁▁
[...set] - strings (100) 56.81 ns/iter 55.91 ns █
(48.70 ns … 96.89 ns) 88.48 ns ▁▁▃█▇▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
[...set] - objects (10) 6.15 ns/iter 6.10 ns █▃
(4.14 ns … 66.32 ns) 9.31 ns ▁▁▁▁▂███▆▅▃▂▁▁▁▁▁▁▁▁▁
[...set] - objects (100) 57.47 ns/iter 56.67 ns ▆█
(47.52 ns … 110.06 ns) 93.39 ns ▁▁▃██▃▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
```
**Node 24.12.0**
```
clk: ~3.30 GHz
cpu: Apple M4 Max
runtime: node 24.12.0 (arm64-darwin)
benchmark avg (min … max) p75 p99 (min … top 1%)
------------------------------------------- -------------------------------
[...set] - integers (10) 28.19 ns/iter 13.03 ns █
(10.87 ns … 9.37 µs) 129.01 ns █▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
[...set] - integers (100) 159.41 ns/iter 96.19 ns █
(80.87 ns … 8.42 µs) 1.98 µs █▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
[...set] - strings (10) 20.13 ns/iter 13.56 ns █
(10.92 ns … 3.82 µs) 105.83 ns █▅▂▁▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
[...set] - strings (100) 138.56 ns/iter 92.29 ns █
(80.63 ns … 10.17 µs) 1.09 µs █▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
[...set] - objects (10) 16.43 ns/iter 12.40 ns █
(11.07 ns … 5.99 µs) 39.03 ns ▄█▂▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
[...set] - objects (100) 108.58 ns/iter 97.82 ns █
(80.83 ns … 2.99 µs) 298.93 ns ▂█▅▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
```
**Summary**
```zig
┌────────────────┬────────────────┬───────────────┬─────────┐
│ Benchmark │ Before (1.3.6) │ After (1.3.7) │ Speedup │
├────────────────┼────────────────┼───────────────┼─────────┤
│ integers (10) │ 51.70 ns │ 4.71 ns │ 11.0x │
├────────────────┼────────────────┼───────────────┼─────────┤
│ integers (100) │ 394.07 ns │ 42.52 ns │ 9.3x │
├────────────────┼────────────────┼───────────────┼─────────┤
│ strings (10) │ 53.86 ns │ 6.02 ns │ 8.9x │
├────────────────┼────────────────┼───────────────┼─────────┤
│ strings (100) │ 422.12 ns │ 56.81 ns │ 7.4x │
├────────────────┼────────────────┼───────────────┼─────────┤
│ objects (10) │ 54.07 ns │ 6.15 ns │ 8.8x │
├────────────────┼────────────────┼───────────────┼─────────┤
│ objects (100) │ 446.81 ns │ 57.47 ns │ 7.8x │
└────────────────┴────────────────┴───────────────┴─────────┘
```
This commit is contained in:
20
bench/snippets/spread-set.mjs
Normal file
20
bench/snippets/spread-set.mjs
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
// Benchmark for [...set] optimization (WebKit#56539)
|
||||||
|
// https://github.com/WebKit/WebKit/pull/56539
|
||||||
|
import { bench, run } from "../runner.mjs";
|
||||||
|
|
||||||
|
const intSet10 = new Set([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
|
||||||
|
const intSet100 = new Set(Array.from({ length: 100 }, (_, i) => i));
|
||||||
|
const strSet10 = new Set(Array.from({ length: 10 }, (_, i) => `key-${i}`));
|
||||||
|
const strSet100 = new Set(Array.from({ length: 100 }, (_, i) => `key-${i}`));
|
||||||
|
|
||||||
|
const objSet10 = new Set(Array.from({ length: 10 }, (_, i) => ({ id: i })));
|
||||||
|
const objSet100 = new Set(Array.from({ length: 100 }, (_, i) => ({ id: i })));
|
||||||
|
|
||||||
|
bench("[...set] - integers (10)", () => [...intSet10]);
|
||||||
|
bench("[...set] - integers (100)", () => [...intSet100]);
|
||||||
|
bench("[...set] - strings (10)", () => [...strSet10]);
|
||||||
|
bench("[...set] - strings (100)", () => [...strSet100]);
|
||||||
|
bench("[...set] - objects (10)", () => [...objSet10]);
|
||||||
|
bench("[...set] - objects (100)", () => [...objSet100]);
|
||||||
|
|
||||||
|
await run();
|
||||||
Reference in New Issue
Block a user