Skip to content

Add generated sources to CI FPC search path#441

Merged
frostney merged 1 commit into
mainfrom
t3code/timezoat-build-fix
Apr 28, 2026
Merged

Add generated sources to CI FPC search path#441
frostney merged 1 commit into
mainfrom
t3code/timezoat-build-fix

Conversation

@frostney
Copy link
Copy Markdown
Owner

Summary

  • Add source/generated to CI cross-compile FPC unit search paths.
  • Fixes the TimeZoat/Temporal data build failure where Goccia.Temporal.TimeZoneData could not resolve Generated.TimeZoneData.

Verification

  • ./build.pas --prod benchmarkrunner
  • CI-shaped direct fpc ... -Fu./source/generated ... source/app/GocciaBenchmarkRunner.dpr
  • ./build.pas clean testrunner
  • ./fixtures/ffi/build.sh && ./build/GocciaTestRunner tests --asi --unsafe-ffi
  • ./format.pas --check

- Include `source/generated` in cross-compilation builds
- Fix CI failures when generated Pascal units are required
@vercel
Copy link
Copy Markdown

vercel Bot commented Apr 28, 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 28, 2026 6:56pm

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Apr 28, 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: 9584066b-4de8-4a24-9556-bb9ce6bcd1d6

📥 Commits

Reviewing files that changed from the base of the PR and between 6dc8b86 and 2cea2fa.

📒 Files selected for processing (1)
  • .github/workflows/ci.yml

📝 Walkthrough

Walkthrough

The CI workflow configuration now includes an additional Free Pascal unit search path ./source/generated via the -Fu compiler flag across FPC cross-compilation steps for building main applications, unit tests, and compliance harnesses.

Changes

Cohort / File(s) Summary
CI Configuration
.github/workflows/ci.yml
Added ./source/generated unit search path (-Fu) to FPC compiler arguments in cross-compilation build steps for main apps, Pascal unit tests, and compliance harnesses.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 minutes

Possibly related PRs

Suggested labels

bug

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately summarizes the main change: adding generated sources to the CI FPC search path, which directly matches the changeset modifications to the CI workflow.
Description check ✅ Passed The description provides a clear summary of the change and its purpose, includes verification steps, but lacks the optional testing checkboxes from the template structure.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
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 28, 2026
@github-actions
Copy link
Copy Markdown
Contributor

Suite Timing

Suite Metric Interpreted Bytecode
Tests Total 8056 8056
Tests Passed 8015 ✅ 8056 ✅
Tests Skipped 41 0
Tests Workers 4 4
Tests Test Duration 1.90s 1.81s
Tests Lex (cumulative) 207.6ms 129.6ms
Tests Parse (cumulative) 325.4ms 313.9ms
Tests Compile (cumulative) 198.1ms
Tests Execute (cumulative) 1.91s 1.66s
Tests Engine Total (cumulative) 2.44s 2.31s
Tests Lex (avg/worker) 51.9ms 32.4ms
Tests Parse (avg/worker) 81.3ms 78.5ms
Tests Compile (avg/worker) 49.5ms
Tests Execute (avg/worker) 476.3ms 415.9ms
Tests Engine Total (avg/worker) 609.6ms 576.3ms
Benchmarks Total 386 386
Benchmarks Workers 4 4
Benchmarks Duration 2.99min 2.81min

Measured on ubuntu-latest x64.

@github-actions
Copy link
Copy Markdown
Contributor

Benchmark Results

386 benchmarks

Interpreted: 🟢 10 improved · 🔴 130 regressed · 246 unchanged · avg -2.6%
Bytecode: 🟢 17 improved · 🔴 314 regressed · 55 unchanged · avg -6.2%

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

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 785607e into main Apr 28, 2026
12 checks passed
@frostney frostney deleted the t3code/timezoat-build-fix branch April 28, 2026 19:04
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