Skip to content

Fix Windows parser CLI output assertions#430

Merged
frostney merged 1 commit into
mainfrom
t3code/windows-var-recovery-fix
Apr 27, 2026
Merged

Fix Windows parser CLI output assertions#430
frostney merged 1 commit into
mainfrom
t3code/windows-var-recovery-fix

Conversation

@frostney
Copy link
Copy Markdown
Owner

@frostney frostney commented Apr 27, 2026

Summary

  • Normalize captured CLI JSON output line endings in parser recovery assertions
  • Keep exact semantic output checks while allowing Windows CRLF console output

@vercel
Copy link
Copy Markdown

vercel Bot commented Apr 27, 2026

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

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
gocciascript-homepage Ignored Ignored Apr 27, 2026 6:09pm

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Apr 27, 2026

📝 Walkthrough

Walkthrough

Adds a line-ending normalization helper to CLI parser test assertions. The helper standardizes \r\n and \n differences in loader output before comparing JSON output in three recovery scenario tests, improving cross-platform test stability.

Changes

Cohort / File(s) Summary
Line-ending normalization for CLI tests
scripts/test-cli-parser.ts
Introduces a line-ending normalization utility and applies it to three json.output assertions for unsupported-var recovery, ASI recovery, and compat-var+ASI recovery test cases. Other validation checks (exit codes, JSON structure) remain unchanged.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Suggested labels

bug

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Description check ⚠️ Warning The pull request description is missing the required Testing section with verification checkboxes. Add the Testing section with appropriate checkboxes indicating which tests were verified (e.g., end-to-end JavaScript/TypeScript tests, documentation updates, native Pascal tests if applicable, and benchmark regressions).
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The pull request title accurately and concisely describes the main change: fixing Windows-related line-ending issues in CLI parser output assertions.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


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

@coderabbitai coderabbitai Bot added the bug Something isn't working label Apr 27, 2026
@github-actions
Copy link
Copy Markdown
Contributor

Benchmark Results

386 benchmarks

Interpreted: 🟢 326 improved · 🔴 20 regressed · 40 unchanged · avg +8.1%
Bytecode: 🟢 23 improved · 🔴 312 regressed · 51 unchanged · avg -6.1%

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

Measured on ubuntu-latest x64. Benchmark ranges compare cached main-branch min/max ops/sec with the PR run; overlapping ranges are treated as unchanged noise. Percentage deltas are secondary context.

@github-actions
Copy link
Copy Markdown
Contributor

Suite Timing

Suite Metric Interpreted Bytecode
Tests Total 8024 8024
Tests Passed 7983 ✅ 8024 ✅
Tests Skipped 41 0
Tests Workers 4 4
Tests Test Duration 1.81s 1.90s
Tests Lex (cumulative) 210.3ms 133.8ms
Tests Parse (cumulative) 292.5ms 299.1ms
Tests Compile (cumulative) 206.4ms
Tests Execute (cumulative) 1.45s 1.78s
Tests Engine Total (cumulative) 1.96s 2.42s
Tests Lex (avg/worker) 52.6ms 33.5ms
Tests Parse (avg/worker) 73.1ms 74.8ms
Tests Compile (avg/worker) 51.6ms
Tests Execute (avg/worker) 363.3ms 443.9ms
Tests Engine Total (avg/worker) 489.0ms 603.8ms
Benchmarks Total 386 386
Benchmarks Workers 4 4
Benchmarks Duration 3.09min 2.77min

Measured on ubuntu-latest x64.

@frostney frostney merged commit b22faae into main Apr 27, 2026
12 checks passed
@frostney frostney deleted the t3code/windows-var-recovery-fix branch April 27, 2026 18:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant