Skip to content

Clean up logo artifacts#684

Merged
frostney merged 1 commit into
mainfrom
t3code/b1c7534b
May 25, 2026
Merged

Clean up logo artifacts#684
frostney merged 1 commit into
mainfrom
t3code/b1c7534b

Conversation

@frostney
Copy link
Copy Markdown
Owner

Summary

  • Remove accidentally committed tmp/ logo scratch artifacts and ignore tmp/ going forward.
  • Preserve the full-size generated logo as logo-original.png.
  • Resize the active root and website PNG logo assets to 256x256.

Testing

  • Verified no regressions and confirmed the new feature or bugfix in end-to-end JavaScript/TypeScript tests
  • Updated documentation
  • Optional: Verified no regressions and confirmed the new feature or bugfix in native Pascal tests (if AST, scope, evaluator, or value types changed)
  • Optional: Verified no benchmark regressions or confirmed benchmark coverage for the change

Asset/gitignore-only verification performed:

  • git diff --check
  • magick identify -format '%f %wx%h %[channels] %b\\n' logo-original.png logo.png website/public/logo.png
  • git check-ignore -v tmp tmp/example.txt
  • bun check-swimmies.ts <changed files>

Preserve the large generated logo as logo-original.png, resize the active
PNG assets to 256x256, and remove accidental tmp logo work files from the
repository while ignoring tmp/ going forward.
@vercel
Copy link
Copy Markdown

vercel Bot commented May 25, 2026

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

Project Deployment Actions Updated (UTC)
gocciascript-homepage Ready Ready Preview, Comment May 25, 2026 8:15am

Request Review

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 25, 2026

Review Change Stack

Caution

Review failed

Pull request was closed or merged during review

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: e18a1fc8-0286-4906-b9fe-69ab15177d2c

📥 Commits

Reviewing files that changed from the base of the PR and between 113fa59 and 0b39a36.

⛔ Files ignored due to path filters (35)
  • logo-original.png is excluded by !**/*.png
  • logo.png is excluded by !**/*.png
  • tmp/logo-detail/cut.png is excluded by !**/*.png
  • tmp/logo-detail/final-balanced.png is excluded by !**/*.png
  • tmp/logo-detail/manual-balanced.png is excluded by !**/*.png
  • tmp/logo-detail/manual-balanced.svg is excluded by !**/*.svg
  • tmp/logo-detail/manual-max.png is excluded by !**/*.png
  • tmp/logo-detail/manual-max.svg is excluded by !**/*.svg
  • tmp/logo-detail/photo-preset.png is excluded by !**/*.png
  • tmp/logo-detail/photo-preset.svg is excluded by !**/*.svg
  • tmp/logo-large.svg is excluded by !**/*.svg
  • tmp/logo-medium.svg is excluded by !**/*.svg
  • tmp/logo-poster.svg is excluded by !**/*.svg
  • tmp/logo-small.svg is excluded by !**/*.svg
  • tmp/logo-tune/current-script-output.png is excluded by !**/*.png
  • tmp/logo-tune/cut-detail-no-blur.png is excluded by !**/*.png
  • tmp/logo-tune/cut-detail-soft.png is excluded by !**/*.png
  • tmp/logo-tune/cut-floodfill.png is excluded by !**/*.png
  • tmp/logo-tune/cut-max-detail.png is excluded by !**/*.png
  • tmp/logo-tune/cut-no-blur.png is excluded by !**/*.png
  • tmp/logo-tune/cut-preserve-alpha.png is excluded by !**/*.png
  • tmp/logo-tune/detail-no-blur.png is excluded by !**/*.png
  • tmp/logo-tune/detail-no-blur.svg is excluded by !**/*.svg
  • tmp/logo-tune/detail-soft.png is excluded by !**/*.png
  • tmp/logo-tune/detail-soft.svg is excluded by !**/*.svg
  • tmp/logo-tune/final-logo-svg-render.png is excluded by !**/*.png
  • tmp/logo-tune/floodfill.png is excluded by !**/*.png
  • tmp/logo-tune/floodfill.svg is excluded by !**/*.svg
  • tmp/logo-tune/max-detail.png is excluded by !**/*.png
  • tmp/logo-tune/max-detail.svg is excluded by !**/*.svg
  • tmp/logo-tune/no-blur.png is excluded by !**/*.png
  • tmp/logo-tune/no-blur.svg is excluded by !**/*.svg
  • tmp/logo-tune/preserve-alpha.png is excluded by !**/*.png
  • tmp/logo-tune/preserve-alpha.svg is excluded by !**/*.svg
  • website/public/logo.png is excluded by !**/*.png
📒 Files selected for processing (1)
  • .gitignore

📝 Walkthrough

Walkthrough

This PR adds tmp/ to .gitignore, excluding the temporary directory from version control. The change is a single line added to the project's git configuration file.

Changes

Project Configuration

Layer / File(s) Summary
Ignore tmp directory
.gitignore
The tmp/ directory is added to .gitignore to exclude temporary files and subdirectories from git tracking.

🎯 1 (Trivial) | ⏱️ ~1 minute

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title 'Clean up logo artifacts' accurately reflects the main objective of removing accidentally committed tmp/ logo artifacts and adding .gitignore entries.
Description check ✅ Passed The description comprehensively covers the summary with specific details about tmp/ cleanup, logo preservation, and resizing; includes all required testing checkboxes and provides detailed verification steps performed.
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

Test Runner (interpreted: 9,798 passed; bytecode: 9,798 passed)
Metric Interpreted Bytecode
Total 9798 9798
Passed 9798 ✅ 9798 ✅
Workers 4 4
Test Duration 3.11s 3.92s
Lex (cumulative) 436.5ms 539.9ms
Parse (cumulative) 303.9ms 367.5ms
Compile (cumulative) 743.6ms
Execute (cumulative) 3.01s 3.65s
Engine Total (cumulative) 3.75s 5.30s
Lex (avg/worker) 109.1ms 135.0ms
Parse (avg/worker) 76.0ms 91.9ms
Compile (avg/worker) 185.9ms
Execute (avg/worker) 752.8ms 912.2ms
Engine Total (avg/worker) 937.9ms 1.32s

Memory

GC rows aggregate the main thread plus all worker thread-local GCs. Test runner worker shutdown frees thread-local heaps in bulk; that shutdown reclamation is not counted as GC collections or collected objects.

Metric Interpreted Bytecode
GC Live 280.98 MiB 275.22 MiB
GC Peak Live 280.99 MiB 275.23 MiB
GC Allocated During Run 285.47 MiB 279.72 MiB
GC Limit 7.81 GiB 7.81 GiB
GC Collections 1 1
GC Collected Objects 88 88
Heap Start Allocated 159.1 KiB 159.1 KiB
Heap End Allocated 1.53 MiB 1.53 MiB
Heap Delta Allocated 1.37 MiB 1.37 MiB
Heap Delta Free 448.9 KiB 448.9 KiB
Benchmarks (interpreted: 407; bytecode: 407)
Metric Interpreted Bytecode
Total 407 407
Workers 4 4
Duration 2.47min 2.45min

Memory

GC rows aggregate the main thread plus all worker thread-local GCs. Benchmark runner performs explicit between-file collections, so collection and collected-object counts can be much higher than the test runner.

Metric Interpreted Bytecode
GC Live 3.93 MiB 3.93 MiB
GC Peak Live 122.56 MiB 84.09 MiB
GC Allocated During Run 13.49 GiB 10.42 GiB
GC Limit 7.81 GiB 7.81 GiB
GC Collections 2,814 2,656
GC Collected Objects 246,731,136 241,073,502
Heap Start Allocated 1.27 MiB 1.27 MiB
Heap End Allocated 1.27 MiB 1.27 MiB
Heap Delta Allocated 128 B 128 B

Measured on ubuntu-latest x64.

@github-actions
Copy link
Copy Markdown
Contributor

Benchmark Results

407 benchmarks

Interpreted: 🟢 25 improved · 🔴 355 regressed · 27 unchanged · avg -7.5%
Bytecode: 🟢 33 improved · 🔴 89 regressed · 285 unchanged · avg -0.7%

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

Deterministic profile diff

Deterministic profile diff: no significant changes.

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

test262 Conformance

Category Run Passed Δ Pass Failed Pass-rate Δ Rate
built-ins 23,449 16,067 +1 7,377 68.5% ±0pp
harness 116 72 ±0 44 62.1% ±0pp
intl402 3,324 935 ±0 2,389 28.1% ±0pp
language 23,635 14,433 ±0 9,202 61.1% ±0pp
staging 1,484 571 ±0 910 38.5% ±0pp
total 52,008 32,078 +1 19,922 61.7% ±0pp

Areas closest to 100%

Area Pass rate Δ vs main Passing
built-ins/WeakMap 99.3% ±0pp 140 / 141
built-ins/WeakSet 98.8% ±0pp 84 / 85
language/future-reserved-words 98.1% ±0pp 53 / 54
Per-test deltas (+1 / -0)

Newly passing (1):

  • built-ins/Number/prototype/toExponential/undefined-fractiondigits.js

Steady-state failures are non-blocking; regressions vs the cached main baseline (lower total pass count, or any PASS → non-PASS transition) fail the conformance gate. Measured on ubuntu-latest x64, bytecode mode. Areas grouped by the first two test262 path components; minimum 25 attempted tests, areas already at 100% excluded. Δ vs main compares against the most recent cached main baseline.

@frostney frostney marked this pull request as ready for review May 25, 2026 08:43
@frostney frostney merged commit 1e4617a into main May 25, 2026
13 of 14 checks passed
@frostney frostney deleted the t3code/b1c7534b branch May 25, 2026 08:44
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