Skip to content

Commit 8633d27

Browse files
authoredDec 6, 2022
perf(css/ast): Reduce token size (#6569)
1 parent 9d0247a commit 8633d27

File tree

128 files changed

+1552
-1043
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

128 files changed

+1552
-1043
lines changed
 

‎crates/swc_css_ast/src/base.rs

+27-27
Original file line numberDiff line numberDiff line change
@@ -88,65 +88,65 @@ pub struct ListOfComponentValues {
8888
pub enum ComponentValue {
8989
// No grammar
9090
#[tag("TokenAndSpan")]
91-
PreservedToken(TokenAndSpan),
91+
PreservedToken(Box<TokenAndSpan>),
9292
#[tag("Function")]
93-
Function(Function),
93+
Function(Box<Function>),
9494
#[tag("SimpleBlock")]
95-
SimpleBlock(SimpleBlock),
95+
SimpleBlock(Box<SimpleBlock>),
9696

9797
// Block Contents grammar
9898
#[tag("DeclarationOrAtRule")]
99-
DeclarationOrAtRule(DeclarationOrAtRule),
99+
DeclarationOrAtRule(Box<DeclarationOrAtRule>),
100100
#[tag("Rule")]
101-
Rule(Rule),
101+
Rule(Box<Rule>),
102102
#[tag("StyleBlock")]
103-
StyleBlock(StyleBlock),
103+
StyleBlock(Box<StyleBlock>),
104104
#[tag("KeyframeBlock")]
105-
KeyframeBlock(KeyframeBlock),
105+
KeyframeBlock(Box<KeyframeBlock>),
106106

107107
// Arbitrary Contents grammar
108108
#[tag("Ident")]
109-
Ident(Ident),
109+
Ident(Box<Ident>),
110110
#[tag("DashedIdent")]
111-
DashedIdent(DashedIdent),
111+
DashedIdent(Box<DashedIdent>),
112112
#[tag("String")]
113-
Str(Str),
113+
Str(Box<Str>),
114114
#[tag("Url")]
115-
Url(Url),
115+
Url(Box<Url>),
116116
#[tag("Integer")]
117-
Integer(Integer),
117+
Integer(Box<Integer>),
118118
#[tag("Number")]
119-
Number(Number),
119+
Number(Box<Number>),
120120
#[tag("Percentage")]
121-
Percentage(Percentage),
121+
Percentage(Box<Percentage>),
122122
#[tag("Dimension")]
123-
Dimension(Dimension),
123+
Dimension(Box<Dimension>),
124124
#[tag("Ratio")]
125-
Ratio(Ratio),
125+
Ratio(Box<Ratio>),
126126
#[tag("UnicodeRange")]
127-
UnicodeRange(UnicodeRange),
127+
UnicodeRange(Box<UnicodeRange>),
128128
#[tag("Color")]
129-
Color(Color),
129+
Color(Box<Color>),
130130
#[tag("AlphaValue")]
131-
AlphaValue(AlphaValue),
131+
AlphaValue(Box<AlphaValue>),
132132
#[tag("Hue")]
133-
Hue(Hue),
133+
Hue(Box<Hue>),
134134
#[tag("CmykComponent")]
135-
CmykComponent(CmykComponent),
135+
CmykComponent(Box<CmykComponent>),
136136
#[tag("Delimiter")]
137-
Delimiter(Delimiter),
137+
Delimiter(Box<Delimiter>),
138138

139139
// Special function Contents grammar
140140
#[tag("CalcSum")]
141-
CalcSum(CalcSum),
141+
CalcSum(Box<CalcSum>),
142142
#[tag("ComplexSelector")]
143-
ComplexSelector(ComplexSelector),
143+
ComplexSelector(Box<ComplexSelector>),
144144
#[tag("LayerName")]
145-
LayerName(LayerName),
145+
LayerName(Box<LayerName>),
146146
#[tag("SupportsCondition")]
147-
SupportsCondition(SupportsCondition),
147+
SupportsCondition(Box<SupportsCondition>),
148148
#[tag("Declaration")]
149-
Declaration(Declaration),
149+
Declaration(Box<Declaration>),
150150
}
151151

152152
#[ast_node]

‎crates/swc_css_ast/src/token.rs

+46-77
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,21 @@ pub enum NumberType {
3535
Number,
3636
}
3737

38+
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, EqIgnoreSpan)]
39+
#[cfg_attr(
40+
feature = "rkyv",
41+
derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize)
42+
)]
43+
pub struct DimensionToken {
44+
pub value: f64,
45+
pub raw_value: Atom,
46+
#[cfg_attr(feature = "rkyv", with(swc_atoms::EncodeJsWord))]
47+
pub unit: JsWord,
48+
#[serde(rename = "type")]
49+
pub type_flag: NumberType,
50+
pub raw_unit: Atom,
51+
}
52+
3853
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, EqIgnoreSpan)]
3954
#[cfg_attr(
4055
feature = "rkyv",
@@ -54,116 +69,80 @@ pub enum Token {
5469
value: JsWord,
5570
raw: Atom,
5671
},
57-
5872
Function {
5973
#[cfg_attr(feature = "rkyv", with(swc_atoms::EncodeJsWord))]
6074
value: JsWord,
6175
raw: Atom,
6276
},
63-
6477
/// `@`
6578
AtKeyword {
6679
#[cfg_attr(feature = "rkyv", with(swc_atoms::EncodeJsWord))]
6780
value: JsWord,
6881
raw: Atom,
6982
},
70-
7183
/// `#`
7284
Hash {
7385
is_id: bool,
7486
#[cfg_attr(feature = "rkyv", with(swc_atoms::EncodeJsWord))]
7587
value: JsWord,
7688
raw: Atom,
7789
},
78-
7990
String {
8091
#[cfg_attr(feature = "rkyv", with(swc_atoms::EncodeJsWord))]
8192
value: JsWord,
8293
raw: Atom,
8394
},
84-
8595
BadString {
86-
raw_value: Atom,
96+
raw: Atom,
8797
},
88-
8998
/// `url(value)`
9099
Url {
91-
#[cfg_attr(feature = "rkyv", with(swc_atoms::EncodeJsWord))]
92-
name: JsWord,
93-
raw_name: Atom,
94100
#[cfg_attr(feature = "rkyv", with(swc_atoms::EncodeJsWord))]
95101
value: JsWord,
96-
raw_value: Atom,
102+
/// Name and value
103+
raw: Box<(Atom, Atom)>,
97104
},
98-
99105
BadUrl {
100-
#[cfg_attr(feature = "rkyv", with(swc_atoms::EncodeJsWord))]
101-
name: JsWord,
102-
raw_name: Atom,
103-
raw_value: Atom,
106+
raw: Atom,
104107
},
105-
106108
Delim {
107109
value: char,
108110
},
109-
110111
Number {
111112
value: f64,
112113
raw: Atom,
113114
#[serde(rename = "type")]
114115
type_flag: NumberType,
115116
},
116-
117117
Percentage {
118118
value: f64,
119119
raw: Atom,
120120
},
121-
122-
Dimension {
123-
value: f64,
124-
raw_value: Atom,
125-
#[cfg_attr(feature = "rkyv", with(swc_atoms::EncodeJsWord))]
126-
unit: JsWord,
127-
raw_unit: Atom,
128-
#[serde(rename = "type")]
129-
type_flag: NumberType,
130-
},
131-
121+
Dimension(Box<DimensionToken>),
132122
/// One or more whitespace.
133123
WhiteSpace {
134124
value: Atom,
135125
},
136-
137126
/// `<!--`
138127
CDO,
139-
140128
/// `-->`
141129
CDC,
142-
143130
/// `:``
144131
Colon,
145-
146132
/// `;`
147133
Semi,
148-
149134
/// `,`
150135
Comma,
151-
152136
/// `[`
153137
LBracket,
154-
155138
/// `]`
156139
RBracket,
157-
158140
/// `(`
159141
LParen,
160-
161142
/// `)`
162143
RParen,
163-
164144
/// `{`
165145
LBrace,
166-
167146
/// `}`
168147
RBrace,
169148
}
@@ -187,40 +166,36 @@ impl Hash for Token {
187166
}
188167

189168
match self {
190-
Token::Ident { value, raw }
191-
| Token::Function { value, raw }
192-
| Token::AtKeyword { value, raw }
193-
| Token::String { value, raw } => {
169+
Token::Ident { value, raw } => {
194170
value.hash(state);
195171
raw.hash(state);
196172
}
197-
Token::BadString { raw_value } => {
198-
raw_value.hash(state);
173+
Token::Function { value, raw } => {
174+
value.hash(state);
175+
raw.hash(state);
176+
}
177+
Token::AtKeyword { value, raw } => {
178+
value.hash(state);
179+
raw.hash(state);
180+
}
181+
Token::String { value, raw } => {
182+
value.hash(state);
183+
raw.hash(state);
184+
}
185+
Token::BadString { raw } => {
186+
raw.hash(state);
199187
}
200188
Token::Hash { value, raw, is_id } => {
201189
value.hash(state);
202190
raw.hash(state);
203191
is_id.hash(state);
204192
}
205-
Token::Url {
206-
name,
207-
raw_name,
208-
value,
209-
raw_value,
210-
} => {
211-
name.hash(state);
212-
raw_name.hash(state);
193+
Token::Url { value, raw } => {
213194
value.hash(state);
214-
raw_value.hash(state);
195+
raw.hash(state);
215196
}
216-
Token::BadUrl {
217-
name,
218-
raw_name,
219-
raw_value,
220-
} => {
221-
name.hash(state);
222-
raw_name.hash(state);
223-
raw_value.hash(state);
197+
Token::BadUrl { raw, .. } => {
198+
raw.hash(state);
224199
}
225200
Token::Delim { value } => {
226201
value.hash(state);
@@ -238,20 +213,14 @@ impl Hash for Token {
238213
integer_decode(*value).hash(state);
239214
raw.hash(state);
240215
}
241-
Token::Dimension {
242-
value,
243-
raw_value,
244-
unit,
245-
raw_unit,
246-
type_flag,
247-
} => {
248-
integer_decode(*value).hash(state);
249-
raw_value.hash(state);
250-
unit.hash(state);
251-
raw_unit.hash(state);
252-
type_flag.hash(state);
216+
Token::Dimension(dimension) => {
217+
integer_decode(dimension.value).hash(state);
218+
dimension.unit.hash(state);
219+
dimension.type_flag.hash(state);
220+
dimension.raw_value.hash(state);
221+
dimension.raw_unit.hash(state);
253222
}
254-
Token::WhiteSpace { value } => {
223+
Token::WhiteSpace { value, .. } => {
255224
value.hash(state);
256225
}
257226
Token::CDO

1 commit comments

Comments
 (1)

github-actions[bot] commented on Dec 6, 2022

@github-actions[bot]

Benchmark

Benchmark suite Current: 8633d27 Previous: ad95ead Ratio
es/full/bugs-1 355955 ns/iter (± 23391) 349126 ns/iter (± 51224) 1.02
es/full/minify/libraries/antd 2074256177 ns/iter (± 42312882) 2005709384 ns/iter (± 23971869) 1.03
es/full/minify/libraries/d3 470748383 ns/iter (± 12776484) 431507299 ns/iter (± 17555624) 1.09
es/full/minify/libraries/echarts 1668518668 ns/iter (± 25975328) 1737759431 ns/iter (± 55567864) 0.96
es/full/minify/libraries/jquery 113988748 ns/iter (± 4757739) 115306802 ns/iter (± 8146660) 0.99
es/full/minify/libraries/lodash 137292553 ns/iter (± 4524299) 131533739 ns/iter (± 22798873) 1.04
es/full/minify/libraries/moment 66923243 ns/iter (± 5153896) 67778714 ns/iter (± 6074974) 0.99
es/full/minify/libraries/react 25186007 ns/iter (± 1112396) 22135480 ns/iter (± 2337502) 1.14
es/full/minify/libraries/terser 353103492 ns/iter (± 13037696) 335168257 ns/iter (± 16355075) 1.05
es/full/minify/libraries/three 644744601 ns/iter (± 17554761) 626864277 ns/iter (± 12529049) 1.03
es/full/minify/libraries/typescript 3829266116 ns/iter (± 62621533) 3806480072 ns/iter (± 41925400) 1.01
es/full/minify/libraries/victory 912006407 ns/iter (± 30388870) 980598818 ns/iter (± 62152431) 0.93
es/full/minify/libraries/vue 172806701 ns/iter (± 7097635) 186171761 ns/iter (± 39465352) 0.93
es/full/codegen/es3 34648 ns/iter (± 3653) 35530 ns/iter (± 3535) 0.98
es/full/codegen/es5 34707 ns/iter (± 4450) 34897 ns/iter (± 4061) 0.99
es/full/codegen/es2015 35481 ns/iter (± 4222) 35544 ns/iter (± 5642) 1.00
es/full/codegen/es2016 34698 ns/iter (± 5155) 35340 ns/iter (± 3283) 0.98
es/full/codegen/es2017 34945 ns/iter (± 4089) 36077 ns/iter (± 4358) 0.97
es/full/codegen/es2018 35886 ns/iter (± 6685) 35021 ns/iter (± 5510) 1.02
es/full/codegen/es2019 34359 ns/iter (± 2987) 34958 ns/iter (± 5465) 0.98
es/full/codegen/es2020 35858 ns/iter (± 6349) 35144 ns/iter (± 4445) 1.02
es/full/all/es3 206414744 ns/iter (± 14046727) 198734925 ns/iter (± 15894404) 1.04
es/full/all/es5 189877395 ns/iter (± 17583766) 187761665 ns/iter (± 15165323) 1.01
es/full/all/es2015 150824523 ns/iter (± 7502891) 151063053 ns/iter (± 10703975) 1.00
es/full/all/es2016 163363948 ns/iter (± 16297666) 150740393 ns/iter (± 15137766) 1.08
es/full/all/es2017 156392441 ns/iter (± 12666257) 151336708 ns/iter (± 31271585) 1.03
es/full/all/es2018 151988067 ns/iter (± 10754135) 147259927 ns/iter (± 13510691) 1.03
es/full/all/es2019 146125605 ns/iter (± 7321473) 157021835 ns/iter (± 20201457) 0.93
es/full/all/es2020 141531282 ns/iter (± 5759423) 141912546 ns/iter (± 11883928) 1.00
es/full/parser 736734 ns/iter (± 89877) 761806 ns/iter (± 79287) 0.97
es/full/base/fixer 26595 ns/iter (± 1940) 27263 ns/iter (± 3450) 0.98
es/full/base/resolver_and_hygiene 93144 ns/iter (± 6704) 95987 ns/iter (± 8357) 0.97
serialization of ast node 215 ns/iter (± 21) 213 ns/iter (± 17) 1.01
serialization of serde 233 ns/iter (± 36) 231 ns/iter (± 26) 1.01

This comment was automatically generated by workflow using github-action-benchmark.

Please sign in to comment.