Skip to content

Handle Infinity in Number parsing#331

Merged
frostney merged 1 commit into
mainfrom
t3code/parse-infinity-spec
Apr 17, 2026
Merged

Handle Infinity in Number parsing#331
frostney merged 1 commit into
mainfrom
t3code/parse-infinity-spec

Conversation

@frostney
Copy link
Copy Markdown
Owner

@frostney frostney commented Apr 17, 2026

Summary

  • Added Number.parseFloat coverage for Infinity, signed infinity, and surrounding whitespace.
  • Added Number.parseInt coverage to verify Infinity forms still return NaN.
  • Updated the number parsing implementation to recognize the Infinity literal during decimal parsing.

- Accept `Infinity` and signed variants in `Number.parseFloat`
- Keep `Number.parseInt` returning `NaN` for Infinity literals
- Update the decimal parser to recognize the `Infinity` literal
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Apr 17, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: b46894d0-64ae-4dd5-8aaf-fd5e2b2eab9b

📥 Commits

Reviewing files that changed from the base of the PR and between a5d7b20 and 1fc995f.

📒 Files selected for processing (3)
  • tests/built-ins/Number/parseFloat.js
  • tests/built-ins/Number/parseInt.js
  • units/Goccia.Builtins.GlobalNumber.pas

📝 Walkthrough

Walkthrough

The pull request adds support for parsing special numeric literals ("Infinity", "+Infinity", "-Infinity") in the Number.parseFloat and Number.parseInt functions. Implementation changes to the parser explicitly recognize the "Infinity" string after the optional sign and return appropriate infinity or NaN values. Corresponding test cases validate the new parsing behavior.

Changes

Cohort / File(s) Summary
Number.parseFloat tests
tests/built-ins/Number/parseFloat.js
Added test case validating parsing of "Infinity", "+Infinity", "-Infinity", and whitespace-padded variants.
Number.parseInt tests
tests/built-ins/Number/parseInt.js
Added test case asserting that parsing "Infinity" variants results in NaN.
Number parser implementation
units/Goccia.Builtins.GlobalNumber.pas
Added explicit recognition of "Infinity" decimal literal in NumberParseFloat after sign handling, returning InfinityValue or NegativeInfinityValue accordingly; renumbered subsequent parsing step comments.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

Suggested labels

bug

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 inconclusive)

Check name Status Explanation Resolution
Description check ❓ Inconclusive The description covers the key changes (test additions and implementation update) but lacks testing verification checkboxes and doesn't explicitly confirm tests were run, missing template compliance. Complete the description by adding checked/unchecked testing verification checkboxes from the template and confirm which tests were verified.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title 'Handle Infinity in Number parsing' accurately summarizes the main change: adding support for recognizing Infinity literals in Number.parseFloat and Number.parseInt functions.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ 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 17, 2026
@frostney frostney added the spec compliance Mismatch against official JavaScript/TypeScript specification label Apr 17, 2026
@github-actions
Copy link
Copy Markdown
Contributor

Suite Timing

Suite Metric Interpreted Bytecode
Tests Total 5452 5452
Tests Passed 5411 ✅ 5452 ✅
Tests Skipped 41 0
Tests Workers 4 4
Tests Test Duration 901.9ms 803.3ms
Tests Lex (cumulative) 227.4ms 134.6ms
Tests Parse (cumulative) 274.0ms 236.9ms
Tests Compile (cumulative) 143.8ms
Tests Execute (cumulative) 1.04s 824.9ms
Tests Engine Total (cumulative) 1.54s 1.34s
Tests Lex (avg/worker) 56.8ms 33.7ms
Tests Parse (avg/worker) 68.5ms 59.2ms
Tests Compile (avg/worker) 35.9ms
Tests Execute (avg/worker) 259.8ms 206.2ms
Tests Engine Total (avg/worker) 385.1ms 335.1ms
Benchmarks Total 364 364
Benchmarks Workers 4 4
Benchmarks Duration 3.00min 2.67min

Measured on ubuntu-latest x64.

@github-actions
Copy link
Copy Markdown
Contributor

Benchmark Results

364 benchmarks

Interpreted: 🟢 132 improved · 🔴 46 regressed · 186 unchanged · avg +2.6%
Bytecode: 🟢 48 improved · 🔴 185 regressed · 131 unchanged · avg -1.4%

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

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.

@frostney frostney merged commit 3d51494 into main Apr 17, 2026
10 checks passed
@frostney frostney deleted the t3code/parse-infinity-spec branch April 17, 2026 21:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working spec compliance Mismatch against official JavaScript/TypeScript specification

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant