Skip to content

chore(test262): bump pin to aae8cf6e - #1237

Open
github-actions[bot] wants to merge 1 commit into
mainfrom
chore/test262-bump
Open

github-actions[bot] wants to merge 1 commit into
mainfrom
chore/test262-bump

Conversation

@github-actions

@github-actions github-actions Bot commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

Automated bump of the test262 SHA pin to aae8cf6eed6d6c6a203be48c1184bb194880f66b.

CI will run the conformance suite against the new SHA. The
test262 PR comment will show the per-category delta vs. the
cached main baseline. Review the delta and merge if
acceptable.

Cron: weekly, Mondays 06:00 UTC. See .github/workflows/test262-bump.yml.

@github-actions github-actions Bot added automated Pull request completely generated by automation spec compliance Mismatch against official JavaScript/TypeScript specification labels Sep 7, 2026
@vercel

vercel Bot commented Sep 7, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated
gocciascript-homepage Ignored Ignored Preview Sep 14, 2026 12:03pm UTC

Request Review

@github-actions

github-actions Bot commented Sep 8, 2026

Copy link
Copy Markdown
Contributor Author

Web Tooling Benchmark

Workload Status Goccia
acorn pass 0.02 runs/s
babel pass 0.01 runs/s
babel-minify pass 0.16 runs/s
babylon pass 0.07 runs/s
buble pass 0.09 runs/s
chai pass 0.08 runs/s
coffeescript pass 0.01 runs/s
espree pass 0.02 runs/s
esprima pass 0.05 runs/s
jshint pass 0.01 runs/s
lebab pass 0.09 runs/s
postcss pass 0.02 runs/s
prepack pass 0.11 runs/s
prettier pass 0.07 runs/s
source-map pass 0.04 runs/s
terser pass 0.19 runs/s
typescript pass 0.14 runs/s
uglify-js pass 0.05 runs/s

18 pinned Web Tooling workloads; 18 workloads produced at least one Goccia sample. Raw results from 1 sample per workload; full stdout/stderr for failures and min/max/CV stay in the web-tooling-report artifact. This lane is Goccia-only by design.

@github-actions

github-actions Bot commented Sep 8, 2026

Copy link
Copy Markdown
Contributor Author

Suite Timing

Test Runner (interpreted: 12,826 passed; bytecode: 12,826 passed)
Metric Interpreted Bytecode
Total 12826 12826
Passed 12826 ✅ 12826 ✅
Workers 4 4
Test Duration 20.06s 19.25s
Lex (cumulative) 1.87s 1.89s
Parse (cumulative) 994.4ms 1.02s
Compile (cumulative) 1.32s
Execute (cumulative) 1.35s 20.28s
Engine Total (cumulative) 4.21s 24.51s
Lex (avg/worker) 466.5ms 473.5ms
Parse (avg/worker) 248.6ms 254.8ms
Compile (avg/worker) 329.6ms
Execute (avg/worker) 337.4ms 5.07s
Engine Total (avg/worker) 1.05s 6.13s

Memory

GC rows aggregate the main thread plus all worker thread-local GCs. Test runner worker shutdown frees thread-local heaps in bulk; that shutdown reclamation is not counted as GC collections or collected objects.

Metric Interpreted Bytecode
GC Live 54.92 MiB 55.64 MiB
GC Peak Live 176.65 MiB 146.65 MiB
GC Allocated During Run 702.56 MiB 613.57 MiB
GC Limit 7.81 GiB 7.81 GiB
GC Collections 1,034 1,040
GC Collected Objects 5,507,836 4,778,846
Heap Start Allocated 371.9 KiB 371.9 KiB
Heap End Allocated 3.17 MiB 3.17 MiB
Heap Delta Allocated 2.81 MiB 2.81 MiB
Heap Delta Free 2.16 MiB 2.16 MiB
Benchmarks (interpreted: 440; bytecode: 440)
Metric Interpreted Bytecode
Total 440 440
Workers 4 4
Duration 3.17min 2.85min

Memory

GC rows aggregate the main thread plus all worker thread-local GCs. Benchmark runner performs explicit between-file collections, so collection and collected-object counts can be much higher than the test runner.

Metric Interpreted Bytecode
GC Live 85.0 KiB 85.0 KiB
GC Peak Live 335.69 MiB 315.33 MiB
GC Allocated During Run 19.37 GiB 13.07 GiB
GC Limit 7.81 GiB 7.81 GiB
GC Collections 5,192 4,934
GC Collected Objects 222,960,180 169,076,291
Heap Start Allocated 1.35 MiB 1.35 MiB
Heap End Allocated 1.35 MiB 1.35 MiB
Heap Delta Allocated 3.2 KiB 3.2 KiB
Boot
Metric Interpreted Bytecode
Boot (median) 7.6ms 7.7ms
Boot (min) 7.5ms 7.6ms

Empty-script (0;) end-to-end process wall-clock for GocciaScriptLoader, min and median over 60 runs after 10 warmups. Includes a fixed process / dynamic-loader floor that does not shrink, so it understates the engine-boot speedup; treat as practical boot time, not pure engine work.

Measured on ubuntu-latest x64.

@github-actions

github-actions Bot commented Sep 8, 2026

Copy link
Copy Markdown
Contributor Author

Benchmark Results

440 benchmarks · PR vs same-runner main build

Interpreted: 🟢 35 improved · 🔴 23 regressed · 382 unchanged · avg +0.4%
Bytecode: 🟢 49 improved · 🔴 40 regressed · 351 unchanged · avg +0.5%

Typical per-run noise (median variance): interpreted ±1.9%, bytecode ±1.7%. Deltas within noise overlap and read as unchanged.

arraybuffer.js — Interp: 🟢 2, 12 unch. · avg -0.5% · Bytecode: 14 unch. · avg -0.6%
Benchmark Interpreted (main → PR) Δ Bytecode (main → PR) Δ
create ArrayBuffer(0) 84,437 ops/sec [60,445..91,272] → 81,392 ops/sec [76,328..96,966] ~ overlap (-3.6%) 123,361 ops/sec [119,427..124,508] → 117,973 ops/sec [88,744..131,098] ~ overlap (-4.4%)
create ArrayBuffer(64) 77,913 ops/sec [67,821..90,347] → 80,479 ops/sec [76,123..82,992] ~ overlap (+3.3%) 119,536 ops/sec [116,759..120,517] → 119,209 ops/sec [118,136..119,304] ~ overlap (-0.3%)
create ArrayBuffer(1024) 75,134 ops/sec [51,695..75,308] → 76,254 ops/sec [75,790..76,629] 🟢 +1.5% 108,147 ops/sec [105,854..109,241] → 106,259 ops/sec [104,034..106,370] ~ overlap (-1.7%)
create ArrayBuffer(8192) 56,371 ops/sec [52,578..59,009] → 53,915 ops/sec [53,150..55,164] ~ overlap (-4.4%) 68,794 ops/sec [67,987..69,305] → 69,213 ops/sec [68,953..69,693] ~ overlap (+0.6%)
slice full buffer (64 bytes) 65,663 ops/sec [64,425..67,946] → 66,137 ops/sec [65,738..66,885] ~ overlap (+0.7%) 76,591 ops/sec [75,077..77,033] → 76,645 ops/sec [76,163..81,603] ~ overlap (+0.1%)
slice half buffer (512 of 1024 bytes) 61,757 ops/sec [61,093..62,888] → 59,795 ops/sec [59,322..64,912] ~ overlap (-3.2%) 72,495 ops/sec [71,421..75,946] → 71,477 ops/sec [48,458..73,457] ~ overlap (-1.4%)
slice with negative indices 59,358 ops/sec [59,072..68,761] → 60,219 ops/sec [58,073..67,288] ~ overlap (+1.5%) 73,651 ops/sec [72,834..77,870] → 74,329 ops/sec [73,349..75,578] ~ overlap (+0.9%)
slice empty range 66,654 ops/sec [64,184..69,651] → 65,382 ops/sec [64,654..67,533] ~ overlap (-1.9%) 73,118 ops/sec [72,841..73,199] → 73,030 ops/sec [71,986..78,151] ~ overlap (-0.1%)
byteLength access 182,612 ops/sec [181,358..183,538] → 178,964 ops/sec [174,984..183,030] ~ overlap (-2.0%) 233,868 ops/sec [230,874..237,932] → 232,276 ops/sec [228,437..255,135] ~ overlap (-0.7%)
Symbol.toStringTag access 178,610 ops/sec [176,376..182,002] → 183,432 ops/sec [178,170..192,510] ~ overlap (+2.7%) 233,530 ops/sec [227,967..287,463] → 227,217 ops/sec [223,090..231,330] ~ overlap (-2.7%)
ArrayBuffer.isView 133,837 ops/sec [132,574..135,064] → 137,114 ops/sec [135,311..137,860] 🟢 +2.4% 177,325 ops/sec [176,257..177,435] → 176,330 ops/sec [173,836..203,628] ~ overlap (-0.6%)
clone ArrayBuffer(64) 101,128 ops/sec [100,429..103,622] → 101,087 ops/sec [96,592..102,345] ~ overlap (-0.0%) 128,868 ops/sec [125,398..130,981] → 128,451 ops/sec [125,743..129,394] ~ overlap (-0.3%)
clone ArrayBuffer(1024) 93,257 ops/sec [90,819..105,786] → 91,225 ops/sec [90,473..92,386] ~ overlap (-2.2%) 118,754 ops/sec [111,656..123,510] → 118,073 ops/sec [113,433..124,527] ~ overlap (-0.6%)
clone ArrayBuffer inside object 63,017 ops/sec [61,249..91,831] → 62,171 ops/sec [61,745..63,483] ~ overlap (-1.3%) 72,674 ops/sec [71,773..97,945] → 74,986 ops/sec [74,719..75,150] ~ overlap (+3.2%)
arrays.js — Interp: 🟢 2, 17 unch. · avg -0.6% · Bytecode: 🟢 1, 🔴 2, 16 unch. · avg -0.1%
Benchmark Interpreted (main → PR) Δ Bytecode (main → PR) Δ
Array.from length 100 2,165 ops/sec [1,674..2,884] → 2,136 ops/sec [2,117..2,794] ~ overlap (-1.4%) 2,026 ops/sec [1,876..2,303] → 2,033 ops/sec [2,014..2,266] ~ overlap (+0.3%)
Array.from 10 elements 13,295 ops/sec [11,131..13,346] → 13,593 ops/sec [13,376..16,647] 🟢 +2.2% 14,406 ops/sec [13,907..14,838] → 14,137 ops/sec [12,951..15,780] ~ overlap (-1.9%)
Array.of 10 elements 43,771 ops/sec [42,131..44,996] → 42,293 ops/sec [41,293..43,774] ~ overlap (-3.4%) 49,633 ops/sec [49,546..49,830] → 47,507 ops/sec [47,244..56,327] ~ overlap (-4.3%)
spread into new array 66,256 ops/sec [64,828..66,974] → 66,724 ops/sec [65,721..73,083] ~ overlap (+0.7%) 40,696 ops/sec [40,126..41,904] → 41,574 ops/sec [40,857..42,760] ~ overlap (+2.2%)
map over 50 elements 3,717 ops/sec [3,586..3,781] → 3,717 ops/sec [3,693..3,721] ~ overlap (+0.0%) 4,270 ops/sec [4,249..4,274] → 4,217 ops/sec [4,182..4,249] ~ overlap (-1.2%)
filter over 50 elements 3,987 ops/sec [3,754..4,524] → 3,906 ops/sec [3,883..3,931] ~ overlap (-2.0%) 4,663 ops/sec [4,300..5,167] → 4,686 ops/sec [4,552..5,231] ~ overlap (+0.5%)
reduce sum 50 elements 4,642 ops/sec [4,582..4,672] → 4,691 ops/sec [4,550..4,806] ~ overlap (+1.1%) 5,128 ops/sec [4,965..5,250] → 5,007 ops/sec [4,942..5,114] ~ overlap (-2.4%)
forEach over 50 elements 3,301 ops/sec [3,223..3,309] → 3,432 ops/sec [3,289..3,550] ~ overlap (+3.9%) 5,387 ops/sec [5,341..5,410] → 5,463 ops/sec [5,417..5,594] 🟢 +1.4%
find in 50 elements 6,330 ops/sec [6,085..6,908] → 6,289 ops/sec [6,143..6,391] ~ overlap (-0.7%) 6,898 ops/sec [6,785..6,930] → 6,854 ops/sec [6,701..6,892] ~ overlap (-0.6%)
sort 20 elements 3,397 ops/sec [3,388..3,417] → 3,488 ops/sec [3,468..4,379] 🟢 +2.7% 4,120 ops/sec [4,106..4,123] → 4,021 ops/sec [3,835..4,029] 🔴 -2.4%
flat nested array 24,745 ops/sec [24,498..24,826] → 24,577 ops/sec [24,040..25,830] ~ overlap (-0.7%) 28,607 ops/sec [28,356..28,665] → 28,409 ops/sec [27,764..28,853] ~ overlap (-0.7%)
flatMap 14,965 ops/sec [14,864..15,104] → 14,876 ops/sec [14,466..14,910] ~ overlap (-0.6%) 17,101 ops/sec [16,954..17,163] → 17,196 ops/sec [16,990..17,266] ~ overlap (+0.6%)
map inside map (5x5) 4,378 ops/sec [4,335..4,439] → 4,318 ops/sec [4,214..6,038] ~ overlap (-1.4%) 4,885 ops/sec [4,851..4,924] → 4,749 ops/sec [4,602..4,902] ~ overlap (-2.8%)
filter inside map (5x10) 2,916 ops/sec [2,900..2,935] → 2,900 ops/sec [2,871..2,952] ~ overlap (-0.5%) 3,432 ops/sec [3,353..3,461] → 3,317 ops/sec [3,298..3,351] 🔴 -3.3%
reduce inside map (5x10) 3,716 ops/sec [3,590..5,568] → 3,563 ops/sec [3,506..3,637] ~ overlap (-4.1%) 3,964 ops/sec [3,896..5,049] → 4,000 ops/sec [3,989..4,004] ~ overlap (+0.9%)
forEach inside forEach (5x10) 2,846 ops/sec [2,739..3,165] → 2,747 ops/sec [2,508..3,089] ~ overlap (-3.5%) 4,490 ops/sec [4,401..4,524] → 4,514 ops/sec [4,390..4,535] ~ overlap (+0.5%)
find inside some (10x10) 2,777 ops/sec [2,720..3,150] → 2,734 ops/sec [2,677..3,409] ~ overlap (-1.5%) 3,021 ops/sec [2,938..3,208] → 3,142 ops/sec [3,075..3,714] ~ overlap (+4.0%)
map+filter chain nested (5x20) 887 ops/sec [866..1,302] → 855 ops/sec [814..892] ~ overlap (-3.6%) 1,013 ops/sec [981..1,107] → 1,001 ops/sec [995..1,024] ~ overlap (-1.2%)
reduce flatten (10x5) 6,381 ops/sec [6,347..8,454] → 6,447 ops/sec [6,293..6,614] ~ overlap (+1.0%) 2,785 ops/sec [2,707..2,820] → 3,022 ops/sec [2,604..3,156] ~ overlap (+8.5%)
async-await.js — Interp: 6 unch. · avg -0.5% · Bytecode: 🔴 1, 5 unch. · avg +0.6%
Benchmark Interpreted (main → PR) Δ Bytecode (main → PR) Δ
single await 19,023 ops/sec [17,683..20,824] → 18,904 ops/sec [17,649..23,528] ~ overlap (-0.6%) 22,263 ops/sec [18,839..24,811] → 21,744 ops/sec [16,986..22,893] ~ overlap (-2.3%)
multiple awaits 7,253 ops/sec [5,588..7,879] → 7,367 ops/sec [7,314..7,596] ~ overlap (+1.6%) 7,980 ops/sec [7,735..8,438] → 8,287 ops/sec [7,795..8,900] ~ overlap (+3.9%)
await non-Promise value 27,003 ops/sec [25,519..28,771] → 26,478 ops/sec [25,225..29,391] ~ overlap (-1.9%) 32,044 ops/sec [31,533..33,035] → 34,575 ops/sec [32,917..36,704] ~ overlap (+7.9%)
await with try/catch 17,182 ops/sec [16,096..18,964] → 17,058 ops/sec [16,757..18,839] ~ overlap (-0.7%) 22,505 ops/sec [21,977..22,668] → 22,683 ops/sec [21,953..25,935] ~ overlap (+0.8%)
await Promise.all 4,463 ops/sec [4,029..4,735] → 4,378 ops/sec [4,338..5,114] ~ overlap (-1.9%) 4,337 ops/sec [4,107..4,739] → 4,828 ops/sec [4,665..4,931] ~ overlap (+11.3%)
nested async function call 10,769 ops/sec [10,498..10,855] → 10,813 ops/sec [10,632..10,997] ~ overlap (+0.4%) 13,619 ops/sec [13,425..13,869] → 11,197 ops/sec [11,081..12,222] 🔴 -17.8%
async-generators.js — Interp: 2 unch. · avg +4.4% · Bytecode: 2 unch. · avg -1.0%
Benchmark Interpreted (main → PR) Δ Bytecode (main → PR) Δ
for-await-of over async generator 1,224 ops/sec [1,125..1,366] → 1,287 ops/sec [1,229..1,337] ~ overlap (+5.2%) 554 ops/sec [523..589] → 552 ops/sec [505..554] ~ overlap (-0.3%)
async generator with await in body 4,828 ops/sec [2,843..4,890] → 5,000 ops/sec [4,844..6,197] ~ overlap (+3.6%) 4,134 ops/sec [4,046..4,218] → 4,068 ops/sec [3,555..4,781] ~ overlap (-1.6%)
atomics.js — Interp: 6 unch. · avg +1.7% · Bytecode: 🔴 3, 3 unch. · avg -2.7%
Benchmark Interpreted (main → PR) Δ Bytecode (main → PR) Δ
load and store Int32Array 67,848 ops/sec [51,301..67,981] → 68,702 ops/sec [67,095..74,357] ~ overlap (+1.3%) 94,817 ops/sec [94,599..95,566] → 89,624 ops/sec [88,788..93,235] 🔴 -5.5%
read-modify-write Int32Array 49,571 ops/sec [49,127..62,207] → 50,996 ops/sec [49,606..51,345] ~ overlap (+2.9%) 64,687 ops/sec [63,940..67,209] → 62,228 ops/sec [60,865..63,022] 🔴 -3.8%
compareExchange hit and miss 45,910 ops/sec [44,761..48,290] → 47,043 ops/sec [45,885..50,599] ~ overlap (+2.5%) 61,014 ops/sec [58,318..61,694] → 58,382 ops/sec [57,892..62,581] ~ overlap (-4.3%)
wait with zero timeout 108,583 ops/sec [108,150..112,712] → 110,271 ops/sec [107,388..137,527] ~ overlap (+1.6%) 157,252 ops/sec [156,856..158,558] → 153,943 ops/sec [129,387..156,393] 🔴 -2.1%
waitAsync synchronous not-equal 77,395 ops/sec [75,386..79,000] → 77,832 ops/sec [76,492..79,407] ~ overlap (+0.6%) 100,221 ops/sec [98,397..100,586] → 99,631 ops/sec [98,525..100,782] ~ overlap (-0.6%)
notify with no waiters 110,852 ops/sec [109,561..112,083] → 112,653 ops/sec [112,030..113,512] ~ overlap (+1.6%) 154,122 ops/sec [152,793..154,456] → 154,242 ops/sec [153,533..168,077] ~ overlap (+0.1%)
base64.js — Interp: 10 unch. · avg +1.0% · Bytecode: 🟢 1, 9 unch. · avg +2.3%
Benchmark Interpreted (main → PR) Δ Bytecode (main → PR) Δ
short ASCII (13 chars) 1,866 ops/sec [1,818..2,005] → 1,910 ops/sec [1,897..1,918] ~ overlap (+2.3%) 1,908 ops/sec [1,899..2,207] → 1,921 ops/sec [1,907..1,924] ~ overlap (+0.6%)
medium ASCII (450 chars) 68 ops/sec [66..73] → 69 ops/sec [68..72] ~ overlap (+0.6%) 69 ops/sec [68..78] → 69 ops/sec [69..71] ~ overlap (+0.7%)
Latin-1 characters 2,771 ops/sec [2,741..2,782] → 2,740 ops/sec [2,687..2,784] ~ overlap (-1.1%) 2,706 ops/sec [2,675..2,740] → 2,745 ops/sec [2,737..2,766] ~ overlap (+1.4%)
short base64 (20 chars) 1,414 ops/sec [1,362..1,473] → 1,407 ops/sec [1,355..1,675] ~ overlap (-0.5%) 1,353 ops/sec [1,334..1,396] → 1,407 ops/sec [1,403..1,421] 🟢 +4.0%
medium base64 (600 chars) 55 ops/sec [54..55] → 55 ops/sec [53..55] ~ overlap (-0.6%) 54 ops/sec [52..54] → 54 ops/sec [53..54] ~ overlap (+0.1%)
Latin-1 output 1,991 ops/sec [1,943..2,171] → 2,006 ops/sec [1,959..2,133] ~ overlap (+0.7%) 1,950 ops/sec [1,843..2,064] → 1,980 ops/sec [1,973..1,981] ~ overlap (+1.5%)
forgiving (no padding) 2,906 ops/sec [2,859..2,990] → 2,939 ops/sec [2,906..3,218] ~ overlap (+1.1%) 2,876 ops/sec [2,778..2,974] → 2,941 ops/sec [2,875..3,045] ~ overlap (+2.3%)
with whitespace 1,344 ops/sec [1,343..1,362] → 1,465 ops/sec [1,359..1,578] ~ overlap (+9.0%) 1,343 ops/sec [1,326..1,366] → 1,327 ops/sec [1,317..1,339] ~ overlap (-1.2%)
atob(btoa(short)) 818 ops/sec [799..824] → 822 ops/sec [803..831] ~ overlap (+0.4%) 794 ops/sec [791..803] → 794 ops/sec [792..810] ~ overlap (+0.0%)
atob(btoa(medium)) 31 ops/sec [29..32] → 31 ops/sec [29..33] ~ overlap (-1.5%) 30 ops/sec [30..31] → 34 ops/sec [30..36] ~ overlap (+13.2%)
classes.js — Interp: 🟢 1, 🔴 2, 28 unch. · avg -0.6% · Bytecode: 🟢 4, 🔴 1, 26 unch. · avg -0.1%
Benchmark Interpreted (main → PR) Δ Bytecode (main → PR) Δ
simple class new 29,848 ops/sec [28,373..30,485] → 29,851 ops/sec [29,711..30,043] ~ overlap (+0.0%) 47,324 ops/sec [46,529..47,462] → 47,771 ops/sec [47,052..49,572] ~ overlap (+0.9%)
class with defaults 26,637 ops/sec [23,604..27,217] → 24,125 ops/sec [23,566..26,888] ~ overlap (-9.4%) 35,180 ops/sec [34,647..37,404] → 35,360 ops/sec [34,830..41,084] ~ overlap (+0.5%)
50 instances via Array.from 1,044 ops/sec [1,036..1,053] → 1,049 ops/sec [1,009..1,061] ~ overlap (+0.5%) 1,302 ops/sec [1,273..1,319] → 1,355 ops/sec [1,351..1,359] 🟢 +4.1%
instance method call 15,458 ops/sec [14,359..17,069] → 14,546 ops/sec [14,051..15,858] ~ overlap (-5.9%) 27,299 ops/sec [26,681..28,017] → 28,395 ops/sec [28,268..28,559] 🟢 +4.0%
static method call 24,862 ops/sec [24,136..27,262] → 24,652 ops/sec [24,255..27,430] ~ overlap (-0.8%) 56,815 ops/sec [53,934..58,293] → 60,138 ops/sec [55,671..63,258] ~ overlap (+5.8%)
single-level inheritance 12,585 ops/sec [11,705..13,337] → 12,308 ops/sec [11,988..15,940] ~ overlap (-2.2%) 18,443 ops/sec [17,737..19,930] → 18,248 ops/sec [17,767..21,478] ~ overlap (-1.1%)
two-level inheritance 10,844 ops/sec [10,572..11,180] → 10,680 ops/sec [10,614..12,658] ~ overlap (-1.5%) 14,567 ops/sec [14,000..14,982] → 14,452 ops/sec [14,197..14,537] ~ overlap (-0.8%)
private field access 15,667 ops/sec [15,253..20,457] → 15,450 ops/sec [15,435..15,652] ~ overlap (-1.4%) 11,641 ops/sec [11,531..12,255] → 11,393 ops/sec [11,275..11,913] ~ overlap (-2.1%)
private methods 17,078 ops/sec [16,667..17,458] → 17,051 ops/sec [16,813..17,182] ~ overlap (-0.2%) 12,395 ops/sec [12,279..12,440] → 12,138 ops/sec [11,891..12,974] ~ overlap (-2.1%)
getter/setter access 16,891 ops/sec [16,468..17,971] → 16,568 ops/sec [16,175..16,723] ~ overlap (-1.9%) 26,916 ops/sec [26,780..27,221] → 27,715 ops/sec [27,633..40,547] 🟢 +3.0%
class decorator (identity) 24,455 ops/sec [23,909..25,170] → 24,259 ops/sec [23,966..24,431] ~ overlap (-0.8%) 32,284 ops/sec [29,853..32,751] → 30,349 ops/sec [29,968..34,552] ~ overlap (-6.0%)
class decorator (wrapping) 14,032 ops/sec [13,863..15,146] → 14,005 ops/sec [13,719..15,664] ~ overlap (-0.2%) 15,575 ops/sec [15,238..16,180] → 15,770 ops/sec [15,492..19,222] ~ overlap (+1.3%)
identity method decorator 17,806 ops/sec [17,548..19,770] → 17,738 ops/sec [16,686..22,110] ~ overlap (-0.4%) 23,757 ops/sec [23,596..24,014] → 24,773 ops/sec [24,444..28,330] 🟢 +4.3%
wrapping method decorator 14,714 ops/sec [13,937..15,611] → 14,501 ops/sec [14,361..15,150] ~ overlap (-1.4%) 17,581 ops/sec [17,425..19,694] → 18,846 ops/sec [18,273..19,080] ~ overlap (+7.2%)
stacked method decorators (x3) 10,523 ops/sec [9,970..11,894] → 10,580 ops/sec [10,403..12,303] ~ overlap (+0.5%) 12,821 ops/sec [12,642..12,947] → 12,831 ops/sec [12,634..13,287] ~ overlap (+0.1%)
identity field decorator 20,485 ops/sec [20,284..26,427] → 20,042 ops/sec [19,838..20,138] 🔴 -2.2% 22,854 ops/sec [22,722..23,868] → 23,554 ops/sec [23,257..31,821] ~ overlap (+3.1%)
field initializer decorator 17,151 ops/sec [17,062..17,400] → 17,327 ops/sec [16,935..19,351] ~ overlap (+1.0%) 21,062 ops/sec [20,187..21,674] → 20,150 ops/sec [20,064..20,245] ~ overlap (-4.3%)
getter decorator (identity) 15,816 ops/sec [15,116..20,213] → 15,984 ops/sec [15,639..19,182] ~ overlap (+1.1%) 15,031 ops/sec [14,647..15,289] → 15,401 ops/sec [15,129..15,589] ~ overlap (+2.5%)
setter decorator (identity) 12,914 ops/sec [12,715..14,665] → 13,352 ops/sec [13,294..13,389] ~ overlap (+3.4%) 13,135 ops/sec [11,947..15,207] → 12,432 ops/sec [11,875..18,137] ~ overlap (-5.3%)
static method decorator 19,877 ops/sec [19,451..21,059] → 19,541 ops/sec [19,499..19,656] ~ overlap (-1.7%) 28,014 ops/sec [27,610..28,589] → 28,073 ops/sec [27,474..28,233] ~ overlap (+0.2%)
static field decorator 26,282 ops/sec [23,573..28,304] → 22,808 ops/sec [22,613..23,222] 🔴 -13.2% 31,098 ops/sec [29,691..36,391] → 31,228 ops/sec [28,513..32,276] ~ overlap (+0.4%)
private method decorator 13,541 ops/sec [13,462..13,734] → 13,881 ops/sec [13,750..14,060] 🟢 +2.5% 16,889 ops/sec [16,759..19,645] → 16,393 ops/sec [16,162..16,564] 🔴 -2.9%
private field decorator 15,543 ops/sec [15,374..15,923] → 15,403 ops/sec [15,270..15,679] ~ overlap (-0.9%) 15,055 ops/sec [14,725..15,558] → 14,993 ops/sec [14,483..15,161] ~ overlap (-0.4%)
plain auto-accessor (no decorator) 25,672 ops/sec [25,347..25,688] → 26,864 ops/sec [25,683..27,298] ~ overlap (+4.6%) 33,364 ops/sec [31,133..35,206] → 31,616 ops/sec [30,877..31,754] ~ overlap (-5.2%)
auto-accessor with decorator 15,900 ops/sec [15,531..16,675] → 16,654 ops/sec [16,080..17,170] ~ overlap (+4.7%) 17,059 ops/sec [16,555..17,494] → 17,318 ops/sec [16,325..19,800] ~ overlap (+1.5%)
decorator writing metadata 13,363 ops/sec [13,014..13,618] → 13,653 ops/sec [12,677..15,293] ~ overlap (+2.2%) 17,865 ops/sec [17,208..19,457] → 17,983 ops/sec [17,288..20,290] ~ overlap (+0.7%)
static getter read 28,560 ops/sec [27,113..31,551] → 29,265 ops/sec [28,277..29,429] ~ overlap (+2.5%) 49,908 ops/sec [49,594..50,356] → 51,346 ops/sec [50,116..54,603] ~ overlap (+2.9%)
static getter/setter pair 21,850 ops/sec [21,208..21,867] → 21,254 ops/sec [20,848..21,859] ~ overlap (-2.7%) 39,909 ops/sec [36,127..44,411] → 37,904 ops/sec [36,280..56,690] ~ overlap (-5.0%)
inherited static getter 18,127 ops/sec [17,602..26,578] → 18,107 ops/sec [17,446..18,373] ~ overlap (-0.1%) 31,564 ops/sec [29,985..36,169] → 30,750 ops/sec [30,173..33,822] ~ overlap (-2.6%)
inherited static setter 19,800 ops/sec [19,318..20,274] → 20,380 ops/sec [19,868..23,230] ~ overlap (+2.9%) 32,841 ops/sec [28,897..34,778] → 30,855 ops/sec [30,490..31,310] ~ overlap (-6.0%)
inherited static getter with this binding 15,175 ops/sec [14,940..17,152] → 15,401 ops/sec [15,218..17,353] ~ overlap (+1.5%) 25,679 ops/sec [25,266..25,777] → 25,646 ops/sec [24,948..26,664] ~ overlap (-0.1%)
closures.js — Interp: 🔴 1, 10 unch. · avg -1.4% · Bytecode: 11 unch. · avg -0.1%
Benchmark Interpreted (main → PR) Δ Bytecode (main → PR) Δ
closure over single variable 24,579 ops/sec [24,035..26,061] → 23,483 ops/sec [23,447..24,014] 🔴 -4.5% 103,391 ops/sec [103,005..103,935] → 103,398 ops/sec [98,329..107,466] ~ overlap (+0.0%)
closure over multiple variables 28,654 ops/sec [28,074..28,732] → 28,244 ops/sec [27,524..28,840] ~ overlap (-1.4%) 102,441 ops/sec [100,898..104,515] → 105,276 ops/sec [101,405..110,333] ~ overlap (+2.8%)
nested closures 31,144 ops/sec [30,790..31,817] → 31,025 ops/sec [30,802..31,829] ~ overlap (-0.4%) 90,808 ops/sec [89,321..92,689] → 91,114 ops/sec [90,933..105,931] ~ overlap (+0.3%)
function as argument 24,064 ops/sec [22,184..27,639] → 22,318 ops/sec [22,108..22,648] ~ overlap (-7.3%) 101,994 ops/sec [98,863..122,356] → 102,476 ops/sec [101,673..104,523] ~ overlap (+0.5%)
function returning function 27,921 ops/sec [27,856..28,541] → 27,899 ops/sec [27,468..28,833] ~ overlap (-0.1%) 109,827 ops/sec [107,501..117,442] → 108,114 ops/sec [105,723..111,863] ~ overlap (-1.6%)
compose two functions 20,336 ops/sec [17,643..21,849] → 18,253 ops/sec [18,105..18,910] ~ overlap (-10.2%) 66,308 ops/sec [65,843..68,772] → 66,087 ops/sec [65,525..72,578] ~ overlap (-0.3%)
fn.call 36,332 ops/sec [35,222..41,100] → 35,280 ops/sec [34,691..36,070] ~ overlap (-2.9%) 95,209 ops/sec [92,465..127,221] → 93,872 ops/sec [91,661..98,262] ~ overlap (-1.4%)
fn.apply 31,178 ops/sec [30,712..31,529] → 32,159 ops/sec [30,547..34,390] ~ overlap (+3.1%) 79,461 ops/sec [74,268..107,671] → 78,688 ops/sec [74,013..101,722] ~ overlap (-1.0%)
fn.bind 31,743 ops/sec [30,413..49,595] → 31,789 ops/sec [31,526..31,864] ~ overlap (+0.1%) 94,510 ops/sec [93,482..100,315] → 94,562 ops/sec [92,545..124,233] ~ overlap (+0.1%)
recursive sum to 50 2,759 ops/sec [2,718..3,700] → 3,062 ops/sec [2,725..3,303] ~ overlap (+11.0%) 51,180 ops/sec [50,501..51,662] → 51,596 ops/sec [51,129..52,198] ~ overlap (+0.8%)
recursive tree traversal 4,818 ops/sec [4,565..5,290] → 4,671 ops/sec [4,533..4,722] ~ overlap (-3.0%) 14,631 ops/sec [14,510..14,809] → 14,364 ops/sec [13,974..15,913] ~ overlap (-1.8%)
collections.js — Interp: 12 unch. · avg +1.2% · Bytecode: 🟢 1, 11 unch. · avg +1.1%
Benchmark Interpreted (main → PR) Δ Bytecode (main → PR) Δ
add 50 elements 2,503 ops/sec [2,460..2,652] → 2,613 ops/sec [2,581..2,627] ~ overlap (+4.4%) 2,790 ops/sec [2,766..3,324] → 2,831 ops/sec [2,779..2,914] ~ overlap (+1.5%)
has lookup (50 elements) 45,531 ops/sec [45,334..45,948] → 45,973 ops/sec [45,215..46,359] ~ overlap (+1.0%) 71,772 ops/sec [64,082..77,233] → 63,860 ops/sec [62,243..64,996] ~ overlap (-11.0%)
delete elements 12,447 ops/sec [12,387..13,920] → 12,616 ops/sec [12,518..12,648] ~ overlap (+1.4%) 14,145 ops/sec [13,924..14,377] → 14,306 ops/sec [14,242..14,407] ~ overlap (+1.1%)
forEach iteration 3,500 ops/sec [3,389..4,044] → 3,452 ops/sec [3,419..3,481] ~ overlap (-1.4%) 5,972 ops/sec [5,943..5,997] → 6,063 ops/sec [5,886..7,984] ~ overlap (+1.5%)
spread to array 10,131 ops/sec [9,661..14,555] → 10,238 ops/sec [10,025..10,352] ~ overlap (+1.1%) 49,898 ops/sec [49,386..50,920] → 51,205 ops/sec [49,049..55,111] ~ overlap (+2.6%)
deduplicate array 9,240 ops/sec [9,088..10,301] → 9,530 ops/sec [9,472..9,616] ~ overlap (+3.1%) 14,130 ops/sec [13,728..15,023] → 14,183 ops/sec [13,571..16,788] ~ overlap (+0.4%)
set 50 entries 1,911 ops/sec [1,878..2,143] → 1,888 ops/sec [1,884..1,913] ~ overlap (-1.2%) 2,210 ops/sec [2,176..2,293] → 2,293 ops/sec [2,247..2,331] ~ overlap (+3.8%)
get lookup (50 entries) 45,096 ops/sec [43,625..45,275] → 44,606 ops/sec [44,247..44,878] ~ overlap (-1.1%) 67,763 ops/sec [66,311..68,952] → 69,408 ops/sec [67,669..84,531] ~ overlap (+2.4%)
has check 56,438 ops/sec [55,610..57,538] → 57,929 ops/sec [57,063..65,081] ~ overlap (+2.6%) 86,236 ops/sec [84,939..91,030] → 92,977 ops/sec [87,705..109,553] ~ overlap (+7.8%)
delete entries 11,647 ops/sec [11,550..11,711] → 11,905 ops/sec [11,473..11,912] ~ overlap (+2.2%) 13,158 ops/sec [12,719..13,463] → 13,240 ops/sec [12,928..14,121] ~ overlap (+0.6%)
forEach iteration 3,375 ops/sec [3,358..3,399] → 3,426 ops/sec [3,399..3,473] ~ overlap (+1.5%) 6,033 ops/sec [5,966..7,027] → 6,022 ops/sec [5,975..6,180] ~ overlap (-0.2%)
keys/values/entries 2,834 ops/sec [2,819..2,850] → 2,841 ops/sec [2,797..3,241] ~ overlap (+0.2%) 8,578 ops/sec [8,503..8,637] → 8,827 ops/sec [8,663..9,286] 🟢 +2.9%
csv.js — Interp: 🟢 1, 12 unch. · avg +1.0% · Bytecode: 🔴 1, 12 unch. · avg -0.9%
Benchmark Interpreted (main → PR) Δ Bytecode (main → PR) Δ
parse simple 3-column CSV 33,296 ops/sec [32,569..36,493] → 34,511 ops/sec [32,566..49,580] ~ overlap (+3.7%) 36,303 ops/sec [36,070..36,733] → 36,367 ops/sec [36,067..36,813] ~ overlap (+0.2%)
parse 10-row CSV 9,666 ops/sec [9,291..9,811] → 10,018 ops/sec [9,662..10,511] ~ overlap (+3.6%) 9,900 ops/sec [9,759..10,485] → 9,915 ops/sec [9,487..10,910] ~ overlap (+0.2%)
parse 100-row CSV 1,533 ops/sec [1,481..1,760] → 1,484 ops/sec [1,449..1,514] ~ overlap (-3.2%) 1,591 ops/sec [1,504..1,847] → 1,525 ops/sec [1,511..1,545] ~ overlap (-4.1%)
parse CSV with quoted fields 51,483 ops/sec [49,546..64,839] → 51,478 ops/sec [50,428..56,767] ~ overlap (-0.0%) 59,948 ops/sec [57,991..60,373] → 61,143 ops/sec [59,008..64,618] ~ overlap (+2.0%)
parse without headers (array of arrays) 4,177 ops/sec [3,618..4,601] → 4,283 ops/sec [4,166..6,956] ~ overlap (+2.5%) 4,424 ops/sec [4,406..4,459] → 4,297 ops/sec [4,260..4,326] 🔴 -2.9%
parse with semicolon delimiter 7,013 ops/sec [6,805..7,171] → 6,948 ops/sec [6,760..8,482] ~ overlap (-0.9%) 7,330 ops/sec [7,262..7,449] → 7,227 ops/sec [7,083..7,408] ~ overlap (-1.4%)
stringify array of objects 38,830 ops/sec [38,217..40,160] → 38,963 ops/sec [38,166..39,337] ~ overlap (+0.3%) 51,378 ops/sec [48,262..54,404] → 48,923 ops/sec [47,483..50,019] ~ overlap (-4.8%)
stringify array of arrays 17,343 ops/sec [16,698..19,186] → 17,193 ops/sec [16,878..19,791] ~ overlap (-0.9%) 17,915 ops/sec [17,483..18,290] → 17,943 ops/sec [17,246..18,757] ~ overlap (+0.2%)
stringify with values needing escaping 25,342 ops/sec [21,812..26,553] → 26,386 ops/sec [22,175..27,152] ~ overlap (+4.1%) 24,907 ops/sec [24,697..25,846] → 24,778 ops/sec [24,168..25,210] ~ overlap (-0.5%)
reviver converts numbers 503 ops/sec [499..659] → 502 ops/sec [495..508] ~ overlap (-0.3%) 574 ops/sec [554..587] → 584 ops/sec [580..597] ~ overlap (+1.8%)
reviver filters empty to null 6,316 ops/sec [6,146..6,459] → 6,194 ops/sec [6,131..6,214] ~ overlap (-1.9%) 9,176 ops/sec [9,009..9,236] → 9,229 ops/sec [9,190..9,276] ~ overlap (+0.6%)
parse then stringify 5,715 ops/sec [5,646..5,839] → 5,792 ops/sec [5,702..6,281] ~ overlap (+1.4%) 6,294 ops/sec [6,017..6,481] → 6,277 ops/sec [6,246..6,329] ~ overlap (-0.3%)
stringify then parse 5,715 ops/sec [5,597..5,736] → 5,987 ops/sec [5,779..6,496] 🟢 +4.8% 6,303 ops/sec [5,966..7,569] → 6,148 ops/sec [6,137..6,252] ~ overlap (-2.4%)
destructuring.js — Interp: 22 unch. · avg +0.9% · Bytecode: 🟢 2, 🔴 2, 18 unch. · avg -1.6%
Benchmark Interpreted (main → PR) Δ Bytecode (main → PR) Δ
simple array destructuring 48,493 ops/sec [47,435..50,153] → 49,334 ops/sec [48,156..50,467] ~ overlap (+1.7%) 72,373 ops/sec [71,705..72,893] → 73,706 ops/sec [72,225..76,619] ~ overlap (+1.8%)
with rest element 41,785 ops/sec [40,705..42,053] → 41,844 ops/sec [40,623..42,317] ~ overlap (+0.1%) 55,192 ops/sec [54,822..55,647] → 55,214 ops/sec [53,714..56,436] ~ overlap (+0.0%)
with defaults 50,253 ops/sec [49,372..52,163] → 53,816 ops/sec [51,837..63,498] ~ overlap (+7.1%) 78,616 ops/sec [78,346..78,924] → 76,202 ops/sec [75,934..78,713] ~ overlap (-3.1%)
skip elements 56,048 ops/sec [55,276..59,833] → 57,930 ops/sec [56,892..58,521] ~ overlap (+3.4%) 79,713 ops/sec [79,243..80,279] → 78,638 ops/sec [75,609..106,189] ~ overlap (-1.3%)
nested array destructuring 23,521 ops/sec [22,821..27,467] → 23,906 ops/sec [23,319..26,502] ~ overlap (+1.6%) 27,809 ops/sec [27,304..28,156] → 27,686 ops/sec [26,825..27,968] ~ overlap (-0.4%)
swap variables 68,542 ops/sec [65,794..78,104] → 68,526 ops/sec [67,748..69,517] ~ overlap (-0.0%) 119,139 ops/sec [117,514..121,826] → 123,217 ops/sec [123,059..123,611] 🟢 +3.4%
simple object destructuring 62,016 ops/sec [60,470..62,714] → 62,158 ops/sec [61,873..62,624] ~ overlap (+0.2%) 126,008 ops/sec [105,016..149,049] → 106,561 ops/sec [106,062..108,520] ~ overlap (-15.4%)
with defaults 67,164 ops/sec [64,100..67,678] → 66,366 ops/sec [65,340..69,119] ~ overlap (-1.2%) 135,934 ops/sec [134,421..136,586] → 136,588 ops/sec [135,246..143,922] ~ overlap (+0.5%)
with renaming 67,128 ops/sec [65,562..67,705] → 67,697 ops/sec [63,760..68,795] ~ overlap (+0.8%) 120,973 ops/sec [119,286..121,935] → 119,770 ops/sec [118,619..129,233] ~ overlap (-1.0%)
nested object destructuring 39,427 ops/sec [38,018..40,019] → 38,774 ops/sec [38,485..39,297] ~ overlap (-1.7%) 61,948 ops/sec [54,977..66,734] → 59,917 ops/sec [58,477..63,353] ~ overlap (-3.3%)
rest properties 35,741 ops/sec [33,540..37,869] → 33,698 ops/sec [32,716..33,990] ~ overlap (-5.7%) 43,869 ops/sec [43,444..50,560] → 45,783 ops/sec [43,810..46,882] ~ overlap (+4.4%)
object parameter 20,854 ops/sec [20,531..20,907] → 20,866 ops/sec [20,603..20,986] ~ overlap (+0.1%) 49,624 ops/sec [47,831..50,300] → 48,659 ops/sec [47,442..56,040] ~ overlap (-1.9%)
array parameter 24,934 ops/sec [24,417..25,163] → 24,293 ops/sec [22,942..26,891] ~ overlap (-2.6%) 41,287 ops/sec [39,885..50,902] → 40,873 ops/sec [39,827..40,996] ~ overlap (-1.0%)
mixed destructuring in map 5,856 ops/sec [5,760..6,010] → 5,903 ops/sec [5,846..5,954] ~ overlap (+0.8%) 9,318 ops/sec [9,169..9,662] → 9,303 ops/sec [9,073..9,555] ~ overlap (-0.2%)
forEach with array destructuring 11,055 ops/sec [10,954..11,078] → 11,204 ops/sec [10,734..11,242] ~ overlap (+1.4%) 14,021 ops/sec [13,740..14,684] → 14,273 ops/sec [14,190..14,332] ~ overlap (+1.8%)
map with array destructuring 11,409 ops/sec [11,338..13,104] → 11,508 ops/sec [11,457..11,674] ~ overlap (+0.9%) 12,343 ops/sec [12,250..12,710] → 12,050 ops/sec [11,889..12,426] ~ overlap (-2.4%)
filter with array destructuring 11,848 ops/sec [11,784..11,881] → 11,872 ops/sec [11,702..12,108] ~ overlap (+0.2%) 12,980 ops/sec [12,816..13,028] → 14,051 ops/sec [13,297..15,859] 🟢 +8.3%
reduce with array destructuring 13,520 ops/sec [13,447..13,668] → 13,966 ops/sec [13,154..15,722] ~ overlap (+3.3%) 15,121 ops/sec [14,110..16,645] → 14,431 ops/sec [14,319..14,520] ~ overlap (-4.6%)
map with object destructuring 12,983 ops/sec [12,925..13,084] → 13,631 ops/sec [12,718..14,542] ~ overlap (+5.0%) 17,485 ops/sec [16,829..20,601] → 16,597 ops/sec [16,411..16,749] 🔴 -5.1%
map with nested destructuring 10,698 ops/sec [10,614..10,741] → 10,805 ops/sec [10,622..10,898] ~ overlap (+1.0%) 17,550 ops/sec [16,801..19,157] → 17,162 ops/sec [16,261..20,591] ~ overlap (-2.2%)
map with rest in destructuring 6,390 ops/sec [6,317..6,424] → 6,566 ops/sec [6,296..9,723] ~ overlap (+2.8%) 6,837 ops/sec [6,686..6,881] → 6,531 ops/sec [6,337..7,076] ~ overlap (-4.5%)
map with defaults in destructuring 7,784 ops/sec [7,732..7,819] → 7,842 ops/sec [7,581..8,873] ~ overlap (+0.7%) 15,424 ops/sec [15,297..15,622] → 14,198 ops/sec [14,130..14,367] 🔴 -8.0%
fibonacci.js — Interp: 8 unch. · avg -1.5% · Bytecode: 8 unch. · avg +2.7%
Benchmark Interpreted (main → PR) Δ Bytecode (main → PR) Δ
recursive fib(15) 83 ops/sec [77..88] → 78 ops/sec [76..80] ~ overlap (-6.7%) 1,982 ops/sec [1,859..2,183] → 1,878 ops/sec [1,866..1,882] ~ overlap (-5.2%)
recursive fib(20) 7 ops/sec [7..8] → 7 ops/sec [7..8] ~ overlap (+0.8%) 170 ops/sec [169..175] → 174 ops/sec [170..191] ~ overlap (+2.6%)
recursive fib(15) typed 78 ops/sec [76..125] → 77 ops/sec [74..78] ~ overlap (-0.6%) 1,722 ops/sec [1,707..1,932] → 1,738 ops/sec [1,712..1,751] ~ overlap (+0.9%)
recursive fib(20) typed 7 ops/sec [7..8] → 8 ops/sec [7..8] ~ overlap (+1.9%) 156 ops/sec [156..157] → 158 ops/sec [156..159] ~ overlap (+1.1%)
iterative fib(20) via reduce 3,552 ops/sec [3,548..3,569] → 3,627 ops/sec [3,518..4,066] ~ overlap (+2.1%) 5,192 ops/sec [5,093..5,484] → 5,573 ops/sec [5,058..5,724] ~ overlap (+7.3%)
iterator fib(20) 1,992 ops/sec [1,867..2,084] → 1,859 ops/sec [1,804..1,998] ~ overlap (-6.7%) 5,025 ops/sec [4,854..5,103] → 4,932 ops/sec [4,750..6,732] ~ overlap (-1.9%)
iterator fib(20) via Iterator.from + take 1,936 ops/sec [1,880..1,967] → 1,918 ops/sec [1,897..2,140] ~ overlap (-0.9%) 2,684 ops/sec [2,623..2,756] → 2,910 ops/sec [2,714..3,175] ~ overlap (+8.4%)
iterator fib(20) last value via reduce 1,700 ops/sec [1,655..1,844] → 1,673 ops/sec [1,657..1,682] ~ overlap (-1.6%) 2,202 ops/sec [2,183..2,737] → 2,377 ops/sec [2,249..3,054] ~ overlap (+8.0%)
float16array.js — Interp: 🟢 1, 🔴 3, 28 unch. · avg -1.8% · Bytecode: 🟢 1, 🔴 4, 27 unch. · avg -0.7%
Benchmark Interpreted (main → PR) Δ Bytecode (main → PR) Δ
new Float16Array(0) 84,777 ops/sec [83,761..85,224] → 82,896 ops/sec [56,882..97,363] ~ overlap (-2.2%) 107,336 ops/sec [95,943..121,305] → 108,374 ops/sec [106,823..109,347] ~ overlap (+1.0%)
new Float16Array(100) 80,896 ops/sec [80,194..81,244] → 82,041 ops/sec [79,400..82,489] ~ overlap (+1.4%) 100,758 ops/sec [99,034..104,416] → 99,460 ops/sec [98,349..104,223] ~ overlap (-1.3%)
new Float16Array(1000) 72,969 ops/sec [72,620..73,238] → 71,945 ops/sec [61,080..81,636] ~ overlap (-1.4%) 87,775 ops/sec [86,541..105,424] → 86,949 ops/sec [84,771..94,410] ~ overlap (-0.9%)
Float16Array.from([...100]) 1,172 ops/sec [1,168..1,180] → 1,176 ops/sec [1,169..1,177] ~ overlap (+0.3%) 1,248 ops/sec [1,173..1,381] → 1,216 ops/sec [1,202..1,706] ~ overlap (-2.6%)
Float16Array.of(1.5, 2.5, 3.5, 4.5, 5.5) 57,212 ops/sec [57,012..57,444] → 57,529 ops/sec [56,401..57,911] ~ overlap (+0.6%) 62,901 ops/sec [62,418..87,735] → 61,654 ops/sec [60,250..77,621] ~ overlap (-2.0%)
new Float16Array(float64Array) 27,377 ops/sec [26,731..27,609] → 27,434 ops/sec [26,823..28,458] ~ overlap (+0.2%) 30,233 ops/sec [29,216..30,435] → 29,684 ops/sec [29,577..29,759] ~ overlap (-1.8%)
sequential write 100 elements 845 ops/sec [828..864] → 852 ops/sec [827..871] ~ overlap (+0.8%) 7,239 ops/sec [6,801..7,257] → 7,047 ops/sec [6,768..7,451] ~ overlap (-2.7%)
sequential read 100 elements 993 ops/sec [968..1,020] → 1,026 ops/sec [960..1,066] ~ overlap (+3.4%) 8,354 ops/sec [7,890..8,944] → 8,628 ops/sec [7,986..8,962] ~ overlap (+3.3%)
write special values (NaN, Inf, -0) 42,216 ops/sec [40,016..49,363] → 40,374 ops/sec [40,044..41,875] ~ overlap (-4.4%) 213,620 ops/sec [204,328..283,635] → 229,077 ops/sec [212,254..306,526] ~ overlap (+7.2%)
Float16Array write 885 ops/sec [856..886] → 841 ops/sec [819..918] ~ overlap (-5.0%) 7,256 ops/sec [7,129..7,353] → 6,926 ops/sec [6,881..7,069] 🔴 -4.5%
Float32Array write 860 ops/sec [849..891] → 794 ops/sec [778..807] 🔴 -7.7% 7,097 ops/sec [6,936..7,215] → 7,052 ops/sec [7,022..7,075] ~ overlap (-0.6%)
Float64Array write 861 ops/sec [847..862] → 802 ops/sec [756..876] ~ overlap (-6.8%) 6,973 ops/sec [6,844..7,454] → 6,914 ops/sec [6,694..6,984] ~ overlap (-0.8%)
Float16Array read 978 ops/sec [964..1,038] → 1,010 ops/sec [940..1,338] ~ overlap (+3.2%) 8,168 ops/sec [8,111..8,806] → 8,188 ops/sec [7,764..8,572] ~ overlap (+0.3%)
Float32Array read 997 ops/sec [980..1,066] → 982 ops/sec [938..997] ~ overlap (-1.5%) 8,300 ops/sec [8,049..8,541] → 8,168 ops/sec [8,065..8,227] ~ overlap (-1.6%)
Float64Array read 981 ops/sec [977..984] → 985 ops/sec [978..1,391] ~ overlap (+0.4%) 8,431 ops/sec [8,171..9,134] → 8,063 ops/sec [7,363..10,080] ~ overlap (-4.4%)
fill(1.5) 8,234 ops/sec [8,034..8,345] → 7,896 ops/sec [7,668..8,093] ~ overlap (-4.1%) 8,104 ops/sec [8,030..8,243] → 7,826 ops/sec [7,799..7,948] 🔴 -3.4%
slice() 46,933 ops/sec [46,321..53,120] → 45,685 ops/sec [44,030..56,682] ~ overlap (-2.7%) 50,234 ops/sec [50,002..50,509] → 51,417 ops/sec [48,044..53,595] ~ overlap (+2.4%)
map(x => x * 2) 1,853 ops/sec [1,831..1,885] → 1,763 ops/sec [1,610..1,834] ~ overlap (-4.9%) 1,978 ops/sec [1,965..1,992] → 1,938 ops/sec [1,924..1,950] 🔴 -2.0%
filter(x => x > 25) 1,849 ops/sec [1,817..1,912] → 1,604 ops/sec [1,575..1,630] 🔴 -13.2% 2,144 ops/sec [2,130..2,164] → 2,065 ops/sec [2,052..2,159] ~ overlap (-3.7%)
reduce (sum) 1,903 ops/sec [1,796..2,497] → 1,576 ops/sec [1,528..1,603] 🔴 -17.2% 1,912 ops/sec [1,907..1,936] → 1,889 ops/sec [1,857..1,902] 🔴 -1.2%
sort() 20,815 ops/sec [20,187..21,977] → 21,697 ops/sec [21,369..21,804] ~ overlap (+4.2%) 22,459 ops/sec [22,148..22,538] → 22,349 ops/sec [22,038..22,536] ~ overlap (-0.5%)
indexOf() 24,766 ops/sec [24,452..25,320] → 24,391 ops/sec [23,491..27,508] ~ overlap (-1.5%) 26,432 ops/sec [24,917..28,613] → 27,130 ops/sec [26,243..30,252] ~ overlap (+2.6%)
reverse() 32,526 ops/sec [31,685..36,411] → 32,506 ops/sec [32,272..33,043] ~ overlap (-0.1%) 34,006 ops/sec [33,494..34,794] → 34,596 ops/sec [33,556..34,875] ~ overlap (+1.7%)
toReversed() 28,385 ops/sec [27,991..29,361] → 28,269 ops/sec [28,004..28,664] ~ overlap (-0.4%) 30,452 ops/sec [30,214..30,479] → 31,302 ops/sec [31,110..33,411] 🟢 +2.8%
toSorted() 13,734 ops/sec [13,700..13,809] → 13,746 ops/sec [13,721..13,798] ~ overlap (+0.1%) 14,098 ops/sec [13,857..14,786] → 14,178 ops/sec [14,072..15,066] ~ overlap (+0.6%)
create view over existing buffer 95,049 ops/sec [94,233..96,549] → 101,413 ops/sec [98,234..103,557] 🟢 +6.7% 133,522 ops/sec [130,157..134,148] → 133,617 ops/sec [133,329..160,042] ~ overlap (+0.1%)
subarray() 48,683 ops/sec [48,008..55,627] → 50,273 ops/sec [48,542..56,472] ~ overlap (+3.3%) 56,456 ops/sec [55,203..63,235] → 56,393 ops/sec [55,101..56,929] ~ overlap (-0.1%)
set() from array 64,048 ops/sec [61,480..67,612] → 61,685 ops/sec [61,351..61,822] ~ overlap (-3.7%) 72,029 ops/sec [69,888..73,541] → 71,259 ops/sec [69,130..81,572] ~ overlap (-1.1%)
for-of loop 1,337 ops/sec [1,303..1,361] → 1,320 ops/sec [1,309..1,322] ~ overlap (-1.2%) 9,254 ops/sec [8,939..9,558] → 9,161 ops/sec [8,780..9,263] ~ overlap (-1.0%)
spread into array 5,460 ops/sec [5,265..6,509] → 5,279 ops/sec [5,160..5,988] ~ overlap (-3.3%) 18,021 ops/sec [17,875..19,061] → 18,338 ops/sec [17,487..22,408] ~ overlap (+1.8%)
f16round(1.337) 135,658 ops/sec [133,879..138,546] → 134,660 ops/sec [130,634..158,613] ~ overlap (-0.7%) 178,039 ops/sec [176,542..182,067] → 177,079 ops/sec [175,149..190,610] ~ overlap (-0.5%)
f16round over 100 values 842 ops/sec [832..935] → 833 ops/sec [809..837] ~ overlap (-1.0%) 2,364 ops/sec [2,146..2,583] → 2,145 ops/sec [2,136..2,167] ~ overlap (-9.3%)
for-in/for-in.js — Interp: 3 unch. · avg -1.3% · Bytecode: 3 unch. · avg -1.5%
Benchmark Interpreted (main → PR) Δ Bytecode (main → PR) Δ
for...in over 50 own keys 2,416 ops/sec [2,217..2,427] → 2,335 ops/sec [2,283..2,989] ~ overlap (-3.3%) 3,348 ops/sec [3,100..4,168] → 3,356 ops/sec [3,169..3,396] ~ overlap (+0.2%)
for...in over an 8-level chain of 50 shared keys 1,602 ops/sec [1,559..1,918] → 1,613 ops/sec [1,612..1,622] ~ overlap (+0.7%) 2,262 ops/sec [2,150..2,310] → 2,231 ops/sec [2,165..2,440] ~ overlap (-1.4%)
for...in over a 16-level chain of 100 shared keys 631 ops/sec [625..733] → 623 ops/sec [618..638] ~ overlap (-1.3%) 829 ops/sec [781..904] → 801 ops/sec [784..811] ~ overlap (-3.4%)
for-of.js — Interp: 🔴 2, 5 unch. · avg -0.7% · Bytecode: 🟢 2, 5 unch. · avg +0.8%
Benchmark Interpreted (main → PR) Δ Bytecode (main → PR) Δ
for...of with 10-element array 11,559 ops/sec [11,096..12,060] → 11,018 ops/sec [10,929..11,051] 🔴 -4.7% 85,953 ops/sec [84,879..87,963] → 86,347 ops/sec [84,517..95,133] ~ overlap (+0.5%)
for...of with 100-element array 1,319 ops/sec [1,294..1,514] → 1,296 ops/sec [1,258..1,298] ~ overlap (-1.7%) 13,112 ops/sec [12,998..13,248] → 13,330 ops/sec [13,315..14,758] 🟢 +1.7%
for...of with string (10 chars) 7,844 ops/sec [7,815..7,907] → 7,812 ops/sec [7,755..7,861] ~ overlap (-0.4%) 16,211 ops/sec [16,036..17,006] → 16,248 ops/sec [16,027..16,526] ~ overlap (+0.2%)
for...of with Set (10 elements) 12,646 ops/sec [12,000..13,516] → 13,325 ops/sec [11,511..19,138] ~ overlap (+5.4%) 131,952 ops/sec [129,847..136,400] → 134,232 ops/sec [132,794..135,042] ~ overlap (+1.7%)
for...of with Map entries (10 entries) 6,243 ops/sec [6,174..6,281] → 5,811 ops/sec [5,348..6,014] 🔴 -6.9% 11,756 ops/sec [11,168..13,294] → 11,401 ops/sec [11,351..11,508] ~ overlap (-3.0%)
for...of with destructuring 6,218 ops/sec [5,717..8,184] → 6,441 ops/sec [6,016..7,639] ~ overlap (+3.6%) 13,604 ops/sec [12,883..13,953] → 14,039 ops/sec [13,746..15,530] ~ overlap (+3.2%)
for-await-of with sync array 7,040 ops/sec [6,837..7,283] → 7,026 ops/sec [6,799..7,905] ~ overlap (-0.2%) 1,703 ops/sec [1,673..1,714] → 1,726 ops/sec [1,725..1,729] 🟢 +1.4%
generators.js — Interp: 4 unch. · avg -2.2% · Bytecode: 🟢 2, 2 unch. · avg +7.1%
Benchmark Interpreted (main → PR) Δ Bytecode (main → PR) Δ
manual next over object generator 565 ops/sec [562..573] → 537 ops/sec [516..593] ~ overlap (-4.8%) 874 ops/sec [792..913] → 889 ops/sec [871..890] ~ overlap (+1.7%)
for...of over object generator 817 ops/sec [815..824] → 828 ops/sec [804..835] ~ overlap (+1.3%) 1,268 ops/sec [1,261..1,278] → 1,411 ops/sec [1,403..1,427] 🟢 +11.3%
yield delegation 813 ops/sec [799..832] → 779 ops/sec [748..812] ~ overlap (-4.2%) 1,274 ops/sec [1,262..1,287] → 1,423 ops/sec [1,397..1,561] 🟢 +11.7%
class generator method 831 ops/sec [724..843] → 823 ops/sec [818..824] ~ overlap (-1.0%) 1,344 ops/sec [1,338..1,375] → 1,395 ops/sec [1,344..1,570] ~ overlap (+3.8%)
intl.js — Interp: 🟢 2, 🔴 2, 2 unch. · avg +3.5% · Bytecode: 🟢 2, 4 unch. · avg +5.7%
Benchmark Interpreted (main → PR) Δ Bytecode (main → PR) Δ
format decimal 22,831 ops/sec [22,502..24,723] → 21,805 ops/sec [21,397..22,242] 🔴 -4.5% 21,563 ops/sec [21,331..22,208] → 25,369 ops/sec [23,246..25,629] 🟢 +17.7%
format currency 16,897 ops/sec [16,254..19,351] → 17,767 ops/sec [17,650..17,886] ~ overlap (+5.2%) 17,857 ops/sec [17,648..18,333] → 20,729 ops/sec [20,551..20,760] 🟢 +16.1%
format UTC date 7,610 ops/sec [7,525..7,977] → 8,732 ops/sec [8,372..9,462] 🟢 +14.7% 7,834 ops/sec [7,746..7,873] → 7,955 ops/sec [7,837..7,999] ~ overlap (+1.5%)
formatRange UTC dates 2,477 ops/sec [2,439..2,548] → 2,682 ops/sec [2,652..2,742] 🟢 +8.3% 2,595 ops/sec [2,506..2,618] → 2,562 ops/sec [2,522..2,565] ~ overlap (-1.3%)
compare numeric strings 82,731 ops/sec [82,434..83,088] → 80,372 ops/sec [77,001..80,989] 🔴 -2.9% 101,014 ops/sec [99,349..101,257] → 101,181 ops/sec [100,672..101,878] ~ overlap (+0.2%)
sort short string list 14,258 ops/sec [14,242..14,293] → 14,316 ops/sec [14,201..14,457] ~ overlap (+0.4%) 14,835 ops/sec [14,737..14,903] → 14,863 ops/sec [14,731..14,984] ~ overlap (+0.2%)
iterators.js — Interp: 🟢 11, 🔴 1, 30 unch. · avg +4.5% · Bytecode: 🟢 9, 🔴 3, 30 unch. · avg +2.7%
Benchmark Interpreted (main → PR) Δ Bytecode (main → PR) Δ
Iterator.from({next}).toArray() — 20 elements 2,930 ops/sec [2,903..3,179] → 2,736 ops/sec [2,709..2,878] 🔴 -6.6% 4,793 ops/sec [4,586..4,898] → 4,946 ops/sec [4,876..4,962] ~ overlap (+3.2%)
Iterator.from({next}).toArray() — 50 elements 1,249 ops/sec [1,238..1,251] → 1,224 ops/sec [1,206..1,256] ~ overlap (-2.0%) 2,109 ops/sec [2,093..2,150] → 2,181 ops/sec [2,102..2,226] ~ overlap (+3.4%)
spread pre-wrapped iterator — 20 elements 2,521 ops/sec [2,491..2,641] → 2,597 ops/sec [2,532..2,626] ~ overlap (+3.0%) 5,369 ops/sec [5,304..5,380] → 5,068 ops/sec [5,041..5,170] 🔴 -5.6%
Iterator.from({next}).forEach — 50 elements 844 ops/sec [830..849] → 867 ops/sec [841..876] ~ overlap (+2.7%) 1,491 ops/sec [1,477..1,510] → 1,445 ops/sec [1,438..1,446] 🔴 -3.1%
Iterator.from({next}).reduce — 50 elements 915 ops/sec [911..924] → 929 ops/sec [912..945] ~ overlap (+1.4%) 1,507 ops/sec [1,494..1,514] → 1,448 ops/sec [1,435..1,450] 🔴 -3.9%
wrap array iterator 12,240 ops/sec [11,927..12,372] → 12,374 ops/sec [12,142..12,446] ~ overlap (+1.1%) 12,778 ops/sec [12,582..13,643] → 13,813 ops/sec [13,255..14,946] ~ overlap (+8.1%)
wrap plain {next()} object 2,015 ops/sec [1,935..2,043] → 2,049 ops/sec [1,953..2,086] ~ overlap (+1.7%) 3,536 ops/sec [3,505..3,564] → 3,494 ops/sec [3,426..3,520] ~ overlap (-1.2%)
map + toArray (50 elements) 675 ops/sec [671..679] → 692 ops/sec [661..789] ~ overlap (+2.4%) 938 ops/sec [927..987] → 927 ops/sec [914..938] ~ overlap (-1.1%)
filter + toArray (50 elements) 693 ops/sec [682..711] → 743 ops/sec [739..745] 🟢 +7.2% 1,051 ops/sec [1,027..1,051] → 1,032 ops/sec [1,023..1,650] ~ overlap (-1.8%)
take(10) + toArray (50 element source) 3,612 ops/sec [3,548..3,664] → 3,806 ops/sec [3,712..3,940] 🟢 +5.4% 4,884 ops/sec [4,812..5,214] → 5,101 ops/sec [4,953..5,261] ~ overlap (+4.4%)
drop(40) + toArray (50 element source) 978 ops/sec [956..989] → 1,019 ops/sec [977..1,042] ~ overlap (+4.2%) 1,474 ops/sec [1,460..1,602] → 1,516 ops/sec [1,500..1,717] ~ overlap (+2.9%)
chained map + filter + take (100 element source) 1,017 ops/sec [1,000..1,021] → 1,094 ops/sec [1,080..1,134] 🟢 +7.6% 1,357 ops/sec [1,314..1,463] → 1,376 ops/sec [1,347..1,748] ~ overlap (+1.4%)
some + every (50 elements) 510 ops/sec [494..546] → 527 ops/sec [524..551] ~ overlap (+3.4%) 822 ops/sec [808..829] → 848 ops/sec [835..922] 🟢 +3.2%
find (50 elements) 1,126 ops/sec [1,109..1,152] → 1,181 ops/sec [1,149..1,221] ~ overlap (+4.9%) 1,764 ops/sec [1,736..1,782] → 1,855 ops/sec [1,824..1,866] 🟢 +5.2%
concat 2 arrays (10 + 10 elements) 4,971 ops/sec [4,832..5,317] → 5,222 ops/sec [5,121..5,344] ~ overlap (+5.0%) 5,255 ops/sec [5,105..5,321] → 5,347 ops/sec [5,257..6,198] ~ overlap (+1.7%)
concat 5 arrays (10 elements each) 2,116 ops/sec [2,015..2,295] → 2,276 ops/sec [2,188..2,546] ~ overlap (+7.6%) 2,188 ops/sec [2,142..2,569] → 2,270 ops/sec [2,232..2,423] ~ overlap (+3.7%)
concat 2 arrays (20 + 20 elements) 2,662 ops/sec [2,614..4,103] → 2,842 ops/sec [2,813..2,889] ~ overlap (+6.7%) 2,784 ops/sec [2,696..2,881] → 2,970 ops/sec [2,868..3,873] ~ overlap (+6.7%)
concat + filter + toArray (20 + 20 elements) 1,227 ops/sec [1,194..1,740] → 1,270 ops/sec [1,228..1,401] ~ overlap (+3.5%) 1,295 ops/sec [1,285..1,308] → 1,339 ops/sec [1,319..1,384] 🟢 +3.5%
concat + map + take (20 + 20 elements, take 10) 2,948 ops/sec [2,879..3,503] → 3,091 ops/sec [3,024..3,412] ~ overlap (+4.9%) 3,058 ops/sec [3,003..3,071] → 3,155 ops/sec [3,141..3,177] 🟢 +3.2%
concat Sets (15 + 15 elements) 3,585 ops/sec [3,559..3,647] → 3,905 ops/sec [3,751..4,253] 🟢 +8.9% 3,758 ops/sec [3,687..3,787] → 3,896 ops/sec [3,850..3,918] 🟢 +3.7%
concat boxed strings (13 + 13 characters) 3,602 ops/sec [3,559..3,761] → 3,935 ops/sec [3,806..4,380] 🟢 +9.2% 3,876 ops/sec [3,845..4,243] → 4,021 ops/sec [3,936..4,902] ~ overlap (+3.7%)
zip 2 arrays (10 + 10 elements) 8,603 ops/sec [8,577..8,626] → 9,143 ops/sec [8,986..9,210] 🟢 +6.3% 8,986 ops/sec [8,868..9,266] → 9,402 ops/sec [9,267..9,433] 🟢 +4.6%
zip 3 arrays (10 elements each) 8,178 ops/sec [8,111..8,242] → 8,407 ops/sec [8,339..8,661] 🟢 +2.8% 8,468 ops/sec [8,407..8,489] → 8,686 ops/sec [8,483..10,710] ~ overlap (+2.6%)
zip 2 arrays (20 + 20 elements) 5,169 ops/sec [5,112..7,124] → 5,507 ops/sec [5,351..6,116] ~ overlap (+6.5%) 5,488 ops/sec [5,428..5,493] → 5,480 ops/sec [5,450..5,789] ~ overlap (-0.1%)
zip 2 arrays (50 + 50 elements) 2,376 ops/sec [2,333..2,443] → 2,555 ops/sec [2,494..2,572] 🟢 +7.5% 2,503 ops/sec [2,441..2,532] → 2,595 ops/sec [2,570..2,738] 🟢 +3.7%
zip shortest mode (20 + 10 elements) 8,650 ops/sec [8,473..9,606] → 9,038 ops/sec [8,888..9,129] ~ overlap (+4.5%) 9,329 ops/sec [9,057..9,744] → 9,628 ops/sec [9,498..9,904] ~ overlap (+3.2%)
zip longest mode (10 + 20 elements) 5,008 ops/sec [4,937..5,670] → 5,279 ops/sec [5,152..6,430] ~ overlap (+5.4%) 5,426 ops/sec [5,375..5,587] → 5,505 ops/sec [5,425..5,622] ~ overlap (+1.5%)
zip strict mode (20 + 20 elements) 5,250 ops/sec [4,925..7,634] → 5,367 ops/sec [5,222..5,518] ~ overlap (+2.2%) 5,356 ops/sec [5,231..6,439] → 6,056 ops/sec [5,376..6,444] ~ overlap (+13.1%)
zip + map + toArray (20 + 20 elements) 1,713 ops/sec [1,705..2,049] → 1,816 ops/sec [1,741..2,344] ~ overlap (+6.0%) 1,781 ops/sec [1,763..2,042] → 1,765 ops/sec [1,761..2,151] ~ overlap (-0.9%)
zip + filter + toArray (20 + 20 elements) 1,822 ops/sec [1,806..1,854] → 1,885 ops/sec [1,850..1,913] ~ overlap (+3.5%) 1,915 ops/sec [1,878..2,090] → 1,968 ops/sec [1,930..1,976] ~ overlap (+2.8%)
zip Sets (15 + 15 elements) 7,044 ops/sec [6,795..7,524] → 7,449 ops/sec [7,333..7,580] ~ overlap (+5.7%) 7,579 ops/sec [7,493..7,659] → 7,840 ops/sec [7,698..7,927] 🟢 +3.4%
zipKeyed 2 keys (10 elements each) 8,711 ops/sec [8,401..12,695] → 9,586 ops/sec [8,571..10,445] ~ overlap (+10.1%) 8,632 ops/sec [8,493..9,882] → 9,480 ops/sec [9,402..9,549] ~ overlap (+9.8%)
zipKeyed 3 keys (20 elements each) 4,476 ops/sec [4,324..5,060] → 4,665 ops/sec [4,402..5,017] ~ overlap (+4.2%) 4,623 ops/sec [4,359..5,210] → 4,772 ops/sec [4,568..5,192] ~ overlap (+3.2%)
zipKeyed longest mode (10 + 20 elements) 4,930 ops/sec [4,870..4,977] → 5,067 ops/sec [5,022..5,117] 🟢 +2.8% 5,594 ops/sec [4,969..5,982] → 5,159 ops/sec [4,999..7,075] ~ overlap (-7.8%)
zipKeyed strict mode (20 + 20 elements) 5,288 ops/sec [4,723..5,911] → 5,255 ops/sec [5,046..6,181] ~ overlap (-0.6%) 4,946 ops/sec [4,719..5,172] → 5,195 ops/sec [5,157..5,219] ~ overlap (+5.0%)
zipKeyed + filter + map (20 elements) 1,626 ops/sec [1,552..1,644] → 1,683 ops/sec [1,637..1,787] ~ overlap (+3.5%) 1,903 ops/sec [1,867..1,931] → 1,953 ops/sec [1,883..1,978] ~ overlap (+2.7%)
array.values().map().filter().toArray() 660 ops/sec [619..663] → 691 ops/sec [655..698] ~ overlap (+4.7%) 727 ops/sec [719..746] → 754 ops/sec [709..771] ~ overlap (+3.7%)
array.values().take(5).toArray() 10,865 ops/sec [10,632..12,128] → 12,017 ops/sec [11,144..13,590] ~ overlap (+10.6%) 11,543 ops/sec [11,294..13,203] → 11,622 ops/sec [11,412..11,741] ~ overlap (+0.7%)
array.values().drop(45).toArray() 2,280 ops/sec [2,226..3,271] → 2,419 ops/sec [2,332..3,193] ~ overlap (+6.1%) 2,390 ops/sec [2,263..2,684] → 2,513 ops/sec [2,393..2,605] ~ overlap (+5.2%)
map.entries() chained helpers 885 ops/sec [863..953] → 960 ops/sec [953..1,047] 🟢 +8.5% 963 ops/sec [953..964] → 998 ops/sec [963..1,069] ~ overlap (+3.7%)
set.values() chained helpers 1,641 ops/sec [1,555..1,733] → 1,715 ops/sec [1,686..1,896] ~ overlap (+4.6%) 1,736 ops/sec [1,716..1,754] → 1,877 ops/sec [1,828..1,898] 🟢 +8.2%
string iterator map + toArray 1,592 ops/sec [1,574..1,607] → 1,642 ops/sec [1,621..1,743] 🟢 +3.1% 1,599 ops/sec [1,581..1,633] → 1,650 ops/sec [1,615..1,662] ~ overlap (+3.2%)
json.js — Interp: 🔴 1, 22 unch. · avg +0.3% · Bytecode: 🟢 1, 🔴 1, 21 unch. · avg +1.6%
Benchmark Interpreted (main → PR) Δ Bytecode (main → PR) Δ
parse simple object 41,813 ops/sec [40,065..44,204] → 42,777 ops/sec [42,444..43,190] ~ overlap (+2.3%) 47,659 ops/sec [45,499..48,559] → 48,317 ops/sec [47,739..48,457] ~ overlap (+1.4%)
parse nested object 28,038 ops/sec [27,237..28,477] → 27,741 ops/sec [26,391..29,334] ~ overlap (-1.1%) 28,807 ops/sec [28,378..29,534] → 30,190 ops/sec [29,366..30,456] ~ overlap (+4.8%)
parse array of objects 15,939 ops/sec [14,870..17,312] → 15,564 ops/sec [14,835..16,397] ~ overlap (-2.3%) 15,991 ops/sec [15,650..16,094] → 16,577 ops/sec [16,339..16,649] 🟢 +3.7%
parse large flat object 17,297 ops/sec [16,900..17,791] → 17,983 ops/sec [17,769..18,257] ~ overlap (+4.0%) 17,916 ops/sec [16,565..20,335] → 18,260 ops/sec [18,221..18,342] ~ overlap (+1.9%)
parse mixed types 13,796 ops/sec [12,796..15,719] → 14,490 ops/sec [14,218..14,522] ~ overlap (+5.0%) 14,768 ops/sec [14,667..14,831] → 14,695 ops/sec [14,561..14,862] ~ overlap (-0.5%)
stringify simple object 42,647 ops/sec [41,167..55,072] → 42,543 ops/sec [41,154..45,845] ~ overlap (-0.2%) 47,787 ops/sec [47,028..49,627] → 48,350 ops/sec [46,429..49,306] ~ overlap (+1.2%)
stringify nested object 25,423 ops/sec [25,187..25,523] → 24,400 ops/sec [24,198..25,143] 🔴 -4.0% 26,704 ops/sec [26,539..27,226] → 26,921 ops/sec [25,088..28,554] ~ overlap (+0.8%)
stringify array of objects 10,687 ops/sec [10,490..11,124] → 10,808 ops/sec [10,437..11,010] ~ overlap (+1.1%) 11,397 ops/sec [11,174..11,648] → 11,330 ops/sec [10,938..13,013] ~ overlap (-0.6%)
stringify mixed types 21,730 ops/sec [21,420..23,261] → 21,690 ops/sec [21,364..22,414] ~ overlap (-0.2%) 21,870 ops/sec [21,562..22,917] → 21,993 ops/sec [21,805..23,719] ~ overlap (+0.6%)
reviver doubles numbers 7,628 ops/sec [7,377..8,805] → 7,556 ops/sec [7,088..7,647] ~ overlap (-0.9%) 10,343 ops/sec [10,264..12,158] → 10,677 ops/sec [10,428..10,807] ~ overlap (+3.2%)
reviver filters properties 8,132 ops/sec [7,632..8,246] → 7,861 ops/sec [7,543..9,417] ~ overlap (-3.3%) 9,471 ops/sec [9,350..9,545] → 9,655 ops/sec [9,428..10,008] ~ overlap (+1.9%)
reviver on nested object 9,294 ops/sec [8,716..9,874] → 9,497 ops/sec [8,823..10,305] ~ overlap (+2.2%) 11,364 ops/sec [11,092..11,899] → 11,840 ops/sec [11,249..12,681] ~ overlap (+4.2%)
reviver on array 4,741 ops/sec [4,628..4,847] → 4,688 ops/sec [4,490..5,141] ~ overlap (-1.1%) 6,837 ops/sec [6,625..8,131] → 6,922 ops/sec [6,793..8,101] ~ overlap (+1.2%)
replacer function doubles numbers 9,004 ops/sec [8,832..9,013] → 8,802 ops/sec [8,583..8,871] ~ overlap (-2.2%) 12,853 ops/sec [12,767..13,031] → 14,109 ops/sec [12,676..15,663] ~ overlap (+9.8%)
replacer function excludes properties 11,873 ops/sec [11,788..11,916] → 11,808 ops/sec [11,672..11,987] ~ overlap (-0.5%) 17,872 ops/sec [17,681..18,040] → 18,408 ops/sec [17,843..19,921] ~ overlap (+3.0%)
array replacer (allowlist) 33,047 ops/sec [32,052..33,454] → 32,978 ops/sec [32,713..33,191] ~ overlap (-0.2%) 35,661 ops/sec [35,473..36,121] → 36,190 ops/sec [35,502..56,763] ~ overlap (+1.5%)
stringify with 2-space indent 25,386 ops/sec [25,232..25,890] → 26,272 ops/sec [25,481..26,446] ~ overlap (+3.5%) 27,102 ops/sec [26,413..27,724] → 27,285 ops/sec [26,338..38,525] ~ overlap (+0.7%)
stringify with tab indent 25,941 ops/sec [25,166..33,026] → 25,047 ops/sec [24,338..25,620] ~ overlap (-3.4%) 27,144 ops/sec [26,735..27,540] → 27,074 ops/sec [26,280..27,703] ~ overlap (-0.3%)
stringify deeply nested object with 2-space indent 3,938 ops/sec [3,885..3,963] → 3,894 ops/sec [3,755..4,381] ~ overlap (-1.1%) 3,919 ops/sec [3,799..3,953] → 4,048 ops/sec [3,748..4,444] ~ overlap (+3.3%)
stringify deeply nested array with 2-space indent 5,403 ops/sec [5,211..5,470] → 5,356 ops/sec [5,204..5,521] ~ overlap (-0.9%) 5,391 ops/sec [5,355..5,429] → 5,420 ops/sec [5,337..5,449] ~ overlap (+0.5%)
stringify very deeply nested object with 2-space indent 651 ops/sec [629..825] → 713 ops/sec [633..908] ~ overlap (+9.6%) 654 ops/sec [649..675] → 636 ops/sec [623..642] 🔴 -2.8%
parse then stringify 13,316 ops/sec [13,186..15,454] → 13,237 ops/sec [13,001..13,450] ~ overlap (-0.6%) 14,683 ops/sec [14,432..14,905] → 14,854 ops/sec [14,269..14,964] ~ overlap (+1.2%)
stringify then parse 8,254 ops/sec [8,147..8,264] → 8,402 ops/sec [8,203..8,751] ~ overlap (+1.8%) 8,775 ops/sec [8,654..8,841] → 8,456 ops/sec [8,292..9,010] ~ overlap (-3.6%)
jsx.jsx — Interp: 🔴 1, 20 unch. · avg -3.8% · Bytecode: 🟢 3, 18 unch. · avg +2.1%
Benchmark Interpreted (main → PR) Δ Bytecode (main → PR) Δ
simple element 64,489 ops/sec [63,959..65,571] → 64,003 ops/sec [62,344..69,748] ~ overlap (-0.8%) 106,089 ops/sec [104,211..116,701] → 107,171 ops/sec [102,929..121,904] ~ overlap (+1.0%)
self-closing element 67,945 ops/sec [67,111..69,573] → 67,522 ops/sec [65,745..67,999] ~ overlap (-0.6%) 108,190 ops/sec [107,757..108,535] → 111,311 ops/sec [110,115..112,141] 🟢 +2.9%
element with string attribute 59,414 ops/sec [56,410..62,366] → 56,265 ops/sec [55,332..56,723] ~ overlap (-5.3%) 82,464 ops/sec [79,362..92,199] → 91,706 ops/sec [84,328..103,863] ~ overlap (+11.2%)
element with multiple attributes 55,851 ops/sec [48,560..62,759] → 48,360 ops/sec [47,637..61,182] ~ overlap (-13.4%) 62,938 ops/sec [61,249..66,342] → 73,820 ops/sec [65,882..79,989] ~ overlap (+17.3%)
element with expression attribute 52,493 ops/sec [50,302..55,682] → 53,106 ops/sec [48,938..57,859] ~ overlap (+1.2%) 79,130 ops/sec [77,806..79,709] → 87,365 ops/sec [79,249..91,451] ~ overlap (+10.4%)
text child 67,186 ops/sec [65,344..92,103] → 64,714 ops/sec [63,910..73,422] ~ overlap (-3.7%) 105,932 ops/sec [101,986..134,215] → 104,536 ops/sec [102,649..105,020] ~ overlap (-1.3%)
expression child 60,597 ops/sec [60,084..65,897] → 59,575 ops/sec [57,386..67,638] ~ overlap (-1.7%) 108,136 ops/sec [100,900..119,681] → 105,745 ops/sec [105,346..106,119] ~ overlap (-2.2%)
mixed text and expression 59,848 ops/sec [56,282..66,300] → 54,768 ops/sec [53,665..55,251] 🔴 -8.5% 96,767 ops/sec [96,193..97,429] → 100,194 ops/sec [99,385..112,632] 🟢 +3.5%
nested elements (3 levels) 27,914 ops/sec [27,297..28,126] → 26,601 ops/sec [26,525..30,273] ~ overlap (-4.7%) 41,135 ops/sec [40,365..41,382] → 41,346 ops/sec [39,396..41,808] ~ overlap (+0.5%)
sibling children 22,871 ops/sec [20,181..24,473] → 19,802 ops/sec [19,572..21,985] ~ overlap (-13.4%) 30,016 ops/sec [29,499..30,476] → 30,082 ops/sec [29,796..33,015] ~ overlap (+0.2%)
component element 48,381 ops/sec [46,641..57,674] → 46,622 ops/sec [46,024..49,338] ~ overlap (-3.6%) 72,497 ops/sec [70,189..74,584] → 70,197 ops/sec [69,717..83,345] ~ overlap (-3.2%)
component with children 31,151 ops/sec [30,337..35,265] → 29,823 ops/sec [29,261..33,366] ~ overlap (-4.3%) 45,445 ops/sec [45,000..45,488] → 46,041 ops/sec [45,363..46,395] ~ overlap (+1.3%)
dotted component 41,790 ops/sec [41,645..46,251] → 40,870 ops/sec [38,916..43,105] ~ overlap (-2.2%) 59,558 ops/sec [56,690..70,928] → 56,700 ops/sec [56,556..57,139] ~ overlap (-4.8%)
empty fragment 72,378 ops/sec [71,128..73,672] → 73,280 ops/sec [68,084..91,732] ~ overlap (+1.2%) 110,167 ops/sec [106,708..115,886] → 111,930 ops/sec [110,230..113,863] ~ overlap (+1.6%)
fragment with children 20,730 ops/sec [20,430..21,015] → 20,386 ops/sec [19,698..23,930] ~ overlap (-1.7%) 30,950 ops/sec [30,656..31,994] → 31,009 ops/sec [30,512..31,772] ~ overlap (+0.2%)
spread attributes 31,648 ops/sec [31,326..41,659] → 31,896 ops/sec [31,614..32,761] ~ overlap (+0.8%) 39,783 ops/sec [39,285..40,790] → 40,028 ops/sec [39,960..40,044] ~ overlap (+0.6%)
spread with overrides 27,572 ops/sec [27,178..31,304] → 27,777 ops/sec [27,078..28,082] ~ overlap (+0.7%) 33,998 ops/sec [33,514..34,944] → 34,179 ops/sec [33,803..34,430] ~ overlap (+0.5%)
shorthand props 46,317 ops/sec [41,862..51,572] → 46,846 ops/sec [46,819..47,110] ~ overlap (+1.1%) 74,573 ops/sec [73,585..77,513] → 74,308 ops/sec [72,797..74,472] ~ overlap (-0.4%)
nav bar structure 10,502 ops/sec [9,683..12,043] → 9,890 ops/sec [9,849..9,974] ~ overlap (-5.8%) 14,091 ops/sec [13,836..14,190] → 13,956 ops/sec [13,805..14,953] ~ overlap (-1.0%)
card component tree 11,580 ops/sec [11,434..11,865] → 11,304 ops/sec [11,177..11,801] ~ overlap (-2.4%) 15,853 ops/sec [15,379..21,062] → 16,425 ops/sec [16,254..22,325] ~ overlap (+3.6%)
10 list items via Array.from 5,373 ops/sec [4,649..6,734] → 4,691 ops/sec [4,587..5,182] ~ overlap (-12.7%) 5,367 ops/sec [5,329..5,404] → 5,471 ops/sec [5,418..5,589] 🟢 +1.9%
modules.js — Interp: 9 unch. · avg +1.8% · Bytecode: 🟢 2, 7 unch. · avg +5.6%
Benchmark Interpreted (main → PR) Δ Bytecode (main → PR) Δ
call imported function 106,770 ops/sec [104,223..130,284] → 109,242 ops/sec [101,315..124,199] ~ overlap (+2.3%) 348,903 ops/sec [333,657..435,708] → 343,612 ops/sec [342,429..345,408] ~ overlap (-1.5%)
call two imported functions 58,876 ops/sec [57,330..68,225] → 56,877 ops/sec [56,259..73,589] ~ overlap (-3.4%) 239,405 ops/sec [220,742..261,058] → 236,311 ops/sec [231,503..238,827] ~ overlap (-1.3%)
read imported constant 262,945 ops/sec [254,606..265,441] → 287,158 ops/sec [259,238..305,541] ~ overlap (+9.2%) 451,680 ops/sec [448,085..499,894] → 502,827 ops/sec [451,403..562,191] ~ overlap (+11.3%)
read imported string 261,913 ops/sec [254,921..281,520] → 275,103 ops/sec [248,390..403,961] ~ overlap (+5.0%) 478,349 ops/sec [456,071..489,797] → 489,409 ops/sec [484,897..501,262] ~ overlap (+2.3%)
read JSON string property 257,760 ops/sec [253,635..262,138] → 263,556 ops/sec [252,354..320,329] ~ overlap (+2.2%) 513,708 ops/sec [461,616..589,126] → 491,045 ops/sec [482,155..497,313] ~ overlap (-4.4%)
read JSON number property 252,866 ops/sec [248,162..254,681] → 250,838 ops/sec [243,504..270,514] ~ overlap (-0.8%) 475,513 ops/sec [436,349..502,032] → 489,450 ops/sec [460,449..564,277] ~ overlap (+2.9%)
read JSON boolean property 261,082 ops/sec [248,017..268,335] → 256,469 ops/sec [252,594..264,364] ~ overlap (-1.8%) 475,393 ops/sec [463,418..481,380] → 498,929 ops/sec [481,991..519,774] 🟢 +5.0%
read JSON array property 263,556 ops/sec [249,075..361,612] → 274,847 ops/sec [259,195..302,735] ~ overlap (+4.3%) 494,539 ops/sec [467,303..512,764] → 555,238 ops/sec [479,324..606,799] ~ overlap (+12.3%)
read multiple JSON properties 127,539 ops/sec [125,904..152,622] → 126,903 ops/sec [125,964..129,575] ~ overlap (-0.5%) 321,388 ops/sec [314,126..343,052] → 397,227 ops/sec [374,144..442,922] 🟢 +23.6%
numbers.js — Interp: 12 unch. · avg +0.6% · Bytecode: 🟢 2, 🔴 1, 9 unch. · avg +1.1%
Benchmark Interpreted (main → PR) Δ Bytecode (main → PR) Δ
integer arithmetic 63,599 ops/sec [61,468..95,973] → 64,954 ops/sec [62,450..65,337] ~ overlap (+2.1%) 460,207 ops/sec [453,234..469,845] → 459,828 ops/sec [447,082..465,932] ~ overlap (-0.1%)
floating point arithmetic 76,646 ops/sec [75,483..78,368] → 74,592 ops/sec [72,472..76,630] ~ overlap (-2.7%) 420,371 ops/sec [372,380..447,586] → 352,254 ops/sec [344,835..363,169] 🔴 -16.2%
number coercion 15,724 ops/sec [15,379..15,977] → 15,634 ops/sec [14,959..17,334] ~ overlap (-0.6%) 18,487 ops/sec [18,349..18,632] → 19,143 ops/sec [18,759..19,415] 🟢 +3.6%
toFixed 26,220 ops/sec [25,983..26,739] → 26,736 ops/sec [26,430..28,754] ~ overlap (+2.0%) 30,354 ops/sec [29,217..32,626] → 29,819 ops/sec [29,583..29,883] ~ overlap (-1.8%)
toString 39,776 ops/sec [38,732..41,058] → 39,694 ops/sec [39,548..40,199] ~ overlap (-0.2%) 48,872 ops/sec [48,661..49,013] → 54,768 ops/sec [49,015..61,279] 🟢 +12.1%
toString non-integer (shortest round-trip) 8,619 ops/sec [8,366..8,709] → 8,547 ops/sec [8,348..11,390] ~ overlap (-0.8%) 13,302 ops/sec [13,090..14,842] → 14,446 ops/sec [13,034..19,509] ~ overlap (+8.6%)
valueOf 53,199 ops/sec [52,710..54,329] → 54,660 ops/sec [54,026..55,219] ~ overlap (+2.7%) 67,439 ops/sec [65,019..77,752] → 66,713 ops/sec [64,731..79,650] ~ overlap (-1.1%)
toPrecision 24,270 ops/sec [23,375..24,788] → 23,949 ops/sec [23,917..24,047] ~ overlap (-1.3%) 27,331 ops/sec [27,027..28,959] → 27,445 ops/sec [27,000..27,612] ~ overlap (+0.4%)
Number.isNaN 55,647 ops/sec [54,589..56,968] → 56,265 ops/sec [55,271..63,344] ~ overlap (+1.1%) 70,518 ops/sec [68,174..71,870] → 73,928 ops/sec [70,853..94,344] ~ overlap (+4.8%)
Number.isFinite 56,002 ops/sec [54,113..82,959] → 57,070 ops/sec [55,219..61,463] ~ overlap (+1.9%) 67,021 ops/sec [65,009..68,558] → 67,456 ops/sec [64,443..68,497] ~ overlap (+0.6%)
Number.isInteger 58,416 ops/sec [57,605..59,545] → 58,055 ops/sec [55,574..67,249] ~ overlap (-0.6%) 68,222 ops/sec [67,951..69,990] → 68,228 ops/sec [66,070..78,095] ~ overlap (+0.0%)
Number.parseInt and parseFloat 20,723 ops/sec [20,153..21,464] → 21,357 ops/sec [20,405..25,056] ~ overlap (+3.1%) 22,323 ops/sec [21,730..28,190] → 22,709 ops/sec [22,555..23,124] ~ overlap (+1.7%)
objects.js — Interp: 🔴 1, 7 unch. · avg -0.3% · Bytecode: 🟢 1, 7 unch. · avg +3.6%
Benchmark Interpreted (main → PR) Δ Bytecode (main → PR) Δ
create simple object 133,658 ops/sec [127,930..146,845] → 129,365 ops/sec [126,004..175,837] ~ overlap (-3.2%) 145,917 ops/sec [136,717..193,934] → 148,958 ops/sec [136,621..149,138] ~ overlap (+2.1%)
create nested object 78,916 ops/sec [73,370..82,149] → 73,940 ops/sec [71,102..106,691] ~ overlap (-6.3%) 70,531 ops/sec [68,733..119,712] → 80,572 ops/sec [72,353..89,438] ~ overlap (+14.2%)
create 50 objects via Array.from 2,485 ops/sec [2,450..2,841] → 2,504 ops/sec [2,487..2,702] ~ overlap (+0.8%) 2,264 ops/sec [2,168..2,299] → 2,331 ops/sec [2,311..2,490] 🟢 +3.0%
property read 106,478 ops/sec [99,967..123,194] → 102,399 ops/sec [98,728..109,949] ~ overlap (-3.8%) 347,545 ops/sec [341,565..356,035] → 355,565 ops/sec [341,866..358,402] ~ overlap (+2.3%)
Object.keys 57,094 ops/sec [54,451..65,928] → 56,170 ops/sec [53,690..69,491] ~ overlap (-1.6%) 63,020 ops/sec [62,186..70,022] → 63,392 ops/sec [61,170..63,684] ~ overlap (+0.6%)
Object.keys over 2000 descending-inserted index keys 406 ops/sec [402..453] → 455 ops/sec [403..468] ~ overlap (+12.0%) 420 ops/sec [405..430] → 422 ops/sec [408..440] ~ overlap (+0.4%)
Object.entries 30,448 ops/sec [30,321..34,940] → 29,567 ops/sec [29,091..30,214] 🔴 -2.9% 32,435 ops/sec [31,396..32,743] → 33,502 ops/sec [31,869..33,763] ~ overlap (+3.3%)
spread operator 40,266 ops/sec [39,738..51,177] → 41,385 ops/sec [38,375..56,609] ~ overlap (+2.8%) 49,347 ops/sec [47,711..50,421] → 50,703 ops/sec [49,688..56,075] ~ overlap (+2.7%)
promises.js — Interp: 🔴 1, 11 unch. · avg -3.0% · Bytecode: 🔴 3, 9 unch. · avg -1.1%
Benchmark Interpreted (main → PR) Δ Bytecode (main → PR) Δ
Promise.resolve(value) 55,324 ops/sec [52,355..61,496] → 55,226 ops/sec [53,360..60,112] ~ overlap (-0.2%) 56,587 ops/sec [56,061..56,754] → 56,824 ops/sec [56,349..57,303] ~ overlap (+0.4%)
new Promise(resolve => resolve(value)) 39,127 ops/sec [38,878..48,220] → 39,492 ops/sec [38,418..43,403] ~ overlap (+0.9%) 43,450 ops/sec [43,025..43,938] → 42,812 ops/sec [42,024..48,009] ~ overlap (-1.5%)
Promise.reject(reason) 58,474 ops/sec [56,625..66,247] → 54,489 ops/sec [53,605..55,762] 🔴 -6.8% 60,874 ops/sec [60,590..66,005] → 58,423 ops/sec [57,863..58,590] 🔴 -4.0%
resolve + then (1 handler) 19,983 ops/sec [19,862..24,084] → 18,628 ops/sec [18,443..20,306] ~ overlap (-6.8%) 19,522 ops/sec [19,410..19,554] → 20,454 ops/sec [19,537..24,383] ~ overlap (+4.8%)
resolve + then chain (3 deep) 8,138 ops/sec [7,919..9,811] → 7,967 ops/sec [7,873..8,423] ~ overlap (-2.1%) 8,450 ops/sec [8,155..9,427] → 8,323 ops/sec [8,246..8,473] ~ overlap (-1.5%)
resolve + then chain (10 deep) 2,826 ops/sec [2,737..3,157] → 2,663 ops/sec [2,614..2,748] ~ overlap (-5.7%) 2,815 ops/sec [2,735..3,023] → 2,785 ops/sec [2,716..2,837] ~ overlap (-1.1%)
reject + catch + then 11,821 ops/sec [11,072..15,628] → 11,245 ops/sec [10,785..12,016] ~ overlap (-4.9%) 11,663 ops/sec [11,202..12,011] → 11,399 ops/sec [11,058..11,690] ~ overlap (-2.3%)
resolve + finally + then 5,547 ops/sec [5,109..6,831] → 5,125 ops/sec [5,052..5,574] ~ overlap (-7.6%) 5,443 ops/sec [5,262..5,573] → 5,158 ops/sec [5,120..5,211] 🔴 -5.2%
Promise.all (5 resolved) 3,573 ops/sec [3,541..3,722] → 3,580 ops/sec [3,461..3,661] ~ overlap (+0.2%) 3,687 ops/sec [3,658..3,714] → 3,447 ops/sec [3,406..3,613] 🔴 -6.5%
Promise.race (5 resolved) 4,155 ops/sec [4,061..6,663] → 4,055 ops/sec [3,959..4,523] ~ overlap (-2.4%) 4,030 ops/sec [3,614..4,175] → 4,120 ops/sec [4,032..4,249] ~ overlap (+2.2%)
Promise.allSettled (5 mixed) 3,076 ops/sec [2,991..3,114] → 3,239 ops/sec [3,000..3,773] ~ overlap (+5.3%) 3,083 ops/sec [2,966..3,474] → 3,002 ops/sec [2,929..3,013] ~ overlap (-2.6%)
Promise.any (5 mixed) 3,658 ops/sec [3,577..3,787] → 3,451 ops/sec [3,404..3,927] ~ overlap (-5.7%) 3,640 ops/sec [3,527..4,135] → 3,806 ops/sec [3,470..4,538] ~ overlap (+4.6%)
property-access.js — Interp: 5 unch. · avg +2.7% · Bytecode: 🟢 1, 🔴 1, 3 unch. · avg -2.5%
Benchmark Interpreted (main → PR) Δ Bytecode (main → PR) Δ
class instance fields across 1000 instances 108 ops/sec [105..114] → 113 ops/sec [112..115] ~ overlap (+4.5%) 939 ops/sec [921..979] → 934 ops/sec [910..1,101] ~ overlap (-0.5%)
object literal fields across 1000 literals 115 ops/sec [110..121] → 116 ops/sec [110..117] ~ overlap (+1.0%) 932 ops/sec [919..1,407] → 939 ops/sec [924..956] ~ overlap (+0.8%)
mixed-shape literals across 1000 literals 114 ops/sec [109..121] → 116 ops/sec [112..118] ~ overlap (+2.6%) 703 ops/sec [702..706] → 657 ops/sec [648..692] 🔴 -6.5%
own-class method across 1000 instances 72 ops/sec [70..83] → 73 ops/sec [71..73] ~ overlap (+0.7%) 510 ops/sec [458..608] → 465 ops/sec [456..477] ~ overlap (-8.9%)
inherited method across 1000 instances 78 ops/sec [77..103] → 82 ops/sec [79..106] ~ overlap (+4.4%) 486 ops/sec [484..486] → 497 ops/sec [494..566] 🟢 +2.4%
regexp.js — Interp: 13 unch. · avg +0.3% · Bytecode: 🟢 2, 🔴 2, 9 unch. · avg +0.7%
Benchmark Interpreted (main → PR) Δ Bytecode (main → PR) Δ
regex literal creation 7,229 ops/sec [6,959..11,404] → 6,992 ops/sec [6,876..9,463] ~ overlap (-3.3%) 206,191 ops/sec [199,450..214,420] → 210,454 ops/sec [209,190..211,494] ~ overlap (+2.1%)
new RegExp(pattern, flags) 6,793 ops/sec [6,634..6,985] → 6,934 ops/sec [6,810..11,286] ~ overlap (+2.1%) 7,008 ops/sec [6,980..7,019] → 7,033 ops/sec [6,941..7,119] ~ overlap (+0.4%)
RegExp(existingRegex) returns the same regex 134,428 ops/sec [133,718..138,410] → 136,849 ops/sec [134,031..142,671] ~ overlap (+1.8%) 191,889 ops/sec [191,592..192,395] → 197,253 ops/sec [195,351..198,430] 🟢 +2.8%
test() on a global regex 58,120 ops/sec [56,006..61,734] → 58,912 ops/sec [57,828..59,309] ~ overlap (+1.4%) 79,658 ops/sec [79,622..79,695] → 78,412 ops/sec [77,867..78,839] 🔴 -1.6%
exec() with capture groups 35,216 ops/sec [32,854..40,509] → 33,617 ops/sec [32,174..36,360] ~ overlap (-4.5%) 39,392 ops/sec [38,816..39,832] → 39,898 ops/sec [38,430..40,520] ~ overlap (+1.3%)
toString() 45,465 ops/sec [45,269..56,702] → 45,198 ops/sec [43,434..46,520] ~ overlap (-0.6%) 52,419 ops/sec [50,472..54,049] → 51,754 ops/sec [50,482..59,036] ~ overlap (-1.3%)
match() with global regex 21,010 ops/sec [20,371..22,422] → 20,760 ops/sec [20,527..21,073] ~ overlap (-1.2%) 24,189 ops/sec [23,864..25,005] → 25,234 ops/sec [24,180..26,164] ~ overlap (+4.3%)
match() with many global results 1,022 ops/sec [990..1,039] → 1,010 ops/sec [957..1,309] ~ overlap (-1.2%) 1,031 ops/sec [1,014..1,048] → 1,004 ops/sec [985..1,192] ~ overlap (-2.6%)
matchAll() with capture groups 6,895 ops/sec [6,641..7,344] → 7,517 ops/sec [6,895..8,970] ~ overlap (+9.0%) 9,168 ops/sec [9,126..9,237] → 9,733 ops/sec [9,405..11,626] 🟢 +6.2%
replace() with global regex 19,206 ops/sec [18,806..19,360] → 19,416 ops/sec [19,209..19,477] ~ overlap (+1.1%) 22,754 ops/sec [21,218..23,746] → 23,088 ops/sec [22,752..24,382] ~ overlap (+1.5%)
replace() with many global results 834 ops/sec [801..1,098] → 817 ops/sec [803..840] ~ overlap (-2.0%) 844 ops/sec [835..846] → 818 ops/sec [807..831] 🔴 -3.0%
search() with regex 38,630 ops/sec [38,591..38,770] → 38,689 ops/sec [38,518..41,401] ~ overlap (+0.2%) 50,366 ops/sec [49,766..53,944] → 50,345 ops/sec [49,839..53,366] ~ overlap (-0.0%)
split() with regex separator 9,229 ops/sec [9,195..9,252] → 9,375 ops/sec [9,163..9,514] ~ overlap (+1.6%) 9,748 ops/sec [9,504..9,982] → 9,624 ops/sec [9,478..9,709] ~ overlap (-1.3%)
strings.js — Interp: 19 unch. · avg -0.7% · Bytecode: 🟢 4, 15 unch. · avg +1.5%
Benchmark Interpreted (main → PR) Δ Bytecode (main → PR) Δ
string concatenation 76,285 ops/sec [70,079..100,817] → 76,361 ops/sec [75,699..76,542] ~ overlap (+0.1%) 615,553 ops/sec [564,665..745,220] → 574,943 ops/sec [552,416..677,743] ~ overlap (-6.6%)
template literal 130,067 ops/sec [127,590..135,563] → 129,651 ops/sec [123,994..166,190] ~ overlap (-0.3%) 535,943 ops/sec [476,591..676,925] → 549,596 ops/sec [539,462..570,487] ~ overlap (+2.5%)
string repeat 89,055 ops/sec [86,895..101,579] → 88,410 ops/sec [85,749..102,164] ~ overlap (-0.7%) 110,116 ops/sec [107,402..126,699] → 112,452 ops/sec [108,697..121,447] ~ overlap (+2.1%)
split and join 37,230 ops/sec [34,787..37,519] → 37,614 ops/sec [35,366..38,854] ~ overlap (+1.0%) 50,891 ops/sec [48,797..51,040] → 48,620 ops/sec [48,277..49,371] ~ overlap (-4.5%)
indexOf and includes 37,901 ops/sec [37,559..37,954] → 37,866 ops/sec [36,772..38,733] ~ overlap (-0.1%) 51,700 ops/sec [50,251..51,851] → 52,121 ops/sec [50,774..58,383] ~ overlap (+0.8%)
toUpperCase and toLowerCase 36,403 ops/sec [35,240..38,834] → 35,965 ops/sec [35,553..38,302] ~ overlap (-1.2%) 44,204 ops/sec [43,061..44,670] → 43,782 ops/sec [42,874..49,384] ~ overlap (-1.0%)
slice and substring 34,260 ops/sec [34,101..34,629] → 34,622 ops/sec [34,283..35,521] ~ overlap (+1.1%) 48,315 ops/sec [48,049..48,498] → 47,567 ops/sec [46,822..52,404] ~ overlap (-1.5%)
trim operations 40,751 ops/sec [38,824..43,490] → 39,238 ops/sec [38,692..45,649] ~ overlap (-3.7%) 54,221 ops/sec [53,227..54,654] → 53,422 ops/sec [52,808..65,788] ~ overlap (-1.5%)
replace and replaceAll 44,856 ops/sec [44,617..50,451] → 43,314 ops/sec [42,768..45,311] ~ overlap (-3.4%) 61,153 ops/sec [60,225..61,422] → 70,009 ops/sec [59,339..72,773] ~ overlap (+14.5%)
startsWith and endsWith 31,014 ops/sec [30,762..31,833] → 31,515 ops/sec [29,218..39,374] ~ overlap (+1.6%) 40,448 ops/sec [39,972..42,563] → 41,035 ops/sec [40,698..41,256] ~ overlap (+1.5%)
padStart and padEnd 46,519 ops/sec [45,652..47,955] → 44,792 ops/sec [44,218..45,715] ~ overlap (-3.7%) 62,444 ops/sec [61,137..63,190] → 62,873 ops/sec [62,347..63,286] ~ overlap (+0.7%)
identity tag, no substitutions 103,165 ops/sec [99,328..108,308] → 96,629 ops/sec [96,012..101,695] ~ overlap (-6.3%) 161,312 ops/sec [159,989..162,407] → 167,088 ops/sec [166,415..169,026] 🟢 +3.6%
tag with 1 substitution 21,600 ops/sec [20,836..22,319] → 21,929 ops/sec [20,634..23,256] ~ overlap (+1.5%) 29,810 ops/sec [29,459..33,096] → 29,615 ops/sec [28,963..33,799] ~ overlap (-0.7%)
tag with 3 substitutions 12,115 ops/sec [12,013..13,580] → 12,424 ops/sec [12,278..12,861] ~ overlap (+2.5%) 17,474 ops/sec [17,340..17,697] → 18,113 ops/sec [17,635..18,350] ~ overlap (+3.7%)
tag with 6 substitutions 7,160 ops/sec [6,938..7,374] → 7,325 ops/sec [7,293..7,419] ~ overlap (+2.3%) 10,738 ops/sec [10,514..10,850] → 11,414 ops/sec [11,269..11,456] 🟢 +6.3%
String.raw, no substitutions 87,194 ops/sec [86,325..87,647] → 87,058 ops/sec [86,941..87,329] ~ overlap (-0.2%) 84,577 ops/sec [84,292..84,738] → 86,063 ops/sec [85,482..86,269] 🟢 +1.8%
String.raw, 2 substitutions 59,788 ops/sec [59,545..59,850] → 59,733 ops/sec [59,544..60,187] ~ overlap (-0.1%) 75,575 ops/sec [75,372..75,863] → 78,628 ops/sec [78,346..78,811] 🟢 +4.0%
tag accessing .raw array 39,052 ops/sec [35,461..40,188] → 36,876 ops/sec [36,011..37,462] ~ overlap (-5.6%) 46,790 ops/sec [46,381..49,115] → 49,142 ops/sec [48,756..49,642] ~ overlap (+5.0%)
method as tag (this binding) 14,560 ops/sec [14,229..15,590] → 14,722 ops/sec [14,206..14,913] ~ overlap (+1.1%) 22,752 ops/sec [22,369..23,081] → 22,442 ops/sec [22,253..23,977] ~ overlap (-1.4%)
temporal.js — Interp: 🔴 1, 5 unch. · avg -2.8% · Bytecode: 🟢 1, 5 unch. · avg +2.4%
Benchmark Interpreted (main → PR) Δ Bytecode (main → PR) Δ
PlainDate.add({ months: 1 }) 37,620 ops/sec [37,096..37,979] → 36,949 ops/sec [36,755..37,047] 🔴 -1.8% 40,248 ops/sec [38,486..45,681] → 40,103 ops/sec [39,979..41,274] ~ overlap (-0.4%)
PlainDate.until(..., { largestUnit: 'months' }) 43,741 ops/sec [43,403..44,108] → 43,541 ops/sec [42,658..45,850] ~ overlap (-0.5%) 49,396 ops/sec [47,593..58,239] → 51,515 ops/sec [50,761..55,605] ~ overlap (+4.3%)
Duration.total days relative to PlainDate 39,918 ops/sec [35,092..47,785] → 36,515 ops/sec [36,094..37,963] ~ overlap (-8.5%) 39,287 ops/sec [38,283..40,311] → 41,298 ops/sec [40,673..41,973] 🟢 +5.1%
Duration.round to hours 30,168 ops/sec [29,710..33,772] → 29,630 ops/sec [29,029..30,693] ~ overlap (-1.8%) 31,562 ops/sec [30,772..35,796] → 32,972 ops/sec [32,816..33,398] ~ overlap (+4.5%)
ZonedDateTime.from named time zone 8,718 ops/sec [8,602..8,781] → 8,587 ops/sec [8,497..8,825] ~ overlap (-1.5%) 9,073 ops/sec [8,942..10,163] → 9,198 ops/sec [8,932..9,585] ~ overlap (+1.4%)
ZonedDateTime.since across DST 9,841 ops/sec [9,587..12,229] → 9,562 ops/sec [9,475..9,796] ~ overlap (-2.8%) 10,176 ops/sec [9,901..10,269] → 10,142 ops/sec [10,044..10,526] ~ overlap (-0.3%)
tsv.js — Interp: 🟢 1, 8 unch. · avg +2.8% · Bytecode: 🔴 1, 8 unch. · avg -1.9%
Benchmark Interpreted (main → PR) Δ Bytecode (main → PR) Δ
parse simple 3-column TSV 32,570 ops/sec [31,807..32,958] → 33,968 ops/sec [32,278..34,989] ~ overlap (+4.3%) 37,516 ops/sec [35,833..38,789] → 35,746 ops/sec [35,176..38,157] ~ overlap (-4.7%)
parse 10-row TSV 9,158 ops/sec [8,755..10,651] → 9,479 ops/sec [9,406..9,625] ~ overlap (+3.5%) 9,976 ops/sec [9,887..10,563] → 9,494 ops/sec [9,220..9,547] 🔴 -4.8%
parse 100-row TSV 1,460 ops/sec [1,452..1,469] → 1,572 ops/sec [1,536..1,631] 🟢 +7.7% 1,545 ops/sec [1,534..1,548] → 1,515 ops/sec [1,479..1,537] ~ overlap (-2.0%)
parse TSV with backslash-escaped fields 7,636 ops/sec [7,508..7,915] → 7,991 ops/sec [7,739..9,835] ~ overlap (+4.7%) 8,118 ops/sec [7,992..8,298] → 8,099 ops/sec [8,080..8,108] ~ overlap (-0.2%)
parse without headers (array of arrays) 4,163 ops/sec [4,133..4,216] → 4,334 ops/sec [4,061..4,955] ~ overlap (+4.1%) 4,465 ops/sec [4,364..4,949] → 4,646 ops/sec [4,275..4,827] ~ overlap (+4.1%)
stringify array of objects 11,606 ops/sec [11,024..12,869] → 11,666 ops/sec [11,274..12,436] ~ overlap (+0.5%) 12,294 ops/sec [12,038..12,850] → 12,449 ops/sec [12,317..13,382] ~ overlap (+1.3%)
stringify array of arrays 3,045 ops/sec [2,980..3,141] → 3,021 ops/sec [2,989..3,196] ~ overlap (-0.8%) 3,280 ops/sec [3,048..3,670] → 3,082 ops/sec [3,074..3,115] ~ overlap (-6.0%)
stringify with values needing escaping 9,668 ops/sec [9,551..11,263] → 9,744 ops/sec [9,444..9,852] ~ overlap (+0.8%) 10,396 ops/sec [10,261..10,565] → 10,335 ops/sec [10,194..10,389] ~ overlap (-0.6%)
parse then stringify 3,465 ops/sec [3,420..3,484] → 3,465 ops/sec [3,396..3,736] ~ overlap (+0.0%) 3,597 ops/sec [3,494..4,025] → 3,447 ops/sec [3,414..3,538] ~ overlap (-4.2%)
typed-arrays.js — Interp: 🟢 6, 🔴 1, 15 unch. · avg +1.7% · Bytecode: 🟢 5, 🔴 4, 13 unch. · avg +4.5%
Benchmark Interpreted (main → PR) Δ Bytecode (main → PR) Δ
new Int32Array(0) 85,109 ops/sec [82,509..86,403] → 85,066 ops/sec [84,409..86,531] ~ overlap (-0.1%) 107,499 ops/sec [106,179..138,124] → 110,665 ops/sec [105,435..125,317] ~ overlap (+2.9%)
new Int32Array(100) 78,596 ops/sec [76,486..80,227] → 80,107 ops/sec [78,055..89,413] ~ overlap (+1.9%) 100,088 ops/sec [99,762..105,450] → 101,641 ops/sec [101,518..102,557] ~ overlap (+1.6%)
new Int32Array(1000) 64,751 ops/sec [63,508..65,725] → 63,320 ops/sec [62,946..63,489] 🔴 -2.2% 77,839 ops/sec [76,872..79,317] → 79,448 ops/sec [78,837..79,909] ~ overlap (+2.1%)
new Float64Array(100) 78,223 ops/sec [77,492..78,809] → 77,287 ops/sec [76,006..78,761] ~ overlap (-1.2%) 95,735 ops/sec [95,543..95,785] → 99,078 ops/sec [98,392..99,304] 🟢 +3.5%
Int32Array.from([...]) 1,211 ops/sec [1,179..1,221] → 1,222 ops/sec [1,202..1,224] ~ overlap (+0.9%) 1,173 ops/sec [1,150..1,209] → 1,204 ops/sec [1,180..1,237] ~ overlap (+2.6%)
Int32Array.of(1, 2, 3, 4, 5) 57,807 ops/sec [56,829..58,853] → 57,577 ops/sec [57,224..57,989] ~ overlap (-0.4%) 65,120 ops/sec [64,733..65,658] → 65,211 ops/sec [64,458..66,750] ~ overlap (+0.1%)
sequential write 100 elements 939 ops/sec [811..1,554] → 924 ops/sec [920..962] ~ overlap (-1.6%) 9,142 ops/sec [9,091..9,230] → 8,662 ops/sec [8,503..8,701] 🔴 -5.2%
sequential read 100 elements 1,561 ops/sec [1,555..1,573] → 1,035 ops/sec [1,023..1,608] ~ overlap (-33.7%) 9,282 ops/sec [9,253..9,331] → 8,962 ops/sec [8,766..9,848] ~ overlap (-3.4%)
Float64Array write 100 elements 1,384 ops/sec [1,376..1,396] → 1,400 ops/sec [1,396..1,404] ~ overlap (+1.2%) 7,028 ops/sec [6,993..7,268] → 6,904 ops/sec [6,839..6,957] 🔴 -1.8%
fill(42) 11,507 ops/sec [11,433..11,581] → 11,544 ops/sec [11,414..11,572] ~ overlap (+0.3%) 6,451 ops/sec [6,432..6,492] → 6,492 ops/sec [6,441..6,777] ~ overlap (+0.6%)
slice() 67,656 ops/sec [67,621..67,760] → 68,569 ops/sec [68,108..68,917] 🟢 +1.3% 49,816 ops/sec [49,552..49,935] → 49,050 ops/sec [48,296..49,592] ~ overlap (-1.5%)
map(x => x * 2) 2,928 ops/sec [2,922..2,937] → 2,531 ops/sec [1,778..2,969] ~ overlap (-13.6%) 1,976 ops/sec [1,955..1,977] → 3,430 ops/sec [3,393..3,443] 🟢 +73.6%
filter(x => x > 50) 2,918 ops/sec [2,817..2,960] → 2,966 ops/sec [2,944..2,975] ~ overlap (+1.6%) 3,515 ops/sec [3,379..3,520] → 3,601 ops/sec [3,586..3,656] 🟢 +2.4%
reduce (sum) 3,009 ops/sec [2,952..3,024] → 3,060 ops/sec [3,029..3,063] 🟢 +1.7% 3,341 ops/sec [1,972..3,369] → 3,327 ops/sec [3,301..3,340] ~ overlap (-0.4%)
sort() 20,844 ops/sec [20,676..22,154] → 36,257 ops/sec [35,971..36,275] 🟢 +73.9% 37,527 ops/sec [36,960..37,843] → 37,567 ops/sec [37,439..37,648] ~ overlap (+0.1%)
indexOf() 41,409 ops/sec [41,225..41,470] → 41,817 ops/sec [41,805..41,859] 🟢 +1.0% 45,353 ops/sec [45,077..45,650] → 44,654 ops/sec [44,494..44,760] 🔴 -1.5%
reverse() 50,994 ops/sec [49,752..51,530] → 51,512 ops/sec [51,389..51,607] ~ overlap (+1.0%) 54,173 ops/sec [53,877..54,345] → 54,156 ops/sec [50,473..54,548] ~ overlap (-0.0%)
create view over existing buffer 158,171 ops/sec [155,018..159,404] → 161,864 ops/sec [160,761..162,678] 🟢 +2.3% 215,916 ops/sec [214,983..216,986] → 227,365 ops/sec [225,120..228,991] 🟢 +5.3%
subarray() 78,759 ops/sec [78,313..78,927] → 78,374 ops/sec [78,041..79,081] ~ overlap (-0.5%) 90,302 ops/sec [89,372..91,648] → 89,665 ops/sec [88,813..90,825] ~ overlap (-0.7%)
set() from array 102,078 ops/sec [101,816..102,446] → 102,455 ops/sec [102,106..102,692] ~ overlap (+0.4%) 97,227 ops/sec [96,746..97,918] → 118,737 ops/sec [118,509..119,149] 🟢 +22.1%
for-of loop 2,173 ops/sec [2,152..2,207] → 2,179 ops/sec [2,117..2,190] ~ overlap (+0.3%) 18,717 ops/sec [18,532..18,771] → 19,029 ops/sec [18,464..19,129] ~ overlap (+1.7%)
spread into array 8,697 ops/sec [8,589..8,723] → 8,912 ops/sec [8,887..8,961] 🟢 +2.5% 31,228 ops/sec [30,696..31,429] → 29,469 ops/sec [29,036..29,879] 🔴 -5.6%
uint8array-encoding.js — Interp: 🔴 5, 13 unch. · avg +1.5% · Bytecode: 🟢 2, 🔴 4, 12 unch. · avg +4.0%
Benchmark Interpreted (main → PR) Δ Bytecode (main → PR) Δ
short (5 bytes) 115,622 ops/sec [112,836..116,291] → 111,391 ops/sec [107,513..112,433] 🔴 -3.7% 136,580 ops/sec [134,896..136,955] → 133,355 ops/sec [131,459..135,195] ~ overlap (-2.4%)
medium (450 bytes) 77,848 ops/sec [77,131..82,956] → 75,521 ops/sec [73,267..91,317] ~ overlap (-3.0%) 87,143 ops/sec [86,727..87,901] → 85,038 ops/sec [83,445..85,957] 🔴 -2.4%
large (4096 bytes) 21,614 ops/sec [21,215..22,236] → 21,679 ops/sec [21,616..21,906] ~ overlap (+0.3%) 22,956 ops/sec [22,831..22,987] → 22,108 ops/sec [22,011..22,213] 🔴 -3.7%
base64url alphabet 59,915 ops/sec [59,038..61,474] → 60,239 ops/sec [59,785..61,029] ~ overlap (+0.5%) 66,618 ops/sec [65,437..67,234] → 64,355 ops/sec [60,987..65,504] ~ overlap (-3.4%)
omitPadding 82,702 ops/sec [81,696..84,365] → 81,156 ops/sec [80,419..91,973] ~ overlap (-1.9%) 89,839 ops/sec [87,684..92,214] → 89,296 ops/sec [88,313..101,401] ~ overlap (-0.6%)
short (8 chars) 93,985 ops/sec [90,574..94,946] → 87,549 ops/sec [87,213..90,215] 🔴 -6.8% 101,615 ops/sec [99,132..102,218] → 101,713 ops/sec [99,408..103,251] ~ overlap (+0.1%)
medium (600 chars) 17,902 ops/sec [17,660..19,043] → 17,517 ops/sec [17,276..17,696] ~ overlap (-2.2%) 18,118 ops/sec [17,844..18,322] → 18,000 ops/sec [17,878..18,193] ~ overlap (-0.7%)
large (5464 chars) 2,333 ops/sec [2,308..2,371] → 2,320 ops/sec [2,224..2,381] ~ overlap (-0.6%) 2,335 ops/sec [2,268..2,377] → 2,327 ops/sec [2,317..2,343] ~ overlap (-0.3%)
short (5 bytes) 117,425 ops/sec [116,960..117,937] → 115,494 ops/sec [114,885..116,827] 🔴 -1.6% 144,177 ops/sec [140,198..146,297] → 143,148 ops/sec [141,415..144,040] ~ overlap (-0.7%)
medium (450 bytes) 71,544 ops/sec [70,751..72,236] → 71,340 ops/sec [68,350..74,085] ~ overlap (-0.3%) 84,292 ops/sec [80,695..84,826] → 79,019 ops/sec [78,793..79,192] 🔴 -6.3%
large (4096 bytes) 17,175 ops/sec [16,894..17,373] → 17,104 ops/sec [16,751..17,214] ~ overlap (-0.4%) 17,669 ops/sec [17,299..18,703] → 18,714 ops/sec [17,344..21,395] ~ overlap (+5.9%)
short (10 chars) 105,717 ops/sec [104,374..108,479] → 101,895 ops/sec [100,101..103,389] 🔴 -3.6% 113,174 ops/sec [112,788..116,144] → 111,704 ops/sec [111,311..111,744] 🔴 -1.3%
medium (900 chars) 78,032 ops/sec [77,740..78,428] → 76,220 ops/sec [75,574..77,573] 🔴 -2.3% 80,079 ops/sec [79,375..81,938] → 81,743 ops/sec [80,802..82,320] ~ overlap (+2.1%)
large (8192 chars) 25,624 ops/sec [23,221..28,400] → 23,796 ops/sec [23,056..23,886] ~ overlap (-7.1%) 25,847 ops/sec [24,337..27,138] → 24,475 ops/sec [23,722..24,844] ~ overlap (-5.3%)
setFromBase64 (450 bytes) 16,614 ops/sec [16,492..16,785] → 16,896 ops/sec [16,766..17,220] ~ overlap (+1.7%) 17,172 ops/sec [17,074..17,939] → 17,101 ops/sec [17,040..17,416] ~ overlap (-0.4%)
setFromHex (450 bytes) 21,440 ops/sec [20,462..21,657] → 20,361 ops/sec [20,138..20,482] ~ overlap (-5.0%) 21,349 ops/sec [21,246..21,409] → 20,903 ops/sec [20,473..22,708] ~ overlap (-2.1%)
toBase64 → fromBase64 (450 bytes) 15,358 ops/sec [15,089..16,145] → 15,315 ops/sec [15,249..15,539] ~ overlap (-0.3%) 15,583 ops/sec [15,329..15,648] → 19,152 ops/sec [15,733..27,202] 🟢 +22.9%
toHex → fromHex (450 bytes) 42,484 ops/sec [42,013..42,873] → 69,091 ops/sec [42,112..69,502] ~ overlap (+62.6%) 43,192 ops/sec [42,777..44,599] → 73,652 ops/sec [73,012..74,050] 🟢 +70.5%
weak-collections.js — Interp: 🟢 8, 🔴 1, 6 unch. · avg +1.7% · Bytecode: 🔴 6, 9 unch. · avg -18.0%
Benchmark Interpreted (main → PR) Δ Bytecode (main → PR) Δ
constructor from 50 entries 7,497 ops/sec [7,024..10,704] → 7,305 ops/sec [6,998..7,517] ~ overlap (-2.6%) 7,340 ops/sec [7,254..7,889] → 7,044 ops/sec [6,962..7,320] ~ overlap (-4.0%)
set 50 object keys 2,475 ops/sec [2,455..2,837] → 4,091 ops/sec [3,880..4,105] 🟢 +65.3% 2,896 ops/sec [2,848..2,962] → 2,858 ops/sec [2,854..2,887] ~ overlap (-1.3%)
get lookups (50 entries) 34,147 ops/sec [33,969..34,316] → 34,874 ops/sec [34,753..35,086] 🟢 +2.1% 57,570 ops/sec [57,096..58,343] → 58,072 ops/sec [57,516..58,634] ~ overlap (+0.9%)
has checks (50 entries) 45,598 ops/sec [44,868..45,638] → 46,169 ops/sec [45,422..46,375] ~ overlap (+1.3%) 75,097 ops/sec [72,857..77,265] → 76,708 ops/sec [75,900..77,347] ~ overlap (+2.1%)
delete entries 2,324 ops/sec [2,309..2,351] → 2,372 ops/sec [2,363..2,377] 🟢 +2.1% 2,735 ops/sec [2,713..2,919] → 2,811 ops/sec [2,797..2,816] ~ overlap (+2.8%)
non-registered symbol keys 5,538 ops/sec [5,503..5,568] → 6,722 ops/sec [5,649..9,206] 🟢 +21.4% 11,208 ops/sec [11,130..11,260] → 6,932 ops/sec [6,899..6,995] 🔴 -38.2%
getOrInsert 2,141 ops/sec [2,133..2,160] → 2,178 ops/sec [2,164..2,183] 🟢 +1.7% 4,516 ops/sec [2,695..4,543] → 2,747 ops/sec [2,746..2,750] ~ overlap (-39.2%)
getOrInsertComputed 2,031 ops/sec [1,328..2,036] → 1,366 ops/sec [1,351..1,372] ~ overlap (-32.8%) 2,443 ops/sec [2,434..2,454] → 1,483 ops/sec [1,471..1,519] 🔴 -39.3%
forced gc live-key retention 870 ops/sec [689..1,563] → 786 ops/sec [771..937] ~ overlap (-9.6%) 882 ops/sec [810..924] → 685 ops/sec [564..879] ~ overlap (-22.3%)
constructor from 50 values 8,836 ops/sec [8,677..8,926] → 8,935 ops/sec [8,830..9,139] ~ overlap (+1.1%) 9,353 ops/sec [9,227..9,968] → 8,674 ops/sec [8,561..9,005] 🔴 -7.3%
add 50 object values 2,634 ops/sec [2,628..2,642] → 2,695 ops/sec [2,667..2,704] 🟢 +2.3% 3,159 ops/sec [3,156..3,163] → 3,073 ops/sec [3,039..3,083] 🔴 -2.7%
has checks (50 values) 45,148 ops/sec [45,044..45,226] → 45,971 ops/sec [45,774..46,221] 🟢 +1.8% 76,360 ops/sec [74,717..77,343] → 77,309 ops/sec [76,324..78,027] ~ overlap (+1.2%)
delete values 6,902 ops/sec [6,863..7,045] → 7,233 ops/sec [7,200..7,245] 🟢 +4.8% 12,860 ops/sec [7,676..13,301] → 7,881 ops/sec [7,793..8,127] ~ overlap (-38.7%)
non-registered symbol values 5,741 ops/sec [5,696..9,379] → 5,976 ops/sec [5,931..6,004] ~ overlap (+4.1%) 11,960 ops/sec [11,867..11,982] → 7,184 ops/sec [7,170..7,217] 🔴 -39.9%
forced gc pruning smoke 1,291 ops/sec [1,270..1,305] → 804 ops/sec [617..982] 🔴 -37.7% 1,533 ops/sec [1,503..1,714] → 859 ops/sec [727..961] 🔴 -44.0%

