Skip to content

Add pull request template checklist#196

Merged
frostney merged 1 commit into
mainfrom
t3code/pr-template-checklist
Apr 7, 2026
Merged

Add pull request template checklist#196
frostney merged 1 commit into
mainfrom
t3code/pr-template-checklist

Conversation

@frostney
Copy link
Copy Markdown
Owner

@frostney frostney commented Apr 7, 2026

Summary

  • Added a new GitHub pull request template at .github/pull_request_template.md.
  • The template provides a short summary section with prompts for describing the change, constraints, and related issues.
  • The template adds a testing checklist covering JS/TypeScript tests, documentation updates, native Pascal tests, and benchmark validation.

Testing

  • Not run (documentation/template-only change)
  • Reviewed the added template content for structure and checklist coverage

Summary by CodeRabbit

  • Chores
    • Introduced a standardized pull request template to streamline the contribution process with guided sections for summaries and testing verification.

- Add a PR template with summary and testing checklists
- Prompt contributors to confirm JS, docs, native, and benchmark validation
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Apr 7, 2026

📝 Walkthrough

Walkthrough

A new GitHub pull request template was added to standardize PR submissions with sections for summary information and testing verification checkboxes.

Changes

Cohort / File(s) Summary
GitHub PR Template
.github/pull_request_template.md
Added pull request template with sections for Summary (description, constraints, issue links) and Testing (checkboxes for E2E tests, documentation, native tests, benchmarks).

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~2 minutes

Poem

🐰 A template emerges, so neat and so fine,
For pull requests structured, each time, every line,
Summary and testing, all marked with a care,
This bunny's delighted—good practices everywhere! ✨

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The PR title 'Add pull request template checklist' accurately describes the main change: adding a new GitHub pull request template with checklist sections.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

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

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch t3code/pr-template-checklist

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

🧹 Nitpick comments (1)
.github/pull_request_template.md (1)

6-10: Consider tightening checklist wording for consistency and fewer false negatives.

Two small clarity tweaks: make docs conditional (if applicable) and optionally include canonical test commands used by this repo so contributors confirm the same execution path.

Suggested wording update
 ## Testing
 - [ ] Verified no regressions and confirmed the new feature or bugfix in end-to-end JavaScript/TypeScript tests
-- [ ] Updated documentation
+- [ ] Updated documentation (if applicable)
 - [ ] Optional: Verified no regressions and confirmed the new feature or bugfix in native Pascal tests (if AST, scope, evaluator, or value types changed)
 - [ ] Optional: Verified no benchmark regressions or confirmed benchmark coverage for the change
+ 
+<!-- Optional reference commands:
+JS tests: ./build.pas testrunner && ./build/TestRunner tests
+Native tests: ./build.pas clean tests && for t in build/Goccia.*.Test; do "$t"; done
+-->

Based on learnings: Always verify JavaScript tests by running ./build.pas testrunner && ./build/TestRunner tests, and run native Pascal tests with ./build.pas clean tests && for t in build/Goccia.*.Test; do "$t"; done when AST/scope/evaluator/value types change.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/pull_request_template.md around lines 6 - 10, Update the "Testing"
checklist to reduce false negatives by making documentation and native-Pascal
test items conditional and by adding the canonical test commands for
JavaScript/TypeScript and native Pascal to ensure contributors run the same
verification; specifically, change "Updated documentation" to "Updated
documentation (if applicable)", change the native test line to "Optional:
Verified no regressions and confirmed the new feature or bugfix in native Pascal
tests (if applicable, e.g., AST/scope/evaluator/value type changes)", and append
the recommended commands for JS/TS tests ("./build.pas testrunner &&
./build/TestRunner tests") and for native Pascal tests ("./build.pas clean tests
&& for t in build/Goccia.*.Test; do \"$t\"; done") to the respective checklist
items so contributors know the exact commands to run.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In @.github/pull_request_template.md:
- Around line 6-10: Update the "Testing" checklist to reduce false negatives by
making documentation and native-Pascal test items conditional and by adding the
canonical test commands for JavaScript/TypeScript and native Pascal to ensure
contributors run the same verification; specifically, change "Updated
documentation" to "Updated documentation (if applicable)", change the native
test line to "Optional: Verified no regressions and confirmed the new feature or
bugfix in native Pascal tests (if applicable, e.g., AST/scope/evaluator/value
type changes)", and append the recommended commands for JS/TS tests
("./build.pas testrunner && ./build/TestRunner tests") and for native Pascal
tests ("./build.pas clean tests && for t in build/Goccia.*.Test; do \"$t\";
done") to the respective checklist items so contributors know the exact commands
to run.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: e7c68872-f6cf-46bb-8185-fbc8bbe88f51

📥 Commits

Reviewing files that changed from the base of the PR and between 22e9f40 and 3f4c37e.

📒 Files selected for processing (1)
  • .github/pull_request_template.md

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 7, 2026

Benchmark Results

274 benchmarks

Interpreted: 🟢 28 improved · 🔴 151 regressed · 95 unchanged · avg -2.1%
Bytecode: 🟢 169 improved · 🔴 15 regressed · 90 unchanged · avg +3.0%

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

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

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 7, 2026

Suite Timing

Suite Metric Interpreted Bytecode
Tests Total 3701 3701
Tests Passed 3660 ✅ 3701 ✅
Tests Skipped 41 0
Tests Execution 220.2ms 202.7ms
Tests Engine 396.4ms 700.9ms
Benchmarks Total 274 274
Benchmarks Duration 7.25min 6.17min

Measured on ubuntu-latest x64.

@frostney frostney merged commit 8674b01 into main Apr 7, 2026
9 checks passed
@frostney frostney deleted the t3code/pr-template-checklist branch April 7, 2026 12:43
@frostney frostney added the internal Refactoring, CI, tooling, cleanup label Apr 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

internal Refactoring, CI, tooling, cleanup

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant