Skip to content

Skip Vercel preview builds for non-website changes#414

Merged
frostney merged 2 commits into
mainfrom
t3code/vercel-website-preview-branch
Apr 27, 2026
Merged

Skip Vercel preview builds for non-website changes#414
frostney merged 2 commits into
mainfrom
t3code/vercel-website-preview-branch

Conversation

@frostney
Copy link
Copy Markdown
Owner

@frostney frostney commented Apr 27, 2026

Summary

  • Adds ignoreCommand to website/vercel.json so Vercel only builds previews when the website/ directory has changes
  • Uses git diff --quiet HEAD^ HEAD -- ./ (Vercel's recommended approach) which exits 0 (skip) when no files changed, exits 1 (build) when they did

Context

Vercel creates a preview deployment for every push to every branch by default. Since only the website/ directory is deployed to Vercel, pushes that only touch Pascal source, tests, or other files outside website/ don't need a preview build.

- Add an ignoreCommand to prevent preview deployments from rebuilding empty commits
@vercel
Copy link
Copy Markdown

vercel Bot commented Apr 27, 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 27, 2026 9:03am

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Apr 27, 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: 5b10ec66-859f-4ee1-a494-46f33b890bf4

📥 Commits

Reviewing files that changed from the base of the PR and between 8b52312 and c460179.

📒 Files selected for processing (1)
  • website/vercel.json
✅ Files skipped from review due to trivial changes (1)
  • website/vercel.json

📝 Walkthrough

Walkthrough

Added an ignoreCommand property to Vercel configuration (website/vercel.json) that runs a git diff between previous and current commit SHAs (with HEAD^/HEAD fallbacks) limited to ./ to let Vercel skip builds when no repository changes are detected.

Changes

Cohort / File(s) Summary
Vercel Build Configuration
website/vercel.json
Added ignoreCommand: "git diff --quiet ${VERCEL_GIT_PREVIOUS_SHA:-HEAD^} ${VERCEL_GIT_COMMIT_SHA:-HEAD} -- ./" to allow Vercel to conditionalize/skip deployments based on repo diff.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~2 minutes

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 inconclusive)

Check name Status Explanation Resolution
Description check ❓ Inconclusive The description includes a clear summary of the change and context, but the testing checklist from the template is missing. Add the testing checklist section from the template to confirm which verification steps were completed.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main change: adding an ignoreCommand to skip Vercel preview builds for non-website changes.
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.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@website/vercel.json`:
- Line 6: The ignoreCommand currently uses "git diff --quiet HEAD^ HEAD -- ./"
which only checks the last commit; update the "ignoreCommand" in vercel.json to
use Vercel-provided env vars by replacing that command with a git diff that
compares ${VERCEL_GIT_PREVIOUS_SHA:-$VERCEL_GIT_COMMIT_SHA} to
${VERCEL_GIT_COMMIT_SHA} (or equivalent safe fallbacks) so the full pushed
commit range is checked and multi-commit pushes that touch website/ are
detected; ensure the updated ignoreCommand references the
VERCEL_GIT_PREVIOUS_SHA and VERCEL_GIT_COMMIT_SHA environment variables and
falls back safely for new branches.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: fe0e9d50-34f1-4036-95f0-183d7405b7c7

📥 Commits

Reviewing files that changed from the base of the PR and between 7e90fd0 and 8b52312.

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

Comment thread website/vercel.json Outdated
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 27, 2026

Benchmark Results

386 benchmarks

Interpreted: 🟢 313 improved · 🔴 29 regressed · 44 unchanged · avg +6.0%
Bytecode: 🟢 15 improved · 🔴 312 regressed · 59 unchanged · avg -6.9%

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

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 27, 2026

Suite Timing

Suite Metric Interpreted Bytecode
Tests Total 7838 7838
Tests Passed 7797 ✅ 7838 ✅
Tests Skipped 41 0
Tests Workers 4 4
Tests Test Duration 1.70s 1.81s
Tests Lex (cumulative) 193.0ms 134.4ms
Tests Parse (cumulative) 283.7ms 292.9ms
Tests Compile (cumulative) 186.5ms
Tests Execute (cumulative) 1.50s 1.53s
Tests Engine Total (cumulative) 1.98s 2.15s
Tests Lex (avg/worker) 48.2ms 33.6ms
Tests Parse (avg/worker) 70.9ms 73.2ms
Tests Compile (avg/worker) 46.6ms
Tests Execute (avg/worker) 374.9ms 383.2ms
Tests Engine Total (avg/worker) 494.0ms 536.7ms
Benchmarks Total 386 386
Benchmarks Workers 4 4
Benchmarks Duration 3.06min 2.78min

Measured on ubuntu-latest x64.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@frostney frostney merged commit dee1498 into main Apr 27, 2026
12 checks passed
@frostney frostney deleted the t3code/vercel-website-preview-branch branch April 27, 2026 09:15
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