Deterministic profile diff

Deterministic profile diff: no significant changes.

Measured on ubuntu-latest x64. Each PR run also builds the main base and benchmarks it back-to-back on the same runner after a warm-up discard, so the ranges compare two runs measured under the same conditions; overlapping min/max ranges are treated as unchanged noise. Percentage deltas are secondary context. See docs/adr/0076.

@github-actions

github-actions Bot commented Sep 8, 2026

Copy link
Copy Markdown
Contributor Author

test262 Conformance

10 timeout(s) — counted separately from ordinary conformance failures; inspect the full artifact for affected tests.

Category Run Passed Δ Pass Failed Timeouts Δ Timeout Wrap-Infra Pass-rate Δ Rate
built-ins 23,814 23,721 +2 93 0 ±0 0 99.6% ±0pp
harness 116 116 ±0 0 0 ±0 0 100.0% ±0pp
intl402 3,357 3,344 ±0 12 1 ±0 0 99.6% ±0pp
language 23,726 23,719 ±0 7 0 ±0 0 100.0% ±0pp
staging 1,483 1,389 +2 85 9 -2 0 93.7% +0.1pp
total 52,496 52,289 +4 197 10 -2 0 99.6% ±0pp

Areas closest to 100%

Area Pass rate Δ vs main Passing
language/expressions 100.0% ±0pp 11,101 / 11,102
intl402/Temporal 100.0% ±0pp 2,028 / 2,029
language/statements 99.9% ±0pp 9,341 / 9,347
Per-test deltas (+0 / -0 / timeout +0 / -2)

Resolved timeouts (2):

  • staging/sm/extensions/recursion.js
  • staging/sm/regress/regress-610026.js

Steady-state failures and timeouts are non-blocking; PASS → non-timeout failure transitions fail the conformance gate. Measured on ubuntu-latest x64, bytecode mode. Areas grouped by the first two test262 path components; minimum 25 attempted tests, areas already at 100% excluded. Δ vs main compares against the most recent cached main baseline.

@github-actions

github-actions Bot commented Sep 8, 2026

Copy link
Copy Markdown
Contributor Author

JetStream 3 Performance Barometer

Workload Status Goccia main Goccia PR QuickJS Node.js vs QuickJS vs Node.js
hash-map pass 0.61 0.61 13.46 313.12 22.11× 514.58×
ai-astar pass 1.62 1.62 41.59 379.18 25.73× 234.57×
gaussian-blur pass 0.38 0.38 7.50 281.28 19.59× 735.02×
raytrace-public-class-fields pass 0.42 0.42 10.93 192.59 25.76× 454.02×
sync-fs pass 0.89 0.88 27.21 216.64 30.79× 245.13×
lazy-collections pass 2.18 2.19 68.24 146.89 31.10× 66.94×

Geomean reference ratio: QuickJS 25.50×; Node.js 295.14×.

1.00× means aligned; values above 1.00× mean Goccia was proportionally slower after normalizing JetStream’s higher-is-better score. This is a directional barometer across runtimes with different goals, not a product ranking. Raw samples and failure details remain in the jetstream-report artifact.

@github-actions

github-actions Bot commented Sep 8, 2026

Copy link
Copy Markdown
Contributor Author

AWFY Results

Target Status Goccia main Goccia PR QuickJS 2026-06-04 NodeJS v26.8.1 Δ PR vs main
Bounce pass 19.10ms 19.02ms 1.04ms 1.13ms ~ overlap (+0.46%)
CD pass 207.06ms 207.91ms 10.73ms 9.77ms ~ overlap (-0.41%)
DeltaBlue pass 4.42ms 4.39ms 305.45µs 1.87ms ~ overlap (+0.62%)
Havlak pass 78.81s 79.01s 4065.75ms 186.24ms ~ overlap (-0.25%)
Json pass 355.52ms 352.03ms 14.38ms 4.67ms ~ overlap (+0.98%)
List pass 13.68ms 13.50ms 1.04ms 0.72ms ~ overlap (+1.32%)
Mandelbrot pass 29.38µs 30.46µs 5.06µs 90.37µs 🔴 -3.65%
NBody pass 388.08µs 438.24µs 27.38µs 382.48µs ~ overlap (-12.93%)
Permute pass 39.22ms 38.92ms 1.88ms 0.72ms 🟢 +0.76%
Queens pass 20.00ms 19.71ms 1.24ms 1.05ms ~ overlap (+1.42%)
Richards pass 639.05ms 638.62ms 51.47ms 6.85ms ~ overlap (+0.07%)
Sieve pass 13.66ms 13.51ms 0.58ms 0.50ms ~ overlap (+1.05%)
Storage pass 36.04ms 37.00ms 2.94ms 1.03ms 🔴 -2.66%
Towers pass 50.99ms 50.34ms 3.15ms 1.10ms ~ overlap (+1.27%)

Geomean Ratios

Ratio (row / column) Goccia main Goccia PR QuickJS 2026-06-04 NodeJS v26.8.1
Goccia main 1.000 0.992 15.628 18.880
Goccia PR 1.008 1.000 15.752 19.029
QuickJS 2026-06-04 0.064 0.063 1.000 1.208
NodeJS v26.8.1 0.053 0.053 0.828 1.000

14 pinned AWFY benchmarks. Medians from 5 interleaved samples per engine; raw JSON includes min/max/CV and is attached as the awfy-report artifact. Δ compares PR Goccia median against the same-runner main Goccia median; overlapping min/max ranges are treated as unchanged noise. Rows below 0.5ms are timer-floor sensitive.

@github-actions github-actions Bot changed the title chore(test262): bump pin to 419d3e0a chore(test262): bump pin to aae8cf6e Sep 14, 2026
@coderabbitai

coderabbitai Bot commented Sep 14, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Bot user detected.

To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Advanced

Run ID: f5ded18f-9b97-4beb-9542-8a63ef94a6be

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Comment @coderabbitai help to get the list of available commands.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

automated Pull request completely generated by automation spec compliance Mismatch against official JavaScript/TypeScript specification

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant