Skip to content

Commit 08fa94f

Browse files
authoredMar 23, 2023
refactor(es/codegen): Extract code from generic functions to reduce compile time (#7127)
1 parent f81ac50 commit 08fa94f

File tree

2 files changed

+236
-159
lines changed

2 files changed

+236
-159
lines changed
 

‎crates/swc_ecma_ast/src/source_map.rs

+12-14
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,12 @@ pub trait SourceMapperExt {
3535
false
3636
}
3737

38-
fn should_write_separating_line_terminator<P: Spanned, N: Spanned>(
38+
fn should_write_separating_line_terminator(
3939
&self,
40-
prev: Option<P>,
41-
next: Option<N>,
40+
prev: Option<Span>,
41+
next: Option<Span>,
4242
format: ListFormat,
4343
) -> bool {
44-
let prev = prev.map(|s| s.span());
45-
let next = next.map(|s| s.span());
46-
4744
if format.contains(ListFormat::MultiLine) {
4845
return true;
4946
}
@@ -63,10 +60,10 @@ pub trait SourceMapperExt {
6360
false
6461
}
6562

66-
fn should_write_leading_line_terminator<N: Spanned>(
63+
fn should_write_leading_line_terminator(
6764
&self,
6865
parent_node: Span,
69-
children: &[N],
66+
first_child: Option<Span>,
7067
format: ListFormat,
7168
) -> bool {
7269
if format.contains(ListFormat::MultiLine) {
@@ -78,11 +75,11 @@ pub trait SourceMapperExt {
7875
return true;
7976
}
8077

81-
if children.is_empty() {
78+
if first_child.is_none() {
8279
return !self.is_on_same_line(parent_node.lo(), parent_node.hi());
8380
}
8481

85-
let first_child = children[0].span();
82+
let first_child = first_child.unwrap();
8683
if parent_node.is_synthesized() || first_child.is_synthesized() {
8784
return first_child.starts_on_new_line(format);
8885
}
@@ -93,10 +90,10 @@ pub trait SourceMapperExt {
9390
}
9491
}
9592

96-
fn should_write_closing_line_terminator<N: Spanned>(
93+
fn should_write_closing_line_terminator(
9794
&self,
9895
parent_node: Span,
99-
children: &[N],
96+
last_child: Option<Span>,
10097
format: ListFormat,
10198
) -> bool {
10299
if format.contains(ListFormat::MultiLine) {
@@ -108,11 +105,12 @@ pub trait SourceMapperExt {
108105
return true;
109106
}
110107

111-
if children.is_empty() {
108+
if last_child.is_none() {
112109
return !self.is_on_same_line(parent_node.lo(), parent_node.hi());
113110
}
114111

115-
let last_child = children[children.len() - 1].span();
112+
let last_child = last_child.unwrap();
113+
116114
if parent_node.is_synthesized() || last_child.is_synthesized() {
117115
last_child.starts_on_new_line(format)
118116
} else {

‎crates/swc_ecma_codegen/src/lib.rs

+224-145
Original file line numberDiff line numberDiff line change
@@ -2155,41 +2155,234 @@ where
21552155
)
21562156
}
21572157

2158-
#[allow(clippy::cognitive_complexity)]
2159-
fn emit_list5<N: Node>(
2158+
/// This method exists to reduce compile time.
2159+
#[inline(never)]
2160+
fn emit_first_of_list5(
21602161
&mut self,
21612162
parent_node: Span,
2162-
children: Option<&[N]>,
2163+
children: Option<usize>,
21632164
format: ListFormat,
21642165
start: usize,
21652166
count: usize,
2166-
) -> Result {
2167+
) -> Option<Result> {
21672168
if children.is_none() && format.contains(ListFormat::OptionalIfUndefined) {
2168-
return Ok(());
2169+
return Some(Ok(()));
21692170
}
21702171

2171-
let is_empty = children.is_none() || start > children.unwrap().len() || count == 0;
2172+
let is_empty = children.is_none() || start > children.unwrap() || count == 0;
21722173
if is_empty && format.contains(ListFormat::OptionalIfEmpty) {
2173-
return Ok(());
2174+
return Some(Ok(()));
21742175
}
21752176

21762177
if format.contains(ListFormat::BracketsMask) {
2177-
self.wr.write_punct(None, format.opening_bracket())?;
2178+
if let Err(err) = self.wr.write_punct(None, format.opening_bracket()) {
2179+
return Some(Err(err));
2180+
}
21782181

21792182
if is_empty {
2180-
self.emit_trailing_comments_of_pos(
2183+
if let Err(err) = self.emit_trailing_comments_of_pos(
21812184
{
21822185
// TODO: children.lo()
21832186

21842187
parent_node.lo()
21852188
},
21862189
true,
21872190
false,
2188-
)?;
2191+
) {
2192+
return Some(Err(err));
2193+
}
2194+
}
2195+
}
2196+
2197+
None
2198+
}
2199+
2200+
/// This method exists to reduce compile time.
2201+
#[inline(never)]
2202+
fn emit_pre_child_for_list5(
2203+
&mut self,
2204+
parent_node: Span,
2205+
format: ListFormat,
2206+
previous_sibling: Option<Span>,
2207+
child: Span,
2208+
should_decrease_indent_after_emit: &mut bool,
2209+
should_emit_intervening_comments: &mut bool,
2210+
) -> Result {
2211+
// Write the delimiter if this is not the first node.
2212+
if let Some(previous_sibling) = previous_sibling {
2213+
// i.e
2214+
// function commentedParameters(
2215+
// /* Parameter a */
2216+
// a
2217+
// /* End of parameter a */
2218+
// -> this comment isn't considered to be trailing comment of parameter "a" due
2219+
// to newline ,
2220+
if format.contains(ListFormat::DelimitersMask)
2221+
&& previous_sibling.hi != parent_node.hi()
2222+
&& self.comments.is_some()
2223+
{
2224+
self.emit_leading_comments(previous_sibling.hi(), true)?;
2225+
}
2226+
2227+
self.write_delim(format)?;
2228+
2229+
// Write either a line terminator or whitespace to separate the elements.
2230+
2231+
if self.cm.should_write_separating_line_terminator(
2232+
Some(previous_sibling),
2233+
Some(child),
2234+
format,
2235+
) {
2236+
// If a synthesized node in a single-line list starts on a new
2237+
// line, we should increase the indent.
2238+
if (format & (ListFormat::LinesMask | ListFormat::Indented))
2239+
== ListFormat::SingleLine
2240+
&& !self.cfg.minify
2241+
{
2242+
self.wr.increase_indent()?;
2243+
*should_decrease_indent_after_emit = true;
2244+
}
2245+
2246+
if !self.cfg.minify {
2247+
self.wr.write_line()?;
2248+
}
2249+
*should_emit_intervening_comments = false;
2250+
} else if format.contains(ListFormat::SpaceBetweenSiblings) {
2251+
formatting_space!(self);
2252+
}
2253+
}
2254+
2255+
Ok(())
2256+
}
2257+
2258+
/// This method exists to reduce compile time.
2259+
#[inline(never)]
2260+
fn emit_list_finisher_of_list5(
2261+
&mut self,
2262+
parent_node: Span,
2263+
format: ListFormat,
2264+
previous_sibling: Option<Span>,
2265+
last_child: Option<Span>,
2266+
) -> Result {
2267+
// Write a trailing comma, if requested.
2268+
let has_trailing_comma = format.contains(ListFormat::ForceTrailingComma)
2269+
|| format.contains(ListFormat::AllowTrailingComma) && {
2270+
if parent_node.is_dummy() {
2271+
false
2272+
} else {
2273+
match self.cm.span_to_snippet(parent_node) {
2274+
Ok(snippet) => {
2275+
if snippet.len() < 3 {
2276+
false
2277+
} else {
2278+
let last_char = snippet.chars().last().unwrap();
2279+
snippet[..snippet.len() - last_char.len_utf8()]
2280+
.trim()
2281+
.ends_with(',')
2282+
}
2283+
}
2284+
_ => false,
2285+
}
2286+
}
2287+
};
2288+
2289+
if has_trailing_comma
2290+
&& format.contains(ListFormat::CommaDelimited)
2291+
&& (!self.cfg.minify || !format.contains(ListFormat::CanSkipTrailingComma))
2292+
{
2293+
punct!(self, ",");
2294+
formatting_space!(self);
2295+
}
2296+
2297+
{
2298+
// Emit any trailing comment of the last element in the list
2299+
// i.e
2300+
// var array = [...
2301+
// 2
2302+
// /* end of element 2 */
2303+
// ];
2304+
2305+
let emit_trailing_comments = {
2306+
// TODO:
2307+
//
2308+
// !(getEmitFlags(previousSibling).contains(EmitFlags::NoTrailingComments))
2309+
2310+
true
2311+
};
2312+
2313+
if let Some(previous_sibling) = previous_sibling {
2314+
if format.contains(ListFormat::DelimitersMask)
2315+
&& previous_sibling.hi() != parent_node.hi()
2316+
&& emit_trailing_comments
2317+
&& self.comments.is_some()
2318+
{
2319+
self.emit_leading_comments(previous_sibling.hi(), true)?;
2320+
}
2321+
}
2322+
}
2323+
2324+
// Decrease the indent, if requested.
2325+
if format.contains(ListFormat::Indented) && !self.cfg.minify {
2326+
self.wr.decrease_indent()?;
2327+
}
2328+
2329+
// Write the closing line terminator or closing whitespace.
2330+
if self
2331+
.cm
2332+
.should_write_closing_line_terminator(parent_node, last_child, format)
2333+
{
2334+
if !self.cfg.minify {
2335+
self.wr.write_line()?;
21892336
}
2337+
} else if format.contains(ListFormat::SpaceBetweenBraces) && !self.cfg.minify {
2338+
self.wr.write_space()?;
21902339
}
21912340

2192-
// self.handlers.onBeforeEmitNodeArray(children);
2341+
Ok(())
2342+
}
2343+
2344+
/// This method exists to reduce compile time.
2345+
#[inline(never)]
2346+
fn emit_last_of_list5(
2347+
&mut self,
2348+
parent_node: Span,
2349+
is_empty: bool,
2350+
format: ListFormat,
2351+
start: usize,
2352+
count: usize,
2353+
) -> Result {
2354+
if format.contains(ListFormat::BracketsMask) {
2355+
if is_empty {
2356+
self.emit_leading_comments(
2357+
{
2358+
//TODO: children.hi()
2359+
2360+
parent_node.hi()
2361+
},
2362+
true,
2363+
)?; // Emit leading comments within empty lists
2364+
}
2365+
self.wr.write_punct(None, format.closing_bracket())?;
2366+
}
2367+
2368+
Ok(())
2369+
}
2370+
2371+
fn emit_list5<N: Node>(
2372+
&mut self,
2373+
parent_node: Span,
2374+
children: Option<&[N]>,
2375+
format: ListFormat,
2376+
start: usize,
2377+
count: usize,
2378+
) -> Result {
2379+
if let Some(result) =
2380+
self.emit_first_of_list5(parent_node, children.map(|v| v.len()), format, start, count)
2381+
{
2382+
return result;
2383+
}
2384+
2385+
let is_empty = children.is_none() || start > children.unwrap().len() || count == 0;
21932386

21942387
if is_empty {
21952388
// Write a line terminator if the parent node was multi-line
@@ -2211,10 +2404,11 @@ where
22112404
let may_emit_intervening_comments =
22122405
!format.intersects(ListFormat::NoInterveningComments);
22132406
let mut should_emit_intervening_comments = may_emit_intervening_comments;
2214-
if self
2215-
.cm
2216-
.should_write_leading_line_terminator(parent_node, children, format)
2217-
{
2407+
if self.cm.should_write_leading_line_terminator(
2408+
parent_node,
2409+
children.first().map(|v| v.span()),
2410+
format,
2411+
) {
22182412
if !self.cfg.minify {
22192413
self.wr.write_line()?;
22202414
}
@@ -2234,49 +2428,14 @@ where
22342428
for i in 0..count {
22352429
let child = &children[start + i];
22362430

2237-
// Write the delimiter if this is not the first node.
2238-
if let Some(previous_sibling) = previous_sibling {
2239-
// i.e
2240-
// function commentedParameters(
2241-
// /* Parameter a */
2242-
// a
2243-
// /* End of parameter a */
2244-
// -> this comment isn't considered to be trailing comment of parameter "a" due
2245-
// to newline ,
2246-
if format.contains(ListFormat::DelimitersMask)
2247-
&& previous_sibling.hi != parent_node.hi()
2248-
&& self.comments.is_some()
2249-
{
2250-
self.emit_leading_comments(previous_sibling.hi(), true)?;
2251-
}
2252-
2253-
self.write_delim(format)?;
2254-
2255-
// Write either a line terminator or whitespace to separate the elements.
2256-
2257-
if self.cm.should_write_separating_line_terminator(
2258-
Some(previous_sibling),
2259-
Some(child),
2260-
format,
2261-
) {
2262-
// If a synthesized node in a single-line list starts on a new
2263-
// line, we should increase the indent.
2264-
if (format & (ListFormat::LinesMask | ListFormat::Indented))
2265-
== ListFormat::SingleLine
2266-
&& !self.cfg.minify
2267-
{
2268-
self.wr.increase_indent()?;
2269-
should_decrease_indent_after_emit = true;
2270-
}
2271-
2272-
if !self.cfg.minify {
2273-
self.wr.write_line()?;
2274-
}
2275-
should_emit_intervening_comments = false;
2276-
} else if format.contains(ListFormat::SpaceBetweenSiblings) {
2277-
formatting_space!(self);
2278-
}
2279-
}
2431+
self.emit_pre_child_for_list5(
2432+
parent_node,
2433+
format,
2434+
previous_sibling,
2435+
child.span(),
2436+
&mut should_decrease_indent_after_emit,
2437+
&mut should_emit_intervening_comments,
2438+
)?;
22802439

22812440
child.emit_with(self)?;
22822441

@@ -2298,97 +2457,17 @@ where
22982457
previous_sibling = Some(child.span());
22992458
}
23002459

2301-
// Write a trailing comma, if requested.
2302-
let has_trailing_comma = format.contains(ListFormat::ForceTrailingComma)
2303-
|| format.contains(ListFormat::AllowTrailingComma) && {
2304-
if parent_node.is_dummy() {
2305-
false
2306-
} else {
2307-
match self.cm.span_to_snippet(parent_node) {
2308-
Ok(snippet) => {
2309-
if snippet.len() < 3 {
2310-
false
2311-
} else {
2312-
let last_char = snippet.chars().last().unwrap();
2313-
snippet[..snippet.len() - last_char.len_utf8()]
2314-
.trim()
2315-
.ends_with(',')
2316-
}
2317-
}
2318-
_ => false,
2319-
}
2320-
}
2321-
};
2322-
2323-
if has_trailing_comma
2324-
&& format.contains(ListFormat::CommaDelimited)
2325-
&& (!self.cfg.minify || !format.contains(ListFormat::CanSkipTrailingComma))
2326-
{
2327-
punct!(self, ",");
2328-
formatting_space!(self);
2329-
}
2330-
2331-
{
2332-
// Emit any trailing comment of the last element in the list
2333-
// i.e
2334-
// var array = [...
2335-
// 2
2336-
// /* end of element 2 */
2337-
// ];
2338-
2339-
let emit_trailing_comments = {
2340-
// TODO:
2341-
//
2342-
// !(getEmitFlags(previousSibling).contains(EmitFlags::NoTrailingComments))
2343-
2344-
true
2345-
};
2346-
2347-
if let Some(previous_sibling) = previous_sibling {
2348-
if format.contains(ListFormat::DelimitersMask)
2349-
&& previous_sibling.hi() != parent_node.hi()
2350-
&& emit_trailing_comments
2351-
&& self.comments.is_some()
2352-
{
2353-
self.emit_leading_comments(previous_sibling.hi(), true)?;
2354-
}
2355-
}
2356-
}
2357-
2358-
// Decrease the indent, if requested.
2359-
if format.contains(ListFormat::Indented) && !self.cfg.minify {
2360-
self.wr.decrease_indent()?;
2361-
}
2362-
2363-
// Write the closing line terminator or closing whitespace.
2364-
if self
2365-
.cm
2366-
.should_write_closing_line_terminator(parent_node, children, format)
2367-
{
2368-
if !self.cfg.minify {
2369-
self.wr.write_line()?;
2370-
}
2371-
} else if format.contains(ListFormat::SpaceBetweenBraces) && !self.cfg.minify {
2372-
self.wr.write_space()?;
2373-
}
2460+
self.emit_list_finisher_of_list5(
2461+
parent_node,
2462+
format,
2463+
previous_sibling,
2464+
children.last().map(|v| v.span()),
2465+
)?;
23742466
}
23752467

23762468
// self.handlers.onAfterEmitNodeArray(children);
23772469

2378-
if format.contains(ListFormat::BracketsMask) {
2379-
if is_empty {
2380-
self.emit_leading_comments(
2381-
{
2382-
//TODO: children.hi()
2383-
2384-
parent_node.hi()
2385-
},
2386-
true,
2387-
)?; // Emit leading comments within empty lists
2388-
}
2389-
self.wr.write_punct(None, format.closing_bracket())?;
2390-
}
2391-
2470+
self.emit_last_of_list5(parent_node, is_empty, format, start, count)?;
23922471
Ok(())
23932472
}
23942473
}

1 commit comments

Comments
 (1)

github-actions[bot] commented on Mar 23, 2023

@github-actions[bot]

Benchmark

Benchmark suite Current: 08fa94f Previous: 5d7acfd Ratio
es/full/bugs-1 311059 ns/iter (± 10657) 302553 ns/iter (± 6906) 1.03
es/full/minify/libraries/antd 1593383832 ns/iter (± 29820083) 1496038502 ns/iter (± 14733616) 1.07
es/full/minify/libraries/d3 297478503 ns/iter (± 8473265) 287658853 ns/iter (± 5515602) 1.03
es/full/minify/libraries/echarts 1212751041 ns/iter (± 13895572) 1153195267 ns/iter (± 8054662) 1.05
es/full/minify/libraries/jquery 92847969 ns/iter (± 602430) 88496782 ns/iter (± 511299) 1.05
es/full/minify/libraries/lodash 106639319 ns/iter (± 994387) 103705814 ns/iter (± 463483) 1.03
es/full/minify/libraries/moment 52693383 ns/iter (± 413459) 51317499 ns/iter (± 374607) 1.03
es/full/minify/libraries/react 19215505 ns/iter (± 157440) 18932719 ns/iter (± 129531) 1.01
es/full/minify/libraries/terser 248183134 ns/iter (± 2356983) 235445232 ns/iter (± 1898349) 1.05
es/full/minify/libraries/three 444052559 ns/iter (± 4238177) 414552815 ns/iter (± 4500112) 1.07
es/full/minify/libraries/typescript 2958069271 ns/iter (± 21154051) 2884206273 ns/iter (± 15748565) 1.03
es/full/minify/libraries/victory 665354078 ns/iter (± 6431398) 618783127 ns/iter (± 6269033) 1.08
es/full/minify/libraries/vue 131607015 ns/iter (± 953845) 127677821 ns/iter (± 1040288) 1.03
es/full/codegen/es3 27967 ns/iter (± 61) 26466 ns/iter (± 92) 1.06
es/full/codegen/es5 28052 ns/iter (± 69) 26575 ns/iter (± 137) 1.06
es/full/codegen/es2015 28099 ns/iter (± 82) 26318 ns/iter (± 162) 1.07
es/full/codegen/es2016 28103 ns/iter (± 43) 26341 ns/iter (± 100) 1.07
es/full/codegen/es2017 28061 ns/iter (± 47) 26241 ns/iter (± 148) 1.07
es/full/codegen/es2018 28063 ns/iter (± 42) 26480 ns/iter (± 41) 1.06
es/full/codegen/es2019 28046 ns/iter (± 45) 26264 ns/iter (± 157) 1.07
es/full/codegen/es2020 28060 ns/iter (± 44) 26358 ns/iter (± 148) 1.06
es/full/all/es3 180038510 ns/iter (± 4505038) 182822547 ns/iter (± 2301363) 0.98
es/full/all/es5 171609554 ns/iter (± 3062935) 173816410 ns/iter (± 3250289) 0.99
es/full/all/es2015 139533236 ns/iter (± 1616476) 139207630 ns/iter (± 1346174) 1.00
es/full/all/es2016 138169390 ns/iter (± 974393) 135103225 ns/iter (± 1714089) 1.02
es/full/all/es2017 135219894 ns/iter (± 1589806) 134689698 ns/iter (± 1635066) 1.00
es/full/all/es2018 131917203 ns/iter (± 1780547) 130474510 ns/iter (± 1635985) 1.01
es/full/all/es2019 130463636 ns/iter (± 1602063) 127675167 ns/iter (± 1978064) 1.02
es/full/all/es2020 120640665 ns/iter (± 669376) 118277948 ns/iter (± 763620) 1.02
es/full/parser 536454 ns/iter (± 8855) 536005 ns/iter (± 9759) 1.00
es/full/base/fixer 22601 ns/iter (± 31) 22136 ns/iter (± 96) 1.02
es/full/base/resolver_and_hygiene 84935 ns/iter (± 111) 82070 ns/iter (± 291) 1.03
serialization of ast node 124 ns/iter (± 0) 123 ns/iter (± 0) 1.01
serialization of serde 126 ns/iter (± 0) 125 ns/iter (± 0) 1.01
css/minify/libraries/bootstrap 28775594 ns/iter (± 184296) 28050632 ns/iter (± 221073) 1.03
css/visitor/compare/clone 2060275 ns/iter (± 14250) 2050067 ns/iter (± 14342) 1.00
css/visitor/compare/visit_mut_span 2276333 ns/iter (± 6605) 2235437 ns/iter (± 10774) 1.02
css/visitor/compare/visit_mut_span_panic 2331719 ns/iter (± 6957) 2301130 ns/iter (± 9016) 1.01
css/visitor/compare/fold_span 3074920 ns/iter (± 21323) 2989990 ns/iter (± 33999) 1.03
css/visitor/compare/fold_span_panic 3174084 ns/iter (± 18593) 3137873 ns/iter (± 24057) 1.01
css/lexer/bootstrap_5_1_3 5115197 ns/iter (± 2927) 5066299 ns/iter (± 22238) 1.01
css/lexer/foundation_6_7_4 4311284 ns/iter (± 4220) 4247144 ns/iter (± 21966) 1.02
css/lexer/tailwind_3_1_1 819526 ns/iter (± 490) 805460 ns/iter (± 4421) 1.02
css/parser/bootstrap_5_1_3 22040821 ns/iter (± 62903) 21480061 ns/iter (± 159853) 1.03
css/parser/foundation_6_7_4 17485330 ns/iter (± 37185) 17276205 ns/iter (± 91112) 1.01
css/parser/tailwind_3_1_1 3363677 ns/iter (± 7519) 3296415 ns/iter (± 14473) 1.02
es/codegen/colors 329358 ns/iter (± 184474) 328616 ns/iter (± 184629) 1.00
es/codegen/large 1298240 ns/iter (± 662933) 1220512 ns/iter (± 617089) 1.06
es/codegen/with-parser/colors 48185 ns/iter (± 278) 47183 ns/iter (± 382) 1.02
es/codegen/with-parser/large 523956 ns/iter (± 1697) 517576 ns/iter (± 3822) 1.01
es/minify/libraries/antd 1380663544 ns/iter (± 13279702) 1275994030 ns/iter (± 13846345) 1.08
es/minify/libraries/d3 261335157 ns/iter (± 2316763) 243240651 ns/iter (± 3831246) 1.07
es/minify/libraries/echarts 1066236575 ns/iter (± 10282413) 999960383 ns/iter (± 7130262) 1.07
es/minify/libraries/jquery 80177803 ns/iter (± 767536) 76966809 ns/iter (± 628038) 1.04
es/minify/libraries/lodash 95302953 ns/iter (± 775028) 91760101 ns/iter (± 546556) 1.04
es/minify/libraries/moment 46243117 ns/iter (± 220847) 44643568 ns/iter (± 245833) 1.04
es/minify/libraries/react 17305860 ns/iter (± 97101) 16681053 ns/iter (± 102178) 1.04
es/minify/libraries/terser 213239505 ns/iter (± 667322) 198757848 ns/iter (± 1456450) 1.07
es/minify/libraries/three 374540641 ns/iter (± 4475872) 339029890 ns/iter (± 6061783) 1.10
es/minify/libraries/typescript 2517022411 ns/iter (± 9007226) 2414750383 ns/iter (± 10280795) 1.04
es/minify/libraries/victory 564324694 ns/iter (± 8920309) 516687207 ns/iter (± 7143420) 1.09
es/minify/libraries/vue 116795694 ns/iter (± 671453) 112742462 ns/iter (± 1181220) 1.04
es/visitor/compare/clone 2311388 ns/iter (± 12994) 2279655 ns/iter (± 23754) 1.01
es/visitor/compare/visit_mut_span 2665174 ns/iter (± 5962) 2620788 ns/iter (± 17211) 1.02
es/visitor/compare/visit_mut_span_panic 2713462 ns/iter (± 3371) 2679290 ns/iter (± 12436) 1.01
es/visitor/compare/fold_span 3783170 ns/iter (± 6913) 3703877 ns/iter (± 17106) 1.02
es/visitor/compare/fold_span_panic 3955367 ns/iter (± 13688) 3849014 ns/iter (± 23985) 1.03
es/lexer/colors 15307 ns/iter (± 16) 15326 ns/iter (± 148) 1.00
es/lexer/angular 7376956 ns/iter (± 9722) 7365220 ns/iter (± 33512) 1.00
es/lexer/backbone 983773 ns/iter (± 999) 984133 ns/iter (± 5733) 1.00
es/lexer/jquery 5520205 ns/iter (± 3885) 5568788 ns/iter (± 25015) 0.99
es/lexer/jquery mobile 8495848 ns/iter (± 4723) 8442706 ns/iter (± 51365) 1.01
es/lexer/mootools 4386833 ns/iter (± 2008) 4358139 ns/iter (± 27472) 1.01
es/lexer/underscore 831663 ns/iter (± 286) 826737 ns/iter (± 6856) 1.01
es/lexer/three 25903887 ns/iter (± 21277) 25710863 ns/iter (± 166284) 1.01
es/lexer/yui 4627237 ns/iter (± 2957) 4618783 ns/iter (± 19841) 1.00
es/parser/colors 29678 ns/iter (± 143) 28839 ns/iter (± 242) 1.03
es/parser/angular 15472430 ns/iter (± 199907) 14715860 ns/iter (± 114067) 1.05
es/parser/backbone 2243204 ns/iter (± 12563) 2202860 ns/iter (± 19087) 1.02
es/parser/jquery 12392889 ns/iter (± 113374) 12045920 ns/iter (± 199186) 1.03
es/parser/jquery mobile 19964806 ns/iter (± 263715) 18503571 ns/iter (± 138433) 1.08
es/parser/mootools 9559305 ns/iter (± 74261) 9158165 ns/iter (± 60051) 1.04
es/parser/underscore 1895085 ns/iter (± 10197) 1870994 ns/iter (± 16280) 1.01
es/parser/three 57368433 ns/iter (± 147532) 53378193 ns/iter (± 1251583) 1.07
es/parser/yui 9355906 ns/iter (± 59852) 9081689 ns/iter (± 76682) 1.03
es/preset-env/usage/builtin_type 144580 ns/iter (± 35141) 139114 ns/iter (± 32624) 1.04
es/preset-env/usage/property 21481 ns/iter (± 114) 21092 ns/iter (± 173) 1.02
es/resolver/typescript 112226099 ns/iter (± 2236895) 112897033 ns/iter (± 2003860) 0.99
es/fixer/typescript 78281481 ns/iter (± 1127875) 77471261 ns/iter (± 311942) 1.01
es/hygiene/typescript 167246993 ns/iter (± 857792) 161102812 ns/iter (± 1025981) 1.04
es/resolver_with_hygiene/typescript 305137511 ns/iter (± 2500813) 292645777 ns/iter (± 2149948) 1.04
es/visitor/base-perf/module_clone 78346 ns/iter (± 1320) 79036 ns/iter (± 945) 0.99
es/visitor/base-perf/fold_empty 90395 ns/iter (± 1543) 88308 ns/iter (± 1413) 1.02
es/visitor/base-perf/fold_noop_impl_all 91266 ns/iter (± 712) 87712 ns/iter (± 1366) 1.04
es/visitor/base-perf/fold_noop_impl_vec 91758 ns/iter (± 1624) 89394 ns/iter (± 1195) 1.03
es/visitor/base-perf/boxing_boxed_clone 56 ns/iter (± 0) 55 ns/iter (± 0) 1.02
es/visitor/base-perf/boxing_unboxed_clone 56 ns/iter (± 0) 53 ns/iter (± 0) 1.06
es/visitor/base-perf/boxing_boxed 103 ns/iter (± 0) 101 ns/iter (± 0) 1.02
es/visitor/base-perf/boxing_unboxed 100 ns/iter (± 0) 97 ns/iter (± 0) 1.03
es/visitor/base-perf/visit_contains_this 3609 ns/iter (± 55) 3533 ns/iter (± 75) 1.02
es/base/parallel/resolver/typescript 7051393604 ns/iter (± 441270566) 6373453601 ns/iter (± 253793935) 1.11
es/base/parallel/hygiene/typescript 1974286980 ns/iter (± 38742936) 1993644185 ns/iter (± 23329817) 0.99
misc/visitors/time-complexity/time 5 100 ns/iter (± 0) 100 ns/iter (± 0) 1
misc/visitors/time-complexity/time 10 335 ns/iter (± 1) 332 ns/iter (± 0) 1.01
misc/visitors/time-complexity/time 15 695 ns/iter (± 0) 695 ns/iter (± 9) 1
misc/visitors/time-complexity/time 20 1327 ns/iter (± 10) 1307 ns/iter (± 10) 1.02
misc/visitors/time-complexity/time 40 6659 ns/iter (± 18) 6920 ns/iter (± 58) 0.96
misc/visitors/time-complexity/time 60 14925 ns/iter (± 33) 17523 ns/iter (± 91) 0.85
es/full-target/es2016 250671 ns/iter (± 382) 249994 ns/iter (± 386) 1.00
es/full-target/es2017 243029 ns/iter (± 274) 242143 ns/iter (± 650) 1.00
es/full-target/es2018 231974 ns/iter (± 273) 230179 ns/iter (± 1065) 1.01
es2020_nullish_coalescing 91250 ns/iter (± 233) 89791 ns/iter (± 527) 1.02
es2020_optional_chaining 123741 ns/iter (± 541) 121851 ns/iter (± 895) 1.02
es2022_class_properties 146806 ns/iter (± 149) 144510 ns/iter (± 1610) 1.02
es2018_object_rest_spread 94740 ns/iter (± 227) 94009 ns/iter (± 244) 1.01
es2019_optional_catch_binding 84206 ns/iter (± 154) 83666 ns/iter (± 216) 1.01
es2017_async_to_generator 84589 ns/iter (± 246) 83943 ns/iter (± 251) 1.01
es2016_exponentiation 88882 ns/iter (± 181) 87432 ns/iter (± 486) 1.02
es2015_arrow 92859 ns/iter (± 203) 91813 ns/iter (± 469) 1.01
es2015_block_scoped_fn 90825 ns/iter (± 252) 89049 ns/iter (± 473) 1.02
es2015_block_scoping 168841 ns/iter (± 342) 165438 ns/iter (± 696) 1.02

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

Please sign in to comment.