Skip to content

Update CHANGELOG.md for 0.6.1#293

Merged
frostney merged 1 commit into
mainfrom
changelog/0.6.1
Apr 12, 2026
Merged

Update CHANGELOG.md for 0.6.1#293
frostney merged 1 commit into
mainfrom
changelog/0.6.1

Conversation

@frostney
Copy link
Copy Markdown
Owner

No description provided.

@frostney frostney added documentation Improvements or additions to documentation internal Refactoring, CI, tooling, cleanup labels Apr 12, 2026
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Apr 12, 2026

📝 Walkthrough

Walkthrough

The pull request updates the CHANGELOG.md file to formally release version 0.6.1 (dated 2026-04-09) and adds new changelog entries documenting recent additions including documentation improvements, automated changelog generation with git-cliff, and Error.cause support.

Changes

Cohort / File(s) Summary
Changelog Release
CHANGELOG.md
Released version 0.6.1 with new entries for documentation streamlining, git-cliff changelog automation, and Error.cause support; repositioned existing VM improvements and array-like arguments entries.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~2 minutes

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Description check ⚠️ Warning No pull request description was provided; the template requires Summary and Testing sections with specific details and checkboxes. Add a pull request description following the template with a Summary section explaining the changelog updates and a Testing section with completed checkboxes.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely describes the main change: updating the CHANGELOG.md file for version 0.6.1 release.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

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


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

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
CHANGELOG.md (1)

5-26: ⚠️ Potential issue | 🟡 Minor

Regenerate this section with git-cliff instead of editing it directly.

This file is generated, so direct edits in this release block can be overwritten and may drift from cliff.toml/commit history. Please regenerate CHANGELOG.md via the documented command and commit that output.

Based on learnings: CHANGELOG.md is auto-generated via git-cliff (cliff.toml). Do not edit CHANGELOG.md manually — it will be overwritten. Run git-cliff -o CHANGELOG.md to regenerate.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@CHANGELOG.md` around lines 5 - 26, The CHANGELOG.md release block was edited
directly but is generated by git-cliff; revert your manual edits for this
section and regenerate the entire file using the git-cliff tool (it reads
cliff.toml and commit history) by running the documented command (git-cliff -o
CHANGELOG.md), then commit the regenerated CHANGELOG.md so it stays in sync with
cliff.toml and history instead of making direct edits to the release block.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Outside diff comments:
In `@CHANGELOG.md`:
- Around line 5-26: The CHANGELOG.md release block was edited directly but is
generated by git-cliff; revert your manual edits for this section and regenerate
the entire file using the git-cliff tool (it reads cliff.toml and commit
history) by running the documented command (git-cliff -o CHANGELOG.md), then
commit the regenerated CHANGELOG.md so it stays in sync with cliff.toml and
history instead of making direct edits to the release block.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 4239c477-d08c-44a3-a8c6-86a924f265b9

📥 Commits

Reviewing files that changed from the base of the PR and between 100551e and e02c615.

📒 Files selected for processing (1)
  • CHANGELOG.md

@github-actions
Copy link
Copy Markdown
Contributor

Suite Timing

Suite Metric Interpreted Bytecode
Tests Total 5257 5257
Tests Passed 5216 ✅ 5257 ✅
Tests Skipped 41 0
Tests Test Duration 356.1ms 347.3ms
Tests Lex 94.5ms 71.9ms
Tests Parse 130.0ms 139.2ms
Tests Compile 80.5ms
Tests Execute 372.7ms 384.1ms
Tests Engine Total 597.2ms 675.6ms
Benchmarks Total 364 364
Benchmarks Duration 9.90min 8.65min

Measured on ubuntu-latest x64.

@github-actions
Copy link
Copy Markdown
Contributor

Benchmark Results

364 benchmarks

Interpreted: 🟢 56 improved · 🔴 218 regressed · 90 unchanged · avg -2.6%
Bytecode: 🟢 250 improved · 🔴 36 regressed · 78 unchanged · avg +4.5%

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

Labels

documentation Improvements or additions to documentation internal Refactoring, CI, tooling, cleanup

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant