Skip to content

Remove obsolete multihelpers mode switch#213

Merged
frostney merged 1 commit into
mainfrom
t3code/remove-multiple-mode-switch-helper
Apr 8, 2026
Merged

Remove obsolete multihelpers mode switch#213
frostney merged 1 commit into
mainfrom
t3code/remove-multiple-mode-switch-helper

Conversation

@frostney
Copy link
Copy Markdown
Owner

@frostney frostney commented Apr 8, 2026

Summary

  • Removed the unused {$modeswitch multihelpers} directive from the shared Pascal include file.
  • Updated build-system and code-style docs to match the current compiler settings.
  • Kept the change scoped to documentation and compiler configuration only.

Testing

  • Not run (documentation and configuration-only change).
  • Not run: build or test suite.

Summary by CodeRabbit

  • Chores

    • Removed a compiler directive from the build configuration
  • Documentation

    • Updated documentation to reflect compiler directive changes

- Drop `{$modeswitch multihelpers}` from shared compiler settings
- Update build and style docs to match the current Pascal configuration
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Apr 8, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 73a9b224-ab91-4129-bdb8-a95ce59fa0ac

📥 Commits

Reviewing files that changed from the base of the PR and between d6227fc and 6f0b12f.

📒 Files selected for processing (3)
  • docs/build-system.md
  • docs/code-style.md
  • units/Goccia.inc
💤 Files with no reviewable changes (3)
  • units/Goccia.inc
  • docs/build-system.md
  • docs/code-style.md

📝 Walkthrough

Walkthrough

The changes remove a single FreePascal compiler directive {$modeswitch multihelpers} from the shared compiler directives configuration. This directive is removed from the actual compiler directives file and its corresponding documentation across three files, with no functional logic or behavior modifications.

Changes

Cohort / File(s) Summary
Compiler Directive Removal
units/Goccia.inc
Removed {$modeswitch multihelpers} from the shared FreePascal compiler directives, leaving only {$modeswitch advancedrecords}.
Documentation Updates
docs/build-system.md, docs/code-style.md
Updated documentation to reflect removal of {$modeswitch multihelpers} from the shared compiler directives section.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~2 minutes

Poem

🐰 hop hop One line deleted with care,
Multihelpers floating in the air,
Directives streamlined, clean, and bright,
The config files now feel so light! ✨

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title directly and accurately describes the main change: removing an obsolete compiler directive across the codebase and documentation.
Description check ✅ Passed The description covers the key changes and explains the rationale, but the Testing section does not follow the template structure with checkboxes and is somewhat minimal.
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.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch t3code/remove-multiple-mode-switch-helper

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 8, 2026

Benchmark Results

274 benchmarks

Interpreted: 🟢 83 improved · 🔴 139 regressed · 52 unchanged · avg -1.6%
Bytecode: 🟢 95 improved · 🔴 37 regressed · 142 unchanged · avg +1.1%

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

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

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 8, 2026

Suite Timing

Suite Metric Interpreted Bytecode
Tests Total 3797 3797
Tests Passed 3756 ✅ 3797 ✅
Tests Skipped 41 0
Tests Test Duration 201.3ms 194.5ms
Tests Lex 74.7ms 48.7ms
Tests Parse 93.2ms 93.9ms
Tests Compile 54.5ms
Tests Execute 216.0ms 220.6ms
Tests Engine Total 383.9ms 417.6ms
Benchmarks Total 274 274
Benchmarks Duration 7.52min 6.39min

Measured on ubuntu-latest x64.

@frostney frostney merged commit d173e64 into main Apr 8, 2026
9 checks passed
@frostney frostney deleted the t3code/remove-multiple-mode-switch-helper branch April 8, 2026 10:30
@frostney frostney added the internal Refactoring, CI, tooling, cleanup label Apr 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

internal Refactoring, CI, tooling, cleanup

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant