Skip to content

Fix Vercel ignore diff for shallow clones#443

Merged
frostney merged 1 commit into
mainfrom
t3code/skip-vercel-diff
Apr 28, 2026
Merged

Fix Vercel ignore diff for shallow clones#443
frostney merged 1 commit into
mainfrom
t3code/skip-vercel-diff

Conversation

@frostney
Copy link
Copy Markdown
Owner

Summary

  • Replace the static website Vercel JSON config with vercel.ts.
  • Keep ignored-build behavior scoped to the website root diff.
  • Fetch/unshallow missing commits before diffing so Vercel shallow clones do not fail with fatal: bad object.

Verification

  • Extracted ignoreCommand from vercel.ts and verified HEAD vs HEAD exits 0.
  • Verified an unavailable SHA exits 1 with a controlled build fallback.
  • ./node_modules/.bin/biome check vercel.ts
  • bun check-swimmies.ts website/vercel.ts

Note

  • Full bun run lint currently fails on unrelated existing formatting issues in src/app/globals.css and src/components/animated-output.tsx.

@vercel
Copy link
Copy Markdown

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

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Apr 28, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 2a547fa3-f674-443b-90d4-40e4ef4604b2

📥 Commits

Reviewing files that changed from the base of the PR and between cde140f and 47e1072.

📒 Files selected for processing (2)
  • website/vercel.json
  • website/vercel.ts
💤 Files with no reviewable changes (1)
  • website/vercel.json

📝 Walkthrough

Walkthrough

Vercel configuration is migrated from JSON to TypeScript format. The website/vercel.json file is removed and replaced with website/vercel.ts, which exports a config object containing framework settings, build commands, and an ignoreCommand that uses git diff to conditionally skip deployments.

Changes

Cohort / File(s) Summary
Vercel Configuration Migration
website/vercel.json, website/vercel.ts
Configuration migrated from JSON to TypeScript. New file introduces an ignoreCommand that compares git commits (using environment-provided SHAs with fallbacks to HEAD^/HEAD) and runs git diff --quiet to determine deployment eligibility. Includes Next.js framework, Bun-based build/install with frozen lockfile, and function limits for src/app/api/run/route.ts.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately and concisely describes the main change: fixing Vercel ignore diff handling for shallow clones by migrating from vercel.json to vercel.ts with enhanced commit-fetch logic.
Description check ✅ Passed The description covers the primary changes (JSON to TS migration, scoped ignore logic, fetch/unshallow commits), provides concrete verification steps, and acknowledges unrelated linting issues, but does not explicitly complete the template testing checklist with checkboxes.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

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


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

@github-actions
Copy link
Copy Markdown
Contributor

Suite Timing

Suite Metric Interpreted Bytecode
Tests Total 8056 8056
Tests Passed 8015 ✅ 8056 ✅
Tests Skipped 41 0
Tests Workers 4 4
Tests Test Duration 1.81s 1.90s
Tests Lex (cumulative) 195.5ms 128.2ms
Tests Parse (cumulative) 325.3ms 323.2ms
Tests Compile (cumulative) 198.3ms
Tests Execute (cumulative) 1.74s 1.58s
Tests Engine Total (cumulative) 2.26s 2.23s
Tests Lex (avg/worker) 48.9ms 32.0ms
Tests Parse (avg/worker) 81.3ms 80.8ms
Tests Compile (avg/worker) 49.6ms
Tests Execute (avg/worker) 435.0ms 395.5ms
Tests Engine Total (avg/worker) 565.2ms 558.0ms
Benchmarks Total 386 386
Benchmarks Workers 4 4
Benchmarks Duration 2.97min 2.81min

Measured on ubuntu-latest x64.

@github-actions
Copy link
Copy Markdown
Contributor

Benchmark Results

386 benchmarks

Interpreted: 🟢 305 improved · 🔴 14 regressed · 67 unchanged · avg +7.8%
Bytecode: 🟢 75 improved · 🔴 51 regressed · 260 unchanged · avg +0.3%

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

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

@frostney frostney merged commit 741ebd5 into main Apr 28, 2026
12 checks passed
@frostney frostney deleted the t3code/skip-vercel-diff branch April 28, 2026 20:20
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