Skip to content

Update skills#701

Merged
frostney merged 1 commit into
mainfrom
another-skills-update
Jun 2, 2026
Merged

Update skills#701
frostney merged 1 commit into
mainfrom
another-skills-update

Conversation

@frostney
Copy link
Copy Markdown
Owner

@frostney frostney commented Jun 2, 2026

Update project skills

@vercel
Copy link
Copy Markdown

vercel Bot commented Jun 2, 2026

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

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
gocciascript-homepage Ignored Ignored Jun 2, 2026 8:33pm

Request Review

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Jun 2, 2026

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 8bb9640b-67c1-40c4-a1c4-95e1a3f9b3cd

📥 Commits

Reviewing files that changed from the base of the PR and between 68d2d20 and 717c7da.

📒 Files selected for processing (11)
  • .agents/skills/create-issue/SKILL.md
  • .agents/skills/create-pr/SKILL.md
  • .agents/skills/git-workflow/SKILL.md
  • .agents/skills/implement-idea/SKILL.md
  • .agents/skills/implement-issue/SKILL.md
  • .agents/skills/native-nostalgia-stack/SKILL.md
  • .agents/skills/project-structure/SKILL.md
  • .agents/skills/review-pr/SKILL.md
  • .agents/skills/update-pr/SKILL.md
  • .github/workflows/pr.yml
  • skills-lock.json

📝 Walkthrough

Walkthrough

This PR establishes a comprehensive system of agent skills for GitHub workflows and repository standards. It adds eight skill definitions (creating/reviewing/updating issues and PRs, implementing features, managing Git operations, and defining a FreePascal toolchain), each with stricter workflow enforcement via "non-negotiable gates." The skills are registered in skills-lock.json and interconnected through a unified dependency flow.

Changes

Agent Skills System & Workflow Standards

Layer / File(s) Summary
Git workflow standards
``.agents/skills/git-workflow/SKILL.md`
Defines baseline Git operations: feature branches from remote default, squash-merge only, no force-push/amend, dynamic BASE_BRANCH resolution via gh, and explicit exception policy.
Repository structure and documentation conventions
.agents/skills/project-structure/SKILL.md
Prescribes language-agnostic repo layout (root roles, README structure, Tests), docs/ templates, AGENTS.md template, Lefthook pre-commit default, scripts/ directory rules, and standardized tooling contracts (git-cliff, markdownlint, duplication, link checking, architectural drift).
FreePascal toolchain conventions
.agents/skills/native-nostalgia-stack/SKILL.md
Documents FPC compiler expectations (Delphi mode, shared .inc files), code-style guidance (naming/OOP/inline), build-system contracts (entry point, dev/prod flags, clean target, build/ output), formatter/linter behavior, health-check reporting, Lefthook pre-commit structure, and repo layout rules for Pascal projects.
Issue and PR creation workflows
.agents/skills/create-issue/SKILL.md, .agents/skills/create-pr/SKILL.md
/create-issue: enforce grill-skill gate and duplicate investigation before drafting; resolve GitHub templates with fallbacks; capture UI/UX context (screens, accessibility, responsive). /create-pr: dynamic base-branch resolution via gh repo view; draft PR creation with GraphQL-first and REST fallback; use project PR template.
PR review and update workflows
.agents/skills/review-pr/SKILL.md, .agents/skills/update-pr/SKILL.md
/review-pr: prefer /resolve-reviews delegation; merge default-branch baseline dynamically; list unresolved threads; invoke /update-pr. /update-pr: merge origin/main when behind; skip commits if nothing new; stage/commit/push with upstream tracking; reconcile title/body sections with templates via gh pr edit.
Issue and idea implementation workflows
.agents/skills/implement-issue/SKILL.md, .agents/skills/implement-idea/SKILL.md
/implement-issue: enforce non-negotiable gates (grill-before-planning, full investigation, stop for three options); mandate agent-context reading order; require real repo commands; handle already-fixed cases; execute grill loop; present exactly three options. /implement-idea: formulate/confirm mini-spec (Scope/Outcome/Success criteria); discover and run applicable skills; map findings into three options; await user selection before implementation.
Skill registry and workflow wiring
.github/workflows/pr.yml, skills-lock.json
Register new and updated skills in the skills registry; preserve existing entries; adjust workflow file formatting at end of file.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

  • frostney/GocciaScript#568: Both PRs modify .agents/skills/implement-issue/SKILL.md, tightening the workflow to delegate PR creation to /create-pr.
  • frostney/GocciaScript#572: Overlaps on skill frontmatter/metadata updates to create-issue, create-pr, implement-issue, review-pr, and update-pr.
  • frostney/GocciaScript#525: Touches the same skill docs (create-issue, create-pr, implement-issue, review-pr, update-pr) and related contribution guidance.

Suggested labels

documentation, internal

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Description check ⚠️ Warning The PR description 'Update project skills' is too generic and lacks all required template sections: no summary of specific changes, no constraints/non-goals, no related issue links, and no testing checklist completion. Complete the PR description using the repository template: describe what skills were added/updated (e.g., new gates, metadata, documentation), note constraints, and confirm testing/documentation updates completed.
Title check ❓ Inconclusive The title 'Update skills' is generic and vague; it does not clearly convey the specific changes made, such as adding new skill definitions or restructuring workflow gates. Provide a more specific title that highlights the main change, e.g., 'Add structured workflow gates to implement-issue and implement-idea skills' or 'Establish baseline skill definitions for git-workflow and project-structure'.
✅ Passed checks (3 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

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


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

@coderabbitai coderabbitai Bot added documentation Improvements or additions to documentation internal Refactoring, CI, tooling, cleanup labels Jun 2, 2026
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 2, 2026

Suite Timing

Test Runner (interpreted: 9,880 passed; bytecode: 9,880 passed)
Metric Interpreted Bytecode
Total 9880 9880
Passed 9880 ✅ 9880 ✅
Workers 4 4
Test Duration 3.31s 3.61s
Lex (cumulative) 417.2ms 452.5ms
Parse (cumulative) 301.6ms 323.1ms
Compile (cumulative) 654.2ms
Execute (cumulative) 4.16s 4.27s
Engine Total (cumulative) 4.88s 5.70s
Lex (avg/worker) 104.3ms 113.1ms
Parse (avg/worker) 75.4ms 80.8ms
Compile (avg/worker) 163.6ms
Execute (avg/worker) 1.04s 1.07s
Engine Total (avg/worker) 1.22s 1.43s

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 287.54 MiB 279.95 MiB
GC Peak Live 287.55 MiB 279.96 MiB
GC Allocated During Run 292.08 MiB 284.49 MiB
GC Limit 7.81 GiB 7.81 GiB
GC Collections 1 1
GC Collected Objects 87 87
Heap Start Allocated 160.6 KiB 160.6 KiB
Heap End Allocated 1.54 MiB 1.54 MiB
Heap Delta Allocated 1.38 MiB 1.38 MiB
Heap Delta Free 890.4 KiB 890.4 KiB
Benchmarks (interpreted: 407; bytecode: 407)
Metric Interpreted Bytecode
Total 407 407
Workers 4 4
Duration 2.39min 2.39min

Memory

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

Metric Interpreted Bytecode
GC Live 3.97 MiB 3.97 MiB
GC Peak Live 125.20 MiB 81.86 MiB
GC Allocated During Run 15.16 GiB 10.63 GiB
GC Limit 7.81 GiB 7.81 GiB
GC Collections 2,817 2,663
GC Collected Objects 240,387,164 236,868,785
Heap Start Allocated 1.27 MiB 1.27 MiB
Heap End Allocated 1.27 MiB 1.27 MiB
Heap Delta Allocated 128 B 128 B

Measured on ubuntu-latest x64.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 2, 2026

Benchmark Results

407 benchmarks

Interpreted: 🟢 13 improved · 🔴 392 regressed · 2 unchanged · avg -25.5%
Bytecode: 🟢 114 improved · 🔴 45 regressed · 248 unchanged · avg +2.2%

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

Deterministic profile diff

Deterministic profile diff: no significant changes.

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

@frostney frostney merged commit 66694cd into main Jun 2, 2026
13 checks passed
@frostney frostney deleted the another-skills-update branch June 2, 2026 20:42
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 2, 2026

test262 Conformance

Category Run Passed Δ Pass Failed Pass-rate Δ Rate
built-ins 23,449 16,077 +1 7,367 68.6% ±0pp
harness 116 72 ±0 44 62.1% ±0pp
intl402 3,324 1,000 ±0 2,324 30.1% ±0pp
language 23,635 14,631 ±0 9,004 61.9% ±0pp
staging 1,484 576 ±0 906 38.8% ±0pp
total 52,008 32,356 +1 19,645 62.2% ±0pp

Areas closest to 100%

Area Pass rate Δ vs main Passing
built-ins/WeakMap 99.3% ±0pp 140 / 141
language/asi 99.0% ±0pp 101 / 102
built-ins/WeakSet 98.8% ±0pp 84 / 85
Per-test deltas (+1 / -0)

Newly passing (1):

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

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation internal Refactoring, CI, tooling, cleanup

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant