Skip to content

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

Merged
frostney merged 1 commit into
mainfrom
chore/test262-bump
Sep 17, 2026
Merged

frostney merged 1 commit into
mainfrom
chore/test262-bump

Conversation

@github-actions

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

Copy link
Copy Markdown
Contributor

Automated bump of the test262 SHA pin to aae8cf6eed6d6c6a203be48c1184bb194880f66b.

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

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

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

vercel Bot commented Sep 7, 2026

Copy link
Copy Markdown

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

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

Request Review

@github-actions

github-actions Bot commented Sep 8, 2026

Copy link
Copy Markdown
Contributor Author

Web Tooling Benchmark

Workload Status Goccia
acorn pass 0.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.07 runs/s
coffeescript pass 0.01 runs/s
espree pass 0.03 runs/s
esprima pass 0.05 runs/s
jshint pass 0.01 runs/s
lebab pass 0.13 runs/s
postcss pass 0.02 runs/s
prepack pass 0.11 runs/s
prettier pass 0.12 runs/s
source-map pass 0.03 runs/s
terser pass 0.24 runs/s
typescript pass 0.10 runs/s
uglify-js pass 0.05 runs/s

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

@github-actions

github-actions Bot commented Sep 8, 2026

Copy link
Copy Markdown
Contributor Author

Suite Timing

Test Runner (interpreted: 12,826 passed; bytecode: 12,826 passed)
Metric Interpreted Bytecode
Total 12826 12826
Passed 12826 ✅ 12826 ✅
Workers 4 4
Test Duration 18.04s 21.15s
Lex (cumulative) 1.81s 2.20s
Parse (cumulative) 919.4ms 1.12s
Compile (cumulative) 1.46s
Execute (cumulative) 622.8ms 21.38s
Engine Total (cumulative) 3.35s 26.16s
Lex (avg/worker) 451.6ms 549.2ms
Parse (avg/worker) 229.8ms 281.1ms
Compile (avg/worker) 365.2ms
Execute (avg/worker) 155.7ms 5.34s
Engine Total (avg/worker) 837.1ms 6.54s

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 74.36 MiB 55.70 MiB
GC Peak Live 184.28 MiB 152.11 MiB
GC Allocated During Run 702.56 MiB 613.57 MiB
GC Limit 7.81 GiB 7.81 GiB
GC Collections 1,034 1,040
GC Collected Objects 5,345,268 4,777,355
Heap Start Allocated 371.9 KiB 371.9 KiB
Heap End Allocated 3.17 MiB 3.17 MiB
Heap Delta Allocated 2.81 MiB 2.81 MiB
Heap Delta Free 2.16 MiB 2.16 MiB
Benchmarks (interpreted: 440; bytecode: 440)
Metric Interpreted Bytecode
Total 440 440
Workers 4 4
Duration 2.91min 3.04min

Memory

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

Metric Interpreted Bytecode
GC Live 85.0 KiB 85.0 KiB
GC Peak Live 373.93 MiB 560.53 MiB
GC Allocated During Run 26.94 GiB 17.85 GiB
GC Limit 7.81 GiB 7.81 GiB
GC Collections 6,656 8,812
GC Collected Objects 300,488,375 240,792,496
Heap Start Allocated 1.35 MiB 1.35 MiB
Heap End Allocated 1.35 MiB 1.35 MiB
Heap Delta Allocated 3.2 KiB 3.2 KiB
Boot
Metric Interpreted Bytecode
Boot (median) 7.7ms 7.8ms
Boot (min) 7.5ms 7.7ms

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

Measured on ubuntu-latest x64.

@github-actions

github-actions Bot commented Sep 8, 2026

Copy link
Copy Markdown
Contributor Author

Benchmark Results

440 benchmarks · PR vs same-runner main build

Interpreted: 🟢 58 improved · 🔴 57 regressed · 325 unchanged · avg +0.3%
Bytecode: 🟢 39 improved · 🔴 32 regressed · 369 unchanged · avg +0.3%

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

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

Deterministic profile diff

Deterministic profile diff: no significant changes.

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

@github-actions

github-actions Bot commented Sep 8, 2026

Copy link
Copy Markdown
Contributor Author

test262 Conformance

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

Category Run Passed Δ Pass Failed Timeouts Δ Timeout Wrap-Infra Pass-rate Δ Rate
built-ins 23,814 23,721 🆕 93 0 🆕 0 99.6% 🆕
harness 116 116 🆕 0 0 🆕 0 100.0% 🆕
intl402 3,357 3,343 🆕 13 1 🆕 0 99.6% 🆕
language 23,726 23,719 🆕 7 0 🆕 0 100.0% 🆕
staging 1,483 1,387 🆕 85 11 🆕 0 93.5% 🆕
total 52,496 52,286 🆕 198 12 🆕 0 99.6% 🆕

Areas closest to 100%

Area Pass rate Passing
language/expressions 100.0% 11,101 / 11,102
intl402/Temporal 100.0% 2,028 / 2,029
language/statements 99.9% 9,341 / 9,347

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. No main baseline cached yet — Δ columns will appear once a main run completes.

@github-actions

github-actions Bot commented Sep 8, 2026

Copy link
Copy Markdown
Contributor Author

JetStream 3 Performance Barometer

Workload Status Goccia main Goccia PR QuickJS Node.js vs QuickJS vs Node.js
hash-map pass 0.82 0.82 19.29 407.39 23.41× 494.39×
ai-astar pass 1.61 1.60 41.81 356.54 26.10× 222.57×
gaussian-blur pass 0.37 0.37 8.11 291.74 22.12× 795.77×
raytrace-public-class-fields pass 0.41 0.41 11.12 189.56 26.85× 457.92×
sync-fs pass 0.88 0.88 27.28 226.38 31.13× 258.30×
lazy-collections pass 3.13 3.13 90.31 193.50 28.89× 61.91×

Geomean reference ratio: QuickJS 26.24×; Node.js 293.65×.

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

@github-actions

github-actions Bot commented Sep 8, 2026

Copy link
Copy Markdown
Contributor Author

AWFY Results

Target Status Goccia main Goccia PR QuickJS 2026-06-04 NodeJS v26.8.2 Δ PR vs main
Bounce pass 17.21ms 17.03ms 1.09ms 1.06ms ~ overlap (+1.10%)
CD pass 187.96ms 185.07ms 9.83ms 9.42ms ~ overlap (+1.54%)
DeltaBlue pass 3.92ms 3.93ms 292.86µs 1.55ms ~ overlap (-0.39%)
Havlak pass 72.70s 72.59s 4134.45ms 188.88ms ~ overlap (+0.16%)
Json pass 314.17ms 313.47ms 14.00ms 4.12ms ~ overlap (+0.22%)
List pass 11.79ms 11.72ms 1.00ms 0.77ms ~ overlap (+0.61%)
Mandelbrot pass 30.26µs 28.86µs 5.92µs 87.74µs 🟢 +4.60%
NBody pass 430.07µs 391.31µs 31.79µs 371.15µs ~ overlap (+9.01%)
Permute pass 34.99ms 34.61ms 1.87ms 0.78ms ~ overlap (+1.08%)
Queens pass 17.78ms 17.64ms 1.31ms 1.00ms ~ overlap (+0.76%)
Richards pass 559.22ms 557.65ms 51.87ms 6.25ms ~ overlap (+0.28%)
Sieve pass 12.69ms 12.46ms 0.57ms 0.54ms 🟢 +1.88%
Storage pass 32.67ms 32.38ms 3.04ms 1.05ms ~ overlap (+0.89%)
Towers pass 45.02ms 45.25ms 3.08ms 1.12ms ~ overlap (-0.51%)

Geomean Ratios

Ratio (row / column) Goccia main Goccia PR QuickJS 2026-06-04 NodeJS v26.8.2
Goccia main 1.000 1.016 14.111 17.752
Goccia PR 0.985 1.000 13.893 17.477
QuickJS 2026-06-04 0.071 0.072 1.000 1.258
NodeJS v26.8.2 0.056 0.057 0.795 1.000

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

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

coderabbitai Bot commented Sep 14, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Bot user detected.

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

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Advanced

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

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

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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

@frostney
frostney merged commit 859e805 into main Sep 17, 2026
49 checks passed
@frostney
frostney deleted the chore/test262-bump branch September 17, 2026 13:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant