Skip to content

chore(skills): sync provisioned skills#990

Merged
frostney merged 1 commit into
mainfrom
chore/agent-skills-bump
Jul 20, 2026
Merged

chore(skills): sync provisioned skills#990
frostney merged 1 commit into
mainfrom
chore/agent-skills-bump

Conversation

@github-actions

Copy link
Copy Markdown
Contributor

Automated refresh of the lock-managed project skills and skills-lock.json.

Repo-native skills are not managed by this workflow. Review upstream
instruction changes before merging.

Cron: weekly, Mondays 08:00 UTC. See .github/workflows/agent-skills-bump.yml.

@github-actions github-actions Bot added the automated Pull request completely generated by automation label Jul 20, 2026
@vercel

vercel Bot commented Jul 20, 2026

Copy link
Copy Markdown

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

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
gocciascript-homepage Ignored Ignored Preview Jul 20, 2026 9:02am

Request Review

@github-actions

Copy link
Copy Markdown
Contributor Author

Web Tooling Benchmark

Workload Status Goccia
acorn pass 0.01 runs/s
babel pass 0.01 runs/s
babel-minify pass 0.09 runs/s
babylon pass 0.03 runs/s
buble pass 0.08 runs/s
chai pass 0.09 runs/s
coffeescript pass 0.01 runs/s
espree pass 0.01 runs/s
esprima pass 0.01 runs/s
jshint pass 0.02 runs/s
lebab pass 0.08 runs/s
postcss pass 0.01 runs/s
prepack pass 0.11 runs/s
prettier pass 0.06 runs/s
source-map pass 0.03 runs/s
terser pass 165 runs/s
typescript pass 0.09 runs/s
uglify-js pass 107 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

Copy link
Copy Markdown
Contributor Author

Suite Timing

Test Runner (interpreted: 11,497 passed; bytecode: 11,497 passed)
Metric Interpreted Bytecode
Total 11497 11497
Passed 11497 ✅ 11497 ✅
Workers 4 4
Test Duration 12.73s 12.23s
Lex (cumulative) 622.9ms 663.0ms
Parse (cumulative) 475.2ms 491.4ms
Compile (cumulative) 1.08s
Execute (cumulative) 304.8ms 14.20s
Engine Total (cumulative) 1.40s 16.43s
Lex (avg/worker) 155.7ms 165.7ms
Parse (avg/worker) 118.8ms 122.9ms
Compile (avg/worker) 269.0ms
Execute (avg/worker) 76.2ms 3.55s
Engine Total (avg/worker) 350.7ms 4.11s

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 66.35 MiB 63.21 MiB
GC Peak Live 200.06 MiB 188.13 MiB
GC Allocated During Run 520.84 MiB 453.86 MiB
GC Limit 7.81 GiB 7.81 GiB
GC Collections 226 226
GC Collected Objects 4,370,709 3,833,477
Heap Start Allocated 196.6 KiB 196.6 KiB
Heap End Allocated 2.35 MiB 2.35 MiB
Heap Delta Allocated 2.16 MiB 2.16 MiB
Heap Delta Free 2.00 MiB 2.00 MiB
Benchmarks (interpreted: 439; bytecode: 439)
Metric Interpreted Bytecode
Total 439 439
Workers 4 4
Duration 3.02min 2.93min

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 808 B 808 B
GC Peak Live 143.75 MiB 66.17 MiB
GC Allocated During Run 15.55 GiB 9.65 GiB
GC Limit 7.81 GiB 7.81 GiB
GC Collections 5,989 7,582
GC Collected Objects 227,962,365 213,024,432
Heap Start Allocated 1.33 MiB 1.33 MiB
Heap End Allocated 1.33 MiB 1.33 MiB
Heap Delta Allocated 128 B 128 B
Boot
Metric Interpreted Bytecode
Boot (median) 5.7ms 5.8ms
Boot (min) 5.6ms 5.8ms

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

Copy link
Copy Markdown
Contributor Author

Benchmark Results

439 benchmarks · PR vs same-runner main build

Interpreted: 🟢 21 improved · 🔴 40 regressed · 378 unchanged · avg -0.6%
Bytecode: 🟢 34 improved · 🔴 49 regressed · 356 unchanged · avg -0.1%

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

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

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

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.74 0.74 17.46 411.84 23.49× 554.29×
ai-astar pass 1.63 1.65 40.53 337.09 24.62× 204.81×
gaussian-blur pass 0.35 0.36 7.72 297.55 21.47× 827.29×
raytrace-public-class-fields pass 0.40 0.40 11.13 195.30 27.73× 486.67×
sync-fs pass 1.29 1.28 33.89 284.23 26.46× 221.90×
lazy-collections pass 2.05 2.06 68.38 149.83 33.21× 72.76×

Geomean reference ratio: QuickJS 25.91×; Node.js 300.61×.

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

Copy link
Copy Markdown
Contributor Author

test262 Conformance

9 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,668 23,668 ±0 0 0 ±0 0 100.0% ±0pp
harness 116 116 ±0 0 0 ±0 0 100.0% ±0pp
intl402 3,341 3,338 ±0 3 0 ±0 0 99.9% ±0pp
language 23,713 23,712 ±0 1 0 ±0 0 100.0% ±0pp
staging 1,482 1,385 ±0 88 9 ±0 0 93.5% ±0pp
total 52,320 52,219 ±0 92 9 ±0 0 99.8% ±0pp

Areas closest to 100%

Area Pass rate Δ vs main Passing
language/expressions 100.0% ±0pp 11,101 / 11,102
intl402/NumberFormat 99.6% ±0pp 248 / 249
intl402/Locale 99.3% ±0pp 151 / 152

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

Copy link
Copy Markdown
Contributor Author

AWFY Results

Target Status Goccia main Goccia PR QuickJS 2026-06-04 NodeJS v26.5.0 Δ PR vs main
Bounce pass 21.39ms 21.71ms 1.09ms 1.06ms ~ overlap (-1.49%)
CD pass 199.91ms 199.25ms 9.76ms 9.33ms ~ overlap (+0.33%)
DeltaBlue pass 4.61ms 4.61ms 302.11µs 1.59ms ~ overlap (-0.07%)
Havlak pass 77.75s 77.67s 4290.15ms 189.77ms ~ overlap (+0.11%)
Json pass 328.01ms 329.70ms 14.01ms 4.09ms ~ overlap (-0.52%)
List pass 15.59ms 15.22ms 1.00ms 0.78ms 🟢 +2.43%
Mandelbrot pass 32.98µs 34.14µs 5.71µs 89.26µs 🔴 -3.52%
NBody pass 416.51µs 386.75µs 31.43µs 364.24µs 🟢 +7.14%
Permute pass 37.23ms 37.92ms 1.89ms 0.78ms ~ overlap (-1.86%)
Queens pass 19.90ms 20.02ms 1.29ms 1.00ms ~ overlap (-0.59%)
Richards pass 881.78ms 890.28ms 52.01ms 6.56ms ~ overlap (-0.96%)
Sieve pass 12.18ms 12.06ms 0.58ms 0.58ms ~ overlap (+0.98%)
Storage pass 31.33ms 31.47ms 3.04ms 1.07ms ~ overlap (-0.46%)
Towers pass 56.19ms 56.98ms 3.11ms 1.20ms 🔴 -1.40%

Geomean Ratios

Ratio (row / column) Goccia main Goccia PR QuickJS 2026-06-04 NodeJS v26.5.0
Goccia main 1.000 1.000 15.858 19.655
Goccia PR 1.000 1.000 15.852 19.647
QuickJS 2026-06-04 0.063 0.063 1.000 1.239
NodeJS v26.5.0 0.051 0.051 0.807 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.

@frostney
frostney merged commit ff30c6b into main Jul 20, 2026
48 checks passed
@frostney
frostney deleted the chore/agent-skills-bump branch July 20, 2026 11:16
@frostney frostney mentioned this pull request Jul 21, 2026
4 tasks
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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant