Skip to content

Include tests, benchmarks, and examples in nightly archives#355

Merged
frostney merged 1 commit into
mainfrom
t3code/nightly-release-contents
Apr 19, 2026
Merged

Include tests, benchmarks, and examples in nightly archives#355
frostney merged 1 commit into
mainfrom
t3code/nightly-release-contents

Conversation

@frostney
Copy link
Copy Markdown
Owner

@frostney frostney commented Apr 19, 2026

Summary

  • Nightly release archives now include tests/, benchmarks/, and examples/ directories, matching what tagged releases already ship
  • Previously nightly builds only contained the executables

🤖 Generated with Claude Code

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Apr 19, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 1cfd0e32-9537-4ef6-af3f-9d95acbc0318

📥 Commits

Reviewing files that changed from the base of the PR and between 15d37db and 5bec23f.

📒 Files selected for processing (1)
  • .github/workflows/ci.yml

📝 Walkthrough

Walkthrough

Modified GitHub Actions CI workflow to include tests/, benchmarks/, and examples/ directories in the staged package directories during both nightly and release builds before creating the final archives.

Changes

Cohort / File(s) Summary
CI/CD Workflow Configuration
.github/workflows/ci.yml
Added packaging steps to copy repository test, benchmark, and example directories into per-target staged package directories during nightly and release jobs.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 minutes

Possibly related PRs

Suggested labels

internal

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Description check ⚠️ Warning The description is incomplete. It lacks Testing section with checkboxes, documentation updates, and verification steps required by the template. Add the Testing section with appropriate checkboxes and verification steps, including confirmation that nightly workflow correctly packages the three directories.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately and concisely describes the main change: adding tests, benchmarks, and examples directories to nightly archives.
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.


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

@coderabbitai coderabbitai Bot added the internal Refactoring, CI, tooling, cleanup label Apr 19, 2026
@github-actions
Copy link
Copy Markdown
Contributor

Suite Timing

Suite Metric Interpreted Bytecode
Tests Total 5819 5819
Tests Passed 5778 ✅ 5819 ✅
Tests Skipped 41 0
Tests Workers 4 4
Tests Test Duration 1.00s 1.30s
Tests Lex (cumulative) 136.3ms 118.3ms
Tests Parse (cumulative) 185.3ms 268.6ms
Tests Compile (cumulative) 165.8ms
Tests Execute (cumulative) 924.3ms 1.19s
Tests Engine Total (cumulative) 1.25s 1.75s
Tests Lex (avg/worker) 34.1ms 29.6ms
Tests Parse (avg/worker) 46.3ms 67.1ms
Tests Compile (avg/worker) 41.4ms
Tests Execute (avg/worker) 231.1ms 298.7ms
Tests Engine Total (avg/worker) 311.5ms 436.9ms
Benchmarks Total 386 386
Benchmarks Workers 4 4
Benchmarks Duration 3.13min 2.73min

Measured on ubuntu-latest x64.

@github-actions
Copy link
Copy Markdown
Contributor

Benchmark Results

386 benchmarks

Interpreted: 🟢 267 improved · 🔴 17 regressed · 102 unchanged · avg +6.2%
Bytecode: 🟢 23 improved · 🔴 301 regressed · 62 unchanged · avg -5.3%

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

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 f313c17 into main Apr 19, 2026
10 checks passed
@frostney frostney deleted the t3code/nightly-release-contents branch April 19, 2026 18:28
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