Skip to content

Preserve UTF-8 parser inputs on Windows#188

Merged
frostney merged 3 commits into
mainfrom
fix/windows-toml-i386-followup
Apr 5, 2026
Merged

Preserve UTF-8 parser inputs on Windows#188
frostney merged 3 commits into
mainfrom
fix/windows-toml-i386-followup

Conversation

@frostney
Copy link
Copy Markdown
Owner

@frostney frostney commented Apr 5, 2026

Summary

  • add a shared UTF-8 file reader for parser-backed file inputs on Windows
  • switch the TOML compliance harness and TOML/import-map/globals/source file loading paths over to it
  • add UTF-8 regressions for the TOML parser, globals file loading, and TOML module imports, and document the Windows parser-input rule

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 5, 2026

Suite Timing

Suite Metric Interpreted Bytecode
Tests Total 3662 3662
Tests Passed 3621 ✅ 3662 ✅
Tests Skipped 41 0
Tests Execution 188.9ms 187.2ms
Tests Engine 349.0ms 665.2ms
Benchmarks Total 274 274
Benchmarks Duration 7.53min 6.25min

Measured on ubuntu-latest x64.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 5, 2026

Benchmark Results

274 benchmarks

Interpreted: 🟢 2 improved · 🔴 262 regressed · 10 unchanged · avg -5.3%
Bytecode: 🟢 75 improved · 🔴 60 regressed · 139 unchanged · avg +0.5%

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

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 88eba67 into main Apr 5, 2026
47 checks passed
@frostney frostney deleted the fix/windows-toml-i386-followup branch April 5, 2026 17:57
@frostney frostney added the bug Something isn't working label Apr 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant