mirror of
https://github.com/oxc-project/oxc.git
synced 2026-11-04 18:43:44 +00:00
perf(parser): size delimited lists after the first element (#28373)
Allocate delimited lists after parsing their first element so single-element lists use one slot and longer lists avoid the first growth step. AI-assisted implementation.
This commit is contained in:
1 parent
bd869b53d7
commit
50bd0a951a
6 files changed
+64
-40
No files matched your search
@@ -469,13 +469,23 @@ impl<'a, C: Config> ParserImpl<'a, C> {
|
||||
close: Kind,
|
||||
separator: Kind,
|
||||
opening_span: Span,
|
||||
parse_element: F,
|
||||
mut parse_element: F,
|
||||
) -> (ArenaVec<'a, T>, Option<u32>)
|
||||
where
|
||||
F: FnMut(&mut Self) -> T,
|
||||
{
|
||||
let mut list = ArenaVec::new_in(self);
|
||||
let trailing_separator = self.parse_delimited_list_into(
|
||||
if self.at(close) || self.has_fatal_error() {
|
||||
return (ArenaVec::new_in(self), None);
|
||||
}
|
||||
let first = parse_element(self);
|
||||
if self.at(close) || self.has_fatal_error() {
|
||||
let mut list = ArenaVec::with_capacity_in(1, self);
|
||||
list.push(first);
|
||||
return (list, None);
|
||||
}
|
||||
let mut list = ArenaVec::with_capacity_in(2, self);
|
||||
list.push(first);
|
||||
let trailing_separator = self.parse_delimited_list_rest(
|
||||
&mut list,
|
||||
close,
|
||||
separator,
|
||||
@@ -503,6 +513,20 @@ impl<'a, C: Config> ParserImpl<'a, C> {
|
||||
}
|
||||
let element = parse_element(self);
|
||||
list.push(element);
|
||||
self.parse_delimited_list_rest(list, close, separator, opening_span, parse_element)
|
||||
}
|
||||
|
||||
pub(crate) fn parse_delimited_list_rest<F, T>(
|
||||
&mut self,
|
||||
list: &mut ArenaVec<'a, T>,
|
||||
close: Kind,
|
||||
separator: Kind,
|
||||
opening_span: Span,
|
||||
mut parse_element: F,
|
||||
) -> Option<u32>
|
||||
where
|
||||
F: FnMut(&mut Self) -> T,
|
||||
{
|
||||
loop {
|
||||
let kind = self.cur_kind();
|
||||
if kind == close || self.has_fatal_error() {
|
||||
|
||||
@@ -7,7 +7,7 @@ checker.ts:
|
||||
sys peak growth: 2973842 # 2.97 MB
|
||||
arena allocs: 36968
|
||||
arena reallocs: 927
|
||||
arena size: 38665048 # 38.67 MB
|
||||
arena size: 38546952 # 38.55 MB
|
||||
|
||||
App.tsx:
|
||||
file size: 415342 # 415.34 kB
|
||||
@@ -18,7 +18,7 @@ App.tsx:
|
||||
sys peak growth: 435478 # 435.48 kB
|
||||
arena allocs: 11511
|
||||
arena reallocs: 362
|
||||
arena size: 7086616 # 7.09 MB
|
||||
arena size: 7071288 # 7.07 MB
|
||||
|
||||
RadixUIAdoptionSection.jsx:
|
||||
file size: 2520 # 2.52 kB
|
||||
@@ -40,7 +40,7 @@ pdf.mjs:
|
||||
sys peak growth: 1156488 # 1.16 MB
|
||||
arena allocs: 21652
|
||||
arena reallocs: 402
|
||||
arena size: 11048480 # 11.05 MB
|
||||
arena size: 11012784 # 11.01 MB
|
||||
|
||||
antd.js:
|
||||
file size: 6686316 # 6.69 MB
|
||||
@@ -51,7 +51,7 @@ antd.js:
|
||||
sys peak growth: 13710144 # 13.71 MB
|
||||
arena allocs: 120676
|
||||
arena reallocs: 1889
|
||||
arena size: 114754760 # 114.75 MB
|
||||
arena size: 114439144 # 114.44 MB
|
||||
|
||||
binder.ts:
|
||||
file size: 193077 # 193.08 kB
|
||||
@@ -62,7 +62,7 @@ binder.ts:
|
||||
sys peak growth: 195197 # 195.20 kB
|
||||
arena allocs: 2092
|
||||
arena reallocs: 38
|
||||
arena size: 2545448 # 2.55 MB
|
||||
arena size: 2539336 # 2.54 MB
|
||||
|
||||
kitchen-sink.tsx:
|
||||
file size: 732898 # 732.90 kB
|
||||
@@ -73,4 +73,4 @@ kitchen-sink.tsx:
|
||||
sys peak growth: 1491884 # 1.49 MB
|
||||
arena allocs: 30654
|
||||
arena reallocs: 975
|
||||
arena size: 14595272 # 14.60 MB
|
||||
arena size: 14548696 # 14.55 MB
|
||||
@@ -7,7 +7,7 @@ checker.ts:
|
||||
sys peak growth: 10169560 # 10.17 MB
|
||||
arena allocs: 56228
|
||||
arena reallocs: 5084
|
||||
arena size: 16501008 # 16.50 MB
|
||||
arena size: 16382912 # 16.38 MB
|
||||
|
||||
App.tsx:
|
||||
file size: 415342 # 415.34 kB
|
||||
@@ -18,7 +18,7 @@ App.tsx:
|
||||
sys peak growth: 1612427 # 1.61 MB
|
||||
arena allocs: 7729
|
||||
arena reallocs: 920
|
||||
arena size: 2782328 # 2.78 MB
|
||||
arena size: 2767000 # 2.77 MB
|
||||
|
||||
RadixUIAdoptionSection.jsx:
|
||||
file size: 2520 # 2.52 kB
|
||||
@@ -40,7 +40,7 @@ pdf.mjs:
|
||||
sys peak growth: 3693355 # 3.69 MB
|
||||
arena allocs: 19582
|
||||
arena reallocs: 2574
|
||||
arena size: 5726904 # 5.73 MB
|
||||
arena size: 5691208 # 5.69 MB
|
||||
|
||||
antd.js:
|
||||
file size: 6686316 # 6.69 MB
|
||||
@@ -51,7 +51,7 @@ antd.js:
|
||||
sys peak growth: 19934725 # 19.93 MB
|
||||
arena allocs: 175842
|
||||
arena reallocs: 34169
|
||||
arena size: 44039296 # 44.04 MB
|
||||
arena size: 43723680 # 43.72 MB
|
||||
|
||||
binder.ts:
|
||||
file size: 193077 # 193.08 kB
|
||||
@@ -62,7 +62,7 @@ binder.ts:
|
||||
sys peak growth: 657404 # 657.40 kB
|
||||
arena allocs: 2930
|
||||
arena reallocs: 244
|
||||
arena size: 1092336 # 1.09 MB
|
||||
arena size: 1086224 # 1.09 MB
|
||||
|
||||
kitchen-sink.tsx:
|
||||
file size: 732898 # 732.90 kB
|
||||
@@ -73,4 +73,4 @@ kitchen-sink.tsx:
|
||||
sys peak growth: 3707425 # 3.71 MB
|
||||
arena allocs: 31100
|
||||
arena reallocs: 3011
|
||||
arena size: 8460008 # 8.46 MB
|
||||
arena size: 8413432 # 8.41 MB
|
||||
@@ -6,8 +6,8 @@ checker.ts:
|
||||
sys alloc bytes: 4820 # 4.82 kB
|
||||
sys peak growth: 2432 # 2.43 kB
|
||||
arena allocs: 262590
|
||||
arena reallocs: 22858
|
||||
arena size: 13054768 # 13.05 MB
|
||||
arena reallocs: 15233
|
||||
arena size: 12936672 # 12.94 MB
|
||||
|
||||
App.tsx:
|
||||
file size: 415342 # 415.34 kB
|
||||
@@ -17,8 +17,8 @@ App.tsx:
|
||||
sys alloc bytes: 4348 # 4.35 kB
|
||||
sys peak growth: 1868 # 1.87 kB
|
||||
arena allocs: 44037
|
||||
arena reallocs: 3537
|
||||
arena size: 2247136 # 2.25 MB
|
||||
arena reallocs: 2263
|
||||
arena size: 2231808 # 2.23 MB
|
||||
|
||||
RadixUIAdoptionSection.jsx:
|
||||
file size: 2520 # 2.52 kB
|
||||
@@ -28,7 +28,7 @@ RadixUIAdoptionSection.jsx:
|
||||
sys alloc bytes: 108 # 108 B
|
||||
sys peak growth: 108 # 108 B
|
||||
arena allocs: 367
|
||||
arena reallocs: 66
|
||||
arena reallocs: 58
|
||||
arena size: 21200 # 21.20 kB
|
||||
|
||||
pdf.mjs:
|
||||
@@ -39,8 +39,8 @@ pdf.mjs:
|
||||
sys alloc bytes: 24020 # 24.02 kB
|
||||
sys peak growth: 12140 # 12.14 kB
|
||||
arena allocs: 89857
|
||||
arena reallocs: 8136
|
||||
arena size: 4553008 # 4.55 MB
|
||||
arena reallocs: 5904
|
||||
arena size: 4517312 # 4.52 MB
|
||||
|
||||
antd.js:
|
||||
file size: 6686316 # 6.69 MB
|
||||
@@ -50,8 +50,8 @@ antd.js:
|
||||
sys alloc bytes: 109952 # 109.95 kB
|
||||
sys peak growth: 48264 # 48.26 kB
|
||||
arena allocs: 528577
|
||||
arena reallocs: 55355
|
||||
arena size: 30470456 # 30.47 MB
|
||||
arena reallocs: 35629
|
||||
arena size: 30154616 # 30.15 MB
|
||||
|
||||
binder.ts:
|
||||
file size: 193077 # 193.08 kB
|
||||
@@ -61,8 +61,8 @@ binder.ts:
|
||||
sys alloc bytes: 3016 # 3.02 kB
|
||||
sys peak growth: 251 # 251 B
|
||||
arena allocs: 16587
|
||||
arena reallocs: 1476
|
||||
arena size: 924032 # 924.03 kB
|
||||
arena reallocs: 1093
|
||||
arena size: 917920 # 917.92 kB
|
||||
|
||||
kitchen-sink.tsx:
|
||||
file size: 732898 # 732.90 kB
|
||||
@@ -72,5 +72,5 @@ kitchen-sink.tsx:
|
||||
sys alloc bytes: 34053 # 34.05 kB
|
||||
sys peak growth: 3892 # 3.89 kB
|
||||
arena allocs: 136453
|
||||
arena reallocs: 11898
|
||||
arena size: 6456232 # 6.46 MB
|
||||
arena reallocs: 8759
|
||||
arena size: 6409648 # 6.41 MB
|
||||
@@ -7,7 +7,7 @@ checker.ts:
|
||||
sys peak growth: 3858362 # 3.86 MB
|
||||
arena allocs: 0
|
||||
arena reallocs: 0
|
||||
arena size: 13054768 # 13.05 MB
|
||||
arena size: 12936672 # 12.94 MB
|
||||
|
||||
App.tsx:
|
||||
file size: 415342 # 415.34 kB
|
||||
@@ -18,7 +18,7 @@ App.tsx:
|
||||
sys peak growth: 360848 # 360.85 kB
|
||||
arena allocs: 0
|
||||
arena reallocs: 0
|
||||
arena size: 2247136 # 2.25 MB
|
||||
arena size: 2231808 # 2.23 MB
|
||||
|
||||
RadixUIAdoptionSection.jsx:
|
||||
file size: 2520 # 2.52 kB
|
||||
@@ -40,7 +40,7 @@ pdf.mjs:
|
||||
sys peak growth: 832762 # 832.76 kB
|
||||
arena allocs: 0
|
||||
arena reallocs: 0
|
||||
arena size: 4553008 # 4.55 MB
|
||||
arena size: 4517312 # 4.52 MB
|
||||
|
||||
antd.js:
|
||||
file size: 6686316 # 6.69 MB
|
||||
@@ -51,7 +51,7 @@ antd.js:
|
||||
sys peak growth: 5441278 # 5.44 MB
|
||||
arena allocs: 0
|
||||
arena reallocs: 0
|
||||
arena size: 30470456 # 30.47 MB
|
||||
arena size: 30154616 # 30.15 MB
|
||||
|
||||
binder.ts:
|
||||
file size: 193077 # 193.08 kB
|
||||
@@ -62,7 +62,7 @@ binder.ts:
|
||||
sys peak growth: 246886 # 246.89 kB
|
||||
arena allocs: 0
|
||||
arena reallocs: 0
|
||||
arena size: 924032 # 924.03 kB
|
||||
arena size: 917920 # 917.92 kB
|
||||
|
||||
kitchen-sink.tsx:
|
||||
file size: 732898 # 732.90 kB
|
||||
@@ -73,4 +73,4 @@ kitchen-sink.tsx:
|
||||
sys peak growth: 1101954 # 1.10 MB
|
||||
arena allocs: 0
|
||||
arena reallocs: 0
|
||||
arena size: 6456232 # 6.46 MB
|
||||
arena size: 6409648 # 6.41 MB
|
||||
@@ -7,7 +7,7 @@ checker.ts:
|
||||
sys peak growth: 2243 # 2.24 kB
|
||||
arena allocs: 1959
|
||||
arena reallocs: 5
|
||||
arena size: 13143224 # 13.14 MB
|
||||
arena size: 13025128 # 13.03 MB
|
||||
|
||||
App.tsx:
|
||||
file size: 415342 # 415.34 kB
|
||||
@@ -18,7 +18,7 @@ App.tsx:
|
||||
sys peak growth: 2584 # 2.58 kB
|
||||
arena allocs: 618
|
||||
arena reallocs: 17
|
||||
arena size: 2280424 # 2.28 MB
|
||||
arena size: 2265096 # 2.27 MB
|
||||
|
||||
RadixUIAdoptionSection.jsx:
|
||||
file size: 2520 # 2.52 kB
|
||||
@@ -40,7 +40,7 @@ pdf.mjs:
|
||||
sys peak growth: 1610 # 1.61 kB
|
||||
arena allocs: 2
|
||||
arena reallocs: 0
|
||||
arena size: 4553032 # 4.55 MB
|
||||
arena size: 4517336 # 4.52 MB
|
||||
|
||||
antd.js:
|
||||
file size: 6686316 # 6.69 MB
|
||||
@@ -51,7 +51,7 @@ antd.js:
|
||||
sys peak growth: 1611 # 1.61 kB
|
||||
arena allocs: 2
|
||||
arena reallocs: 0
|
||||
arena size: 30470480 # 30.47 MB
|
||||
arena size: 30154640 # 30.15 MB
|
||||
|
||||
binder.ts:
|
||||
file size: 193077 # 193.08 kB
|
||||
@@ -62,7 +62,7 @@ binder.ts:
|
||||
sys peak growth: 1625 # 1.62 kB
|
||||
arena allocs: 154
|
||||
arena reallocs: 0
|
||||
arena size: 930712 # 930.71 kB
|
||||
arena size: 924600 # 924.60 kB
|
||||
|
||||
kitchen-sink.tsx:
|
||||
file size: 732898 # 732.90 kB
|
||||
@@ -73,4 +73,4 @@ kitchen-sink.tsx:
|
||||
sys peak growth: 3218 # 3.22 kB
|
||||
arena allocs: 6132
|
||||
arena reallocs: 280
|
||||
arena size: 6790328 # 6.79 MB
|
||||
arena size: 6743744 # 6.74 MB
|
||||
Reference in new issue
Block a user