Skip to content

Add website Browserslist config#446

Merged
frostney merged 1 commit into
mainfrom
t3code/browser-list-config
Apr 29, 2026
Merged

Add website Browserslist config#446
frostney merged 1 commit into
mainfrom
t3code/browser-list-config

Conversation

@frostney
Copy link
Copy Markdown
Owner

Summary

  • Add a rolling Browserslist configuration for the Next.js website
  • Keep production targets on current evergreen browsers to avoid unnecessary legacy polyfills

Verification

  • bunx biome check package.json
  • bun run build

@vercel
Copy link
Copy Markdown

vercel Bot commented Apr 29, 2026

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

Project Deployment Actions Updated (UTC)
gocciascript-homepage Ready Ready Preview, Comment Apr 29, 2026 0:52am

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Apr 29, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: e8dbcdeb-b548-4e2f-86b1-1ab240e3546f

📥 Commits

Reviewing files that changed from the base of the PR and between 1b8cae8 and b072f61.

📒 Files selected for processing (1)
  • website/package.json

📝 Walkthrough

Walkthrough

A browserslist configuration field is added to website/package.json, specifying target browser compatibility lists for production and development environments.

Changes

Cohort / File(s) Summary
Configuration
website/package.json
Added browserslist field with separate browser query arrays for production and development environments.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~2 minutes

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 inconclusive)

Check name Status Explanation Resolution
Description check ❓ Inconclusive The description includes a summary of the change but deviates from the template by using 'Verification' instead of 'Testing' section without required test checkboxes. Follow the repository template by including a 'Testing' section with the specified checkboxes to document what testing was performed.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely describes the main change: adding a Browserslist configuration for the website.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

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


Review rate limit: 0/5 reviews remaining, refill in 57 minutes and 31 seconds.

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

@github-actions
Copy link
Copy Markdown
Contributor

Benchmark Results

392 benchmarks

Interpreted: 🟢 357 improved · 🔴 8 regressed · 27 unchanged · avg +8.4%
Bytecode: 🟢 318 improved · 🔴 22 regressed · 52 unchanged · avg +7.9%

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

@github-actions
Copy link
Copy Markdown
Contributor

Suite Timing

Suite Metric Interpreted Bytecode
Tests Total 8111 8111
Tests Passed 8070 ✅ 8111 ✅
Tests Skipped 41 0
Tests Workers 4 4
Tests Test Duration 1.91s 1.40s
Tests Lex (cumulative) 219.2ms 92.8ms
Tests Parse (cumulative) 321.1ms 225.7ms
Tests Compile (cumulative) 145.5ms
Tests Execute (cumulative) 1.66s 1.17s
Tests Engine Total (cumulative) 2.20s 1.64s
Tests Lex (avg/worker) 54.8ms 23.2ms
Tests Parse (avg/worker) 80.3ms 56.4ms
Tests Compile (avg/worker) 36.4ms
Tests Execute (avg/worker) 415.0ms 293.1ms
Tests Engine Total (avg/worker) 550.0ms 409.1ms
Benchmarks Total 392 392
Benchmarks Workers 4 4
Benchmarks Duration 2.45min 2.38min

Measured on ubuntu-latest x64.

@frostney frostney merged commit f5b5295 into main Apr 29, 2026
12 checks passed
@frostney frostney deleted the t3code/browser-list-config branch April 29, 2026 01:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant