Skip to content

chore(skills): sync provisioned skills#996

Merged
frostney merged 1 commit into
mainfrom
codex/update-project-skills
Jul 21, 2026
Merged

chore(skills): sync provisioned skills#996
frostney merged 1 commit into
mainfrom
codex/update-project-skills

Conversation

@frostney

Copy link
Copy Markdown
Owner

Summary

  • Install the roadmap-review skill from frostney/known-good-route.
  • Sync the current create-pr and software-engineering-excellence skill content.
  • Refresh skills-lock.json with the validated provisioned-skill hashes.

Testing

  • Verified no regressions and confirmed the new feature or bugfix in end-to-end JavaScript/TypeScript tests
  • Updated documentation
  • Optional: Verified no regressions and confirmed the new feature or bugfix in native Pascal tests (if AST, scope, evaluator, or value types changed)
  • Optional: Verified no benchmark regressions or confirmed benchmark coverage for the change

Additional verification: scripts/test-skill-inventory-validator.js (6 assertions) and live inventory validation for all 21 lock-managed skills.

@vercel

vercel Bot commented Jul 21, 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 21, 2026 8:00am

Request Review

@coderabbitai

coderabbitai Bot commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

You’ve reached a temporary PR review limit under our Fair Usage Limits Policy.

Your recent review volume is higher than typical usage, so adaptive limits are currently applied.

Next review available in: 59 minutes

Your organization has reached its usage spending cap. Adjust your spending cap in the billing tab.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 094305c4-beb4-4e74-a60c-a118fc703427

📥 Commits

Reviewing files that changed from the base of the PR and between 31c2977 and a5f4e1e.

📒 Files selected for processing (4)
  • .agents/skills/create-pr/SKILL.md
  • .agents/skills/roadmap-review/SKILL.md
  • .agents/skills/software-engineering-excellence/references/investigation.md
  • skills-lock.json

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

@github-actions

Copy link
Copy Markdown
Contributor

Web Tooling Benchmark

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

Suite Timing

Test Runner (interpreted: 11,517 passed; bytecode: 11,517 passed)
Metric Interpreted Bytecode
Total 11517 11517
Passed 11517 ✅ 11517 ✅
Workers 4 4
Test Duration 17.73s 15.83s
Lex (cumulative) 1.72s 1.57s
Parse (cumulative) 932.1ms 821.4ms
Compile (cumulative) 994.1ms
Execute (cumulative) 376.7ms 14.73s
Engine Total (cumulative) 3.03s 18.12s
Lex (avg/worker) 429.3ms 393.3ms
Parse (avg/worker) 233.0ms 205.3ms
Compile (avg/worker) 248.5ms
Execute (avg/worker) 94.2ms 3.68s
Engine Total (avg/worker) 756.5ms 4.53s

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 64.14 MiB 62.39 MiB
GC Peak Live 198.36 MiB 192.60 MiB
GC Allocated During Run 521.35 MiB 454.36 MiB
GC Limit 7.81 GiB 7.81 GiB
GC Collections 226 226
GC Collected Objects 4,395,567 3,845,245
Heap Start Allocated 326.3 KiB 326.3 KiB
Heap End Allocated 2.89 MiB 2.90 MiB
Heap Delta Allocated 2.58 MiB 2.58 MiB
Heap Delta Free 2.24 MiB 2.24 MiB
Benchmarks (interpreted: 439; bytecode: 439)
Metric Interpreted Bytecode
Total 439 439
Workers 4 4
Duration 2.96min 3.07min

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 151.69 MiB 63.49 MiB
GC Allocated During Run 18.46 GiB 9.64 GiB
GC Limit 7.81 GiB 7.81 GiB
GC Collections 6,185 7,471
GC Collected Objects 270,714,335 211,884,957
Heap Start Allocated 1.36 MiB 1.36 MiB
Heap End Allocated 1.37 MiB 1.37 MiB
Heap Delta Allocated 3.2 KiB 3.2 KiB
Boot
Metric Interpreted Bytecode
Boot (median) 7.2ms 7.3ms
Boot (min) 7.1ms 7.2ms

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

Benchmark Results

439 benchmarks · PR vs same-runner main build

Interpreted: 🟢 60 improved · 🔴 50 regressed · 329 unchanged · avg -0.2%
Bytecode: 🟢 27 improved · 🔴 44 regressed · 368 unchanged · avg -0.9%

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

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

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

JetStream 3 Performance Barometer

Workload Status Goccia main Goccia PR QuickJS Node.js vs QuickJS vs Node.js
hash-map pass 0.53 0.53 13.66 337.72 25.85× 639.18×
ai-astar pass 1.54 1.55 40.15 351.05 25.93× 226.66×
gaussian-blur pass 0.44 0.44 11.25 283.47 25.29× 637.39×
raytrace-public-class-fields pass 0.40 0.40 11.02 184.64 27.49× 460.56×
sync-fs pass 1.01 1.00 26.45 222.93 26.55× 223.73×
lazy-collections pass 2.21 2.06 70.38 151.78 34.21× 73.77×

Geomean reference ratio: QuickJS 27.40×; Node.js 298.12×.

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

AWFY Results

Target Status Goccia main Goccia PR QuickJS 2026-06-04 NodeJS v26.5.0 Δ PR vs main
Bounce pass 13.44ms 13.45ms 0.66ms 0.73ms ~ overlap (-0.06%)
CD pass 130.18ms 130.07ms 6.77ms 7.53ms ~ overlap (+0.08%)
DeltaBlue pass 3.26ms 3.49ms 222.47µs 1.17ms ~ overlap (-7.20%)
Havlak pass 52.87s 53.42s 2660.68ms 152.62ms ~ overlap (-1.02%)
Json pass 220.06ms 220.10ms 8.82ms 3.00ms ~ overlap (-0.02%)
List pass 10.03ms 10.05ms 0.68ms 0.51ms ~ overlap (-0.21%)
Mandelbrot pass 19.85µs 19.88µs 4.26µs 59.85µs ~ overlap (-0.15%)
NBody pass 223.19µs 226.32µs 18.79µs 238.57µs ~ overlap (-1.40%)
Permute pass 26.27ms 26.38ms 1.15ms 0.60ms ~ overlap (-0.42%)
Queens pass 14.07ms 14.12ms 0.76ms 0.79ms ~ overlap (-0.34%)
Richards pass 594.82ms 595.60ms 35.12ms 4.30ms ~ overlap (-0.13%)
Sieve pass 8.74ms 8.75ms 336.28µs 403.24µs ~ overlap (-0.13%)
Storage pass 20.86ms 20.94ms 1.67ms 0.74ms ~ overlap (-0.36%)
Towers pass 38.17ms 38.22ms 1.89ms 0.83ms ~ overlap (-0.12%)

Geomean Ratios

Ratio (row / column) Goccia main Goccia PR QuickJS 2026-06-04 NodeJS v26.5.0
Goccia main 1.000 0.992 16.498 18.132
Goccia PR 1.008 1.000 16.631 18.278
QuickJS 2026-06-04 0.061 0.060 1.000 1.099
NodeJS v26.5.0 0.055 0.055 0.910 1.000

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

@github-actions

Copy link
Copy Markdown
Contributor

test262 Conformance

13 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,349 3,340 ±0 8 1 ±0 0 99.7% ±0pp
language 23,713 23,710 ±0 1 2 ±0 0 100.0% ±0pp
staging 1,482 1,386 +2 86 10 -2 0 93.5% +0.1pp
total 52,328 52,220 +2 95 13 -2 0 99.8% ±0pp

Areas closest to 100%

Area Pass rate Δ vs main Passing
language/expressions 100.0% ±0pp 11,101 / 11,102
intl402/Temporal 100.0% ±0pp 2,028 / 2,029
intl402/NumberFormat 99.6% ±0pp 248 / 249
Per-test deltas (+0 / -0 / timeout +0 / -2)

Resolved timeouts (2):

  • staging/sm/extensions/recursion.js
  • staging/sm/TypedArray/element-setting-converts-using-ToNumber.js

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

@frostney
frostney marked this pull request as ready for review July 21, 2026 10:27
@frostney
frostney merged commit ced3610 into main Jul 21, 2026
48 of 49 checks passed
@frostney
frostney deleted the codex/update-project-skills branch July 21, 2026 13:07
@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

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant