Skip to content

Add Error.cause support#249

Merged
frostney merged 1 commit into
mainfrom
t3code/error-cause-support
Apr 9, 2026
Merged

Add Error.cause support#249
frostney merged 1 commit into
mainfrom
t3code/error-cause-support

Conversation

@frostney
Copy link
Copy Markdown
Owner

@frostney frostney commented Apr 9, 2026

Summary

  • Added support for the cause option on Error and AggregateError constructors.
  • Switched to HasProperty-based detection so inherited and accessor cause values are handled correctly.
  • Defined cause as a non-enumerable, writable, configurable data property to match the spec.
  • Added end-to-end coverage for constructor behavior, property descriptors, inherited/getter causes, chaining, and AggregateError.

Testing

  • Added JavaScript tests in tests/built-ins/Error/cause.js covering happy paths and edge cases.
  • Updated units/Goccia.Builtins.Globals.pas to install cause via property descriptors for Error and AggregateError.

- Install `cause` on `Error` and `AggregateError` when present in options
- Add end-to-end coverage for value types, property attributes, and inheritance
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Apr 9, 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: b41b39f2-164d-4794-b2dc-ea83ce6decbb

📥 Commits

Reviewing files that changed from the base of the PR and between a2e0d0e and d532639.

📒 Files selected for processing (2)
  • tests/built-ins/Error/cause.js
  • units/Goccia.Builtins.Globals.pas

📝 Walkthrough

Walkthrough

A new test suite for Error.cause was added alongside implementation updates to properly handle the cause option when constructing error objects and subclasses. The implementation now explicitly checks for the presence of the cause property and defines it with appropriate descriptor flags.

Changes

Cohort / File(s) Summary
Error.cause Test Suite
tests/built-ins/Error/cause.js
Comprehensive test suite covering cause option for Error and built-in subclasses (TypeError, RangeError, ReferenceError, SyntaxError, URIError, AggregateError). Tests various input types, property configurability, inheritance, getters, and edge cases.
Error Construction Implementation
units/Goccia.Builtins.Globals.pas
Updated BuildErrorObject and AggregateErrorConstructor to check for cause property existence using HasProperty before defining the property via DefineProperty with configurable and writable flags, replacing conditional AssignProperty logic.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 inconclusive)

Check name Status Explanation Resolution
Description check ❓ Inconclusive The description includes a summary of changes and testing details. However, it is missing explicit documentation of the testing checklist and does not clearly address all required sections from the template. Complete the description template by checking the testing checkboxes and explicitly confirming whether documentation was updated and if benchmark regressions were verified.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The pull request title directly and concisely describes the main change: adding Error.cause support to the codebase.
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.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 9, 2026

Benchmark Results

274 benchmarks

Interpreted: 🟢 224 improved · 🔴 15 regressed · 35 unchanged · avg +6.7%
Bytecode: 🟢 1 improved · 🔴 252 regressed · 21 unchanged · avg -10.2%

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

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

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 9, 2026

Suite Timing

Suite Metric Interpreted Bytecode
Tests Total 4109 4109
Tests Passed 4068 ✅ 4109 ✅
Tests Skipped 41 0
Tests Test Duration 300.4ms 281.3ms
Tests Lex 81.7ms 54.2ms
Tests Parse 100.5ms 99.8ms
Tests Compile 63.9ms
Tests Execute 316.0ms 312.1ms
Tests Engine Total 498.1ms 530.0ms
Benchmarks Total 274 274
Benchmarks Duration 7.27min 6.54min

Measured on ubuntu-latest x64.

@frostney frostney merged commit de83e0f into main Apr 9, 2026
9 checks passed
@frostney frostney deleted the t3code/error-cause-support branch April 9, 2026 14:39
frostney added a commit that referenced this pull request Apr 9, 2026
Resolve conflict in AGENTS.md Build System section: keep trimmed
format from docs-cleanup, incorporate new changelog line from main
(git-cliff, #248). Error.cause (#249) already documented.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant