Skip to content

Use static Vercel ignore config#462

Merged
frostney merged 1 commit into
mainfrom
t3code/vercel-static-ignore
Apr 29, 2026
Merged

Use static Vercel ignore config#462
frostney merged 1 commit into
mainfrom
t3code/vercel-static-ignore

Conversation

@frostney
Copy link
Copy Markdown
Owner

@frostney frostney commented Apr 29, 2026

Summary

  • Replace the programmatic website/vercel.ts deployment config with static website/vercel.json
  • Move the website-scoped ignore logic into website/scripts/vercel-ignore.sh
  • Preserve the existing SHA fallback and shallow-clone commit resolution while applying the same skip behavior to preview and production builds

@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 9:02pm

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Apr 29, 2026

📝 Walkthrough

Walkthrough

The pull request converts a Vercel ignore configuration from a Next.js-style exported config object into a standalone bash script (website/scripts/vercel-ignore.sh) that performs a git diff check on the website/ directory, and introduces a new website/vercel.json file to configure the Vercel project with Bun-based build settings and the custom ignore script.

Changes

Cohort / File(s) Summary
Ignore Script Refactor
website/scripts/vercel-ignore.sh
Converted from JavaScript config export to bash script that computes git commit refs from Vercel environment variables, runs git diff --quiet on the website/ path, and exits with status 0 (build skipped) or 1 (build proceed) based on detected changes.
Vercel Configuration
website/vercel.json
New configuration file specifying Next.js framework, Bun-based build commands, custom ignore script invocation, and API function runtime constraints (15s timeout, 1024 MB memory).

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title 'Use static Vercel ignore config' directly relates to the main change of converting from programmatic vercel.ts to static vercel.json with a bash ignore script.
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.
Description check ✅ Passed The pull request description provides a clear summary of the changes and links related issues, but is missing the required testing checklist.

✏️ 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.

@github-actions
Copy link
Copy Markdown
Contributor

Benchmark Results

407 benchmarks

Interpreted: 🟢 354 improved · 🔴 17 regressed · 36 unchanged · avg +9.1%
Bytecode: 🟢 325 improved · 🔴 16 regressed · 66 unchanged · avg +7.7%

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

Measured on ubuntu-latest x64.

@frostney frostney marked this pull request as ready for review April 29, 2026 21:12
@frostney frostney merged commit 19375d5 into main Apr 29, 2026
12 checks passed
@frostney frostney deleted the t3code/vercel-static-ignore branch April 29, 2026 21:21
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