Skip to content

chore(tc39-mcp): bump pin to v0.6.3 - #1239

Merged
frostney merged 1 commit into
mainfrom
chore/tc39-mcp-bump
Sep 17, 2026
Merged

frostney merged 1 commit into
mainfrom
chore/tc39-mcp-bump

Conversation

@github-actions

Copy link
Copy Markdown
Contributor

Automated bump of the tc39-mcp npm pin to v0.6.3.

This updates agent spec-lookup tooling only. It does not change
GocciaScript runtime behavior, build outputs, or CI conformance
gates.

Cron: weekly, Mondays 07:30 UTC. See .github/workflows/tc39-mcp-bump.yml.

@github-actions github-actions Bot added automated Pull request completely generated by automation spec compliance Mismatch against official JavaScript/TypeScript specification labels Sep 14, 2026
@vercel

vercel Bot commented Sep 14, 2026

Copy link
Copy Markdown

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

1 Skipped Deployment
Project Deployment Actions Updated
gocciascript-homepage Ignored Ignored Preview Sep 14, 2026 2:20pm UTC

Request Review

@coderabbitai

coderabbitai Bot commented Sep 14, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Bot user detected.

To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Advanced

Run ID: 0f83b3ad-d2c7-43e2-b1e3-8b03a0bb6625

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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

@github-actions

Copy link
Copy Markdown
Contributor Author

Web Tooling Benchmark

Workload Status Goccia
acorn pass 0.03 runs/s
babel pass 0.01 runs/s
babel-minify pass 0.13 runs/s
babylon pass 0.04 runs/s
buble pass 0.14 runs/s
chai pass 0.14 runs/s
coffeescript pass 0.01 runs/s
espree pass 0.02 runs/s
esprima pass 0.04 runs/s
jshint pass 0.03 runs/s
lebab pass 0.07 runs/s
postcss pass 0.02 runs/s
prepack pass 0.12 runs/s
prettier pass 0.07 runs/s
source-map pass 0.03 runs/s
terser pass 0.19 runs/s
typescript pass 0.11 runs/s
uglify-js pass 0.09 runs/s

18 pinned Web Tooling workloads; 18 workloads produced at least one Goccia sample. Raw results from 1 sample per workload; full stdout/stderr for failures and min/max/CV stay in the web-tooling-report artifact. This lane is Goccia-only by design.

@github-actions

Copy link
Copy Markdown
Contributor Author

Suite Timing

Test Runner (interpreted: 12,826 passed; bytecode: 12,826 passed)
Metric Interpreted Bytecode
Total 12826 12826
Passed 12826 ✅ 12826 ✅
Workers 4 4
Test Duration 20.54s 15.94s
Lex (cumulative) 2.09s 1.57s
Parse (cumulative) 1.11s 817.7ms
Compile (cumulative) 1.07s
Execute (cumulative) 743.5ms 16.16s
Engine Total (cumulative) 3.95s 19.62s
Lex (avg/worker) 523.5ms 393.0ms
Parse (avg/worker) 277.6ms 204.4ms
Compile (avg/worker) 267.8ms
Execute (avg/worker) 185.9ms 4.04s
Engine Total (avg/worker) 986.9ms 4.90s

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 57.52 MiB 56.21 MiB
GC Peak Live 183.17 MiB 159.79 MiB
GC Allocated During Run 702.56 MiB 613.57 MiB
GC Limit 7.81 GiB 7.81 GiB
GC Collections 1,034 1,040
GC Collected Objects 5,488,518 4,774,604
Heap Start Allocated 371.9 KiB 371.9 KiB
Heap End Allocated 3.17 MiB 3.17 MiB
Heap Delta Allocated 2.81 MiB 2.81 MiB
Heap Delta Free 2.16 MiB 2.16 MiB
Benchmarks (interpreted: 440; bytecode: 440)
Metric Interpreted Bytecode
Total 440 440
Workers 4 4
Duration 3.06min 2.93min

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 85.0 KiB 85.0 KiB
GC Peak Live 517.97 MiB 464.25 MiB
GC Allocated During Run 26.07 GiB 13.50 GiB
GC Limit 7.81 GiB 7.81 GiB
GC Collections 6,840 4,965
GC Collected Objects 293,699,580 178,893,006
Heap Start Allocated 1.35 MiB 1.35 MiB
Heap End Allocated 1.35 MiB 1.35 MiB
Heap Delta Allocated 3.2 KiB 3.2 KiB
Boot
Metric Interpreted Bytecode
Boot (median) 8.3ms 8.0ms
Boot (min) 7.6ms 7.7ms

Empty-script (0;) end-to-end process wall-clock for GocciaScriptLoader, min and median over 60 runs after 10 warmups. Includes a fixed process / dynamic-loader floor that does not shrink, so it understates the engine-boot speedup; treat as practical boot time, not pure engine work.

Measured on ubuntu-latest x64.

@github-actions

Copy link
Copy Markdown
Contributor Author

JetStream 3 Performance Barometer

Workload Status Goccia main Goccia PR QuickJS Node.js vs QuickJS vs Node.js
hash-map pass 0.60 0.60 13.71 336.81 22.75× 558.75×
ai-astar pass 1.61 1.61 41.74 349.80 25.91× 217.16×
gaussian-blur pass 0.52 0.52 10.18 306.47 19.55× 588.52×
raytrace-public-class-fields pass 0.42 0.42 10.95 197.59 26.36× 475.53×
sync-fs pass 0.88 0.87 27.40 226.97 31.56× 261.42×
lazy-collections pass 3.99 3.99 137.40 282.41 34.40× 70.71×

Geomean reference ratio: QuickJS 26.28×; Node.js 292.62×.

1.00× means aligned; values above 1.00× mean Goccia was proportionally slower after normalizing JetStream’s higher-is-better score. This is a directional barometer across runtimes with different goals, not a product ranking. Raw samples and failure details remain in the jetstream-report artifact.

@github-actions

Copy link
Copy Markdown
Contributor Author

Benchmark Results

440 benchmarks · PR vs same-runner main build

Interpreted: 🟢 35 improved · 🔴 22 regressed · 383 unchanged · avg +0.1%
Bytecode: 🟢 62 improved · 🔴 39 regressed · 339 unchanged · avg +0.5%

Typical per-run noise (median variance): interpreted ±2.6%, bytecode ±1.4%. Deltas within noise overlap and read as unchanged.

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

Deterministic profile diff

Deterministic profile diff: no significant changes.

Measured on ubuntu-latest x64. Each PR run also builds the main base and benchmarks it back-to-back on the same runner after a warm-up discard, so the ranges compare two runs measured under the same conditions; overlapping min/max ranges are treated as unchanged noise. Percentage deltas are secondary context. See docs/adr/0076.

@github-actions

Copy link
Copy Markdown
Contributor Author

AWFY Results

Target Status Goccia main Goccia PR QuickJS 2026-06-04 NodeJS v26.8.2 Δ PR vs main
Bounce pass 10.56ms 10.53ms 0.65ms 0.75ms ~ overlap (+0.30%)
CD pass 120.46ms 121.30ms 6.75ms 7.20ms ~ overlap (-0.70%)
DeltaBlue pass 2.60ms 2.57ms 199.20µs 1.05ms ~ overlap (+1.15%)
Havlak pass 48.48s 48.49s 2663.72ms 141.26ms ~ overlap (-0.01%)
Json pass 210.04ms 209.32ms 8.87ms 2.99ms ~ overlap (+0.34%)
List pass 8.07ms 8.08ms 0.69ms 0.56ms ~ overlap (-0.13%)
Mandelbrot pass 19.36µs 19.21µs 4.36µs 62.27µs ~ overlap (+0.76%)
NBody pass 229.86µs 230.93µs 19.85µs 241.29µs ~ overlap (-0.47%)
Permute pass 22.28ms 22.26ms 1.14ms 0.61ms ~ overlap (+0.08%)
Queens pass 11.50ms 11.51ms 0.77ms 0.81ms ~ overlap (-0.11%)
Richards pass 373.99ms 375.31ms 35.09ms 4.47ms ~ overlap (-0.35%)
Sieve pass 7.96ms 7.91ms 344.35µs 433.79µs ~ overlap (+0.58%)
Storage pass 20.87ms 20.86ms 1.72ms 0.84ms ~ overlap (+0.06%)
Towers pass 28.58ms 28.56ms 1.94ms 0.90ms ~ overlap (+0.06%)

Geomean Ratios

Ratio (row / column) Goccia main Goccia PR QuickJS 2026-06-04 NodeJS v26.8.2
Goccia main 1.000 1.001 14.119 15.289
Goccia PR 0.999 1.000 14.103 15.272
QuickJS 2026-06-04 0.071 0.071 1.000 1.083
NodeJS v26.8.2 0.065 0.065 0.923 1.000

14 pinned AWFY benchmarks. Medians from 5 interleaved samples per engine; raw JSON includes min/max/CV and is attached as the awfy-report artifact. Δ compares PR Goccia median against the same-runner main Goccia median; overlapping min/max ranges are treated as unchanged noise. Rows below 0.5ms are timer-floor sensitive.

@github-actions

Copy link
Copy Markdown
Contributor Author

test262 Conformance

12 timeout(s) — counted separately from ordinary conformance failures; inspect the full artifact for affected tests.

Category Run Passed Δ Pass Failed Timeouts Δ Timeout Wrap-Infra Pass-rate Δ Rate
built-ins 23,812 23,719 🆕 93 0 🆕 0 99.6% 🆕
harness 116 116 🆕 0 0 🆕 0 100.0% 🆕
intl402 3,357 3,344 🆕 12 1 🆕 0 99.6% 🆕
language 23,726 23,719 🆕 7 0 🆕 0 100.0% 🆕
staging 1,483 1,387 🆕 85 11 🆕 0 93.5% 🆕
total 52,494 52,285 🆕 197 12 🆕 0 99.6% 🆕

Areas closest to 100%

Area Pass rate Passing
language/expressions 100.0% 11,101 / 11,102
intl402/Temporal 100.0% 2,028 / 2,029
language/statements 99.9% 9,341 / 9,347

Steady-state failures and timeouts are non-blocking; PASS → non-timeout failure transitions 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. No main baseline cached yet — Δ columns will appear once a main run completes.

@frostney
frostney merged commit 8ba697a into main Sep 17, 2026
49 checks passed
@frostney
frostney deleted the chore/tc39-mcp-bump branch September 17, 2026 13:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

automated Pull request completely generated by automation spec compliance Mismatch against official JavaScript/TypeScript specification

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant