Skip to content

Commit

Permalink
perf(es/transforms): Remove wrong parallelism (#7889)
Browse files Browse the repository at this point in the history
  • Loading branch information
kdy1 committed Aug 29, 2023
1 parent 3e41468 commit a505012
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 242 deletions.
241 changes: 5 additions & 236 deletions crates/swc_ecma_transforms_macros/src/parallel.rs
@@ -1,3 +1,5 @@
#![allow(non_snake_case)]

use pmutil::q;
use proc_macro2::{Span, TokenStream};
use syn::{Expr, Ident, ImplItem, ImplItemFn, ItemImpl, Meta, Type};
Expand Down Expand Up @@ -29,11 +31,9 @@ pub fn expand(attr: TokenStream, mut item: ItemImpl) -> ItemImpl {
mode,
"module_items",
explode,
100,
)));
item.items.push(ImplItem::Fn(make_par_visit_method(
mode, "stmts", explode, 100,
)));
item.items
.push(ImplItem::Fn(make_par_visit_method(mode, "stmts", explode)));

item
}
Expand Down Expand Up @@ -85,20 +85,15 @@ fn explode_hook_method_name(explode: bool, suffix: &str) -> Option<Ident> {
}
}

fn make_par_visit_method(mode: Mode, suffix: &str, explode: bool, threshold: usize) -> ImplItemFn {
fn make_par_visit_method(mode: Mode, suffix: &str, explode: bool) -> ImplItemFn {
let method_name = Ident::new(&format!("{}_{}", mode.prefix(), suffix), Span::call_site());
let hook = post_visit_hook(mode, suffix);
let explode_method_name = explode_hook_method_name(explode, suffix);

let threshold = q!(Vars { threshold }, {
(swc_ecma_transforms_base::perf::cpu_count() * threshold)
});

match (mode, explode_method_name) {
(Mode::Fold, Some(explode_method_name)) => q!(
Vars {
NodeType: node_type(suffix),
threshold,
method_name,
hook,
explode_method_name,
Expand All @@ -109,63 +104,6 @@ fn make_par_visit_method(mode: Mode, suffix: &str, explode: bool, threshold: usi
use swc_ecma_transforms_base::perf::{ParExplode, Parallel};
use swc_ecma_visit::FoldWith;

#[cfg(feature = "rayon")]
if nodes.len() >= threshold || option_env!("SWC_FORCE_CONCURRENT") == Some("1")
{
use rayon::prelude::*;

let (visitor, mut nodes) = ::swc_common::GLOBALS.with(|globals| {
swc_ecma_transforms_base::helpers::HELPERS.with(|helpers| {
HANDLER.with(|handler| {
nodes
.into_par_iter()
.map(|node| {
::swc_common::GLOBALS.set(&globals, || {
swc_ecma_transforms_base::helpers::HELPERS.set(
helpers,
|| {
HANDLER.set(handler, || {
let mut visitor =
Parallel::create(&*self);
let node = node.fold_with(&mut visitor);
let mut nodes = Vec::with_capacity(4);

ParExplode::explode_method_name(
&mut visitor,
&mut nodes,
);

nodes.push(node);

(visitor, nodes)
})
},
)
})
})
.reduce(
|| (Parallel::create(&*self), vec![]),
|mut a, b| {
Parallel::merge(&mut a.0, b.0);

a.1.extend(b.1);

a
},
)
})
})
});

Parallel::merge(self, visitor);

{
hook;
}

return nodes;
}

let mut buf = Vec::with_capacity(nodes.len());

for node in nodes {
Expand All @@ -189,7 +127,6 @@ fn make_par_visit_method(mode: Mode, suffix: &str, explode: bool, threshold: usi
(Mode::Fold, None) => q!(
Vars {
NodeType: node_type(suffix),
threshold,
method_name,
hook,
},
Expand All @@ -199,65 +136,6 @@ fn make_par_visit_method(mode: Mode, suffix: &str, explode: bool, threshold: usi
use swc_ecma_transforms_base::perf::Parallel;
use swc_ecma_visit::FoldWith;

#[cfg(feature = "rayon")]
if nodes.len() >= threshold || option_env!("SWC_FORCE_CONCURRENT") == Some("1")
{
use rayon::prelude::*;

let (visitor, mut nodes) = ::swc_common::GLOBALS.with(|globals| {
swc_ecma_transforms_base::helpers::HELPERS.with(|helpers| {
HANDLER.with(|handler| {
nodes
.into_par_iter()
.map(|node| {
::swc_common::GLOBALS.set(&globals, || {
swc_ecma_transforms_base::helpers::HELPERS.set(
helpers,
|| {
HANDLER.set(handler, || {
let mut visitor =
Parallel::create(&*self);
let node = node.fold_with(&mut visitor);

(visitor, node)
})
},
)
})
})
.fold(
|| (Parallel::create(&*self), vec![]),
|mut a, b| {
Parallel::merge(&mut a.0, b.0);

a.1.push(b.1);

a
},
)
.reduce(
|| (Parallel::create(&*self), vec![]),
|mut a, b| {
Parallel::merge(&mut a.0, b.0);

a.1.extend(b.1);

a
},
)
})
})
});

Parallel::merge(self, visitor);

{
hook;
}

return nodes;
}

let mut nodes = nodes.fold_children_with(self);
{
hook;
Expand All @@ -272,7 +150,6 @@ fn make_par_visit_method(mode: Mode, suffix: &str, explode: bool, threshold: usi
(Mode::VisitMut, Some(explode_method_name)) => q!(
Vars {
NodeType: node_type(suffix),
threshold,
method_name,
hook,
explode_method_name
Expand All @@ -285,66 +162,6 @@ fn make_par_visit_method(mode: Mode, suffix: &str, explode: bool, threshold: usi
use swc_ecma_transforms_base::perf::{ParExplode, Parallel};
use swc_ecma_visit::VisitMutWith;

#[cfg(feature = "rayon")]
if nodes.len() >= threshold || option_env!("SWC_FORCE_CONCURRENT") == Some("1")
{
::swc_common::GLOBALS.with(|globals| {
swc_ecma_transforms_base::helpers::HELPERS.with(|helpers| {
HANDLER.with(|handler| {
use rayon::prelude::*;

let (visitor, new_nodes) = take(nodes)
.into_par_iter()
.map(|mut node| {
::swc_common::GLOBALS.set(&globals, || {
swc_ecma_transforms_base::helpers::HELPERS.set(
helpers,
|| {
HANDLER.set(handler, || {
let mut visitor =
Parallel::create(&*self);
node.visit_mut_with(&mut visitor);

let mut nodes = Vec::with_capacity(4);

ParExplode::explode_method_name(
&mut visitor,
&mut nodes,
);

nodes.push(node);

(visitor, nodes)
})
},
)
})
})
.reduce(
|| (Parallel::create(&*self), vec![]),
|mut a, b| {
Parallel::merge(&mut a.0, b.0);

a.1.extend(b.1);

a
},
);

Parallel::merge(self, visitor);

{
hook;
}

*nodes = new_nodes;
})
})
});

return;
}

let mut buf = Vec::with_capacity(nodes.len());

for mut node in take(nodes) {
Expand All @@ -367,7 +184,6 @@ fn make_par_visit_method(mode: Mode, suffix: &str, explode: bool, threshold: usi
(Mode::VisitMut, None) => q!(
Vars {
NodeType: node_type(suffix),
threshold,
method_name,
hook,
},
Expand All @@ -377,53 +193,6 @@ fn make_par_visit_method(mode: Mode, suffix: &str, explode: bool, threshold: usi
use swc_ecma_transforms_base::perf::Parallel;
use swc_ecma_visit::VisitMutWith;

#[cfg(feature = "rayon")]
if nodes.len() >= threshold || option_env!("SWC_FORCE_CONCURRENT") == Some("1")
{
::swc_common::GLOBALS.with(|globals| {
swc_ecma_transforms_base::helpers::HELPERS.with(|helpers| {
HANDLER.with(|handler| {
use rayon::prelude::*;

let visitor = nodes
.into_par_iter()
.map(|node| {
::swc_common::GLOBALS.set(&globals, || {
swc_ecma_transforms_base::helpers::HELPERS.set(
helpers,
|| {
HANDLER.set(handler, || {
let mut visitor =
Parallel::create(&*self);
node.visit_mut_with(&mut visitor);

visitor
})
},
)
})
})
.reduce(
|| Parallel::create(&*self),
|mut a, b| {
Parallel::merge(&mut a, b);

a
},
);

Parallel::merge(self, visitor);

{
hook;
}
})
})
});

return;
}

nodes.visit_mut_children_with(self);
{
hook;
Expand Down
22 changes: 18 additions & 4 deletions crates/swc_ecma_transforms_optimization/src/inline_globals.rs
Expand Up @@ -4,9 +4,8 @@ use swc_common::{
sync::Lrc,
};
use swc_ecma_ast::*;
use swc_ecma_transforms_base::perf::Parallel;
use swc_ecma_transforms_macros::parallel;
use swc_ecma_utils::{collect_decls, NodeIgnoringSpan};
use swc_ecma_transforms_base::perf::{ParVisitMut, Parallel};
use swc_ecma_utils::{collect_decls, parallel::cpu_count, NodeIgnoringSpan};
use swc_ecma_visit::{as_folder, noop_visit_mut_type, Fold, VisitMut, VisitMutWith};

/// The key will be compared using [EqIgnoreSpan::eq_ignore_span], and matched
Expand Down Expand Up @@ -63,7 +62,6 @@ impl Parallel for InlineGlobals {
fn merge(&mut self, _: Self) {}
}

#[parallel]
impl VisitMut for InlineGlobals {
noop_visit_mut_type!();

Expand Down Expand Up @@ -208,6 +206,22 @@ impl VisitMut for InlineGlobals {

script.visit_mut_children_with(self);
}

fn visit_mut_prop_or_spreads(&mut self, n: &mut Vec<PropOrSpread>) {
self.visit_mut_par(cpu_count() * 8, n);
}

fn visit_mut_expr_or_spreads(&mut self, n: &mut Vec<ExprOrSpread>) {
self.visit_mut_par(cpu_count() * 8, n);
}

fn visit_mut_opt_vec_expr_or_spreads(&mut self, n: &mut Vec<Option<ExprOrSpread>>) {
self.visit_mut_par(cpu_count() * 8, n);
}

fn visit_mut_exprs(&mut self, n: &mut Vec<Box<Expr>>) {
self.visit_mut_par(cpu_count() * 8, n);
}
}

#[cfg(test)]
Expand Down
2 changes: 0 additions & 2 deletions crates/swc_ecma_transforms_optimization/src/json_parse.rs
Expand Up @@ -4,7 +4,6 @@ use serde_json::Value;
use swc_common::{util::take::Take, Spanned, DUMMY_SP};
use swc_ecma_ast::*;
use swc_ecma_transforms_base::perf::Parallel;
use swc_ecma_transforms_macros::parallel;
use swc_ecma_utils::{calc_literal_cost, member_expr, ExprFactory};
use swc_ecma_visit::{as_folder, noop_visit_mut_type, Fold, VisitMut, VisitMutWith};

Expand Down Expand Up @@ -54,7 +53,6 @@ impl Default for JsonParse {
}
}

#[parallel]
impl VisitMut for JsonParse {
noop_visit_mut_type!();

Expand Down

1 comment on commit a505012

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark

Benchmark suite Current: a505012 Previous: 057bd5f Ratio
es/full/bugs-1 297477 ns/iter (± 10965) 287815 ns/iter (± 7460) 1.03
es/full/minify/libraries/antd 1398844945 ns/iter (± 14485520) 1405333116 ns/iter (± 17684766) 1.00
es/full/minify/libraries/d3 291508053 ns/iter (± 6794911) 287995335 ns/iter (± 2350086) 1.01
es/full/minify/libraries/echarts 1131738893 ns/iter (± 9575779) 1132260295 ns/iter (± 13448868) 1.00
es/full/minify/libraries/jquery 86562678 ns/iter (± 486225) 86091765 ns/iter (± 501548) 1.01
es/full/minify/libraries/lodash 100129730 ns/iter (± 1116613) 99012935 ns/iter (± 795542) 1.01
es/full/minify/libraries/moment 51010459 ns/iter (± 478201) 51397756 ns/iter (± 462699) 0.99
es/full/minify/libraries/react 18230514 ns/iter (± 149057) 18405070 ns/iter (± 151662) 0.99
es/full/minify/libraries/terser 227364173 ns/iter (± 2195504) 228301801 ns/iter (± 3840616) 1.00
es/full/minify/libraries/three 413922373 ns/iter (± 7634614) 417697433 ns/iter (± 5348116) 0.99
es/full/minify/libraries/typescript 2794314118 ns/iter (± 18358894) 2792774919 ns/iter (± 24108622) 1.00
es/full/minify/libraries/victory 620937338 ns/iter (± 11534755) 628533291 ns/iter (± 14397102) 0.99
es/full/minify/libraries/vue 122158101 ns/iter (± 1049819) 123021088 ns/iter (± 1471701) 0.99
es/full/codegen/es3 33702 ns/iter (± 257) 33165 ns/iter (± 141) 1.02
es/full/codegen/es5 33696 ns/iter (± 107) 33131 ns/iter (± 124) 1.02
es/full/codegen/es2015 33812 ns/iter (± 95) 33184 ns/iter (± 129) 1.02
es/full/codegen/es2016 33968 ns/iter (± 316) 33334 ns/iter (± 97) 1.02
es/full/codegen/es2017 33887 ns/iter (± 71) 33286 ns/iter (± 61) 1.02
es/full/codegen/es2018 33813 ns/iter (± 96) 33090 ns/iter (± 44) 1.02
es/full/codegen/es2019 33753 ns/iter (± 78) 33305 ns/iter (± 93) 1.01
es/full/codegen/es2020 33655 ns/iter (± 124) 33153 ns/iter (± 88) 1.02
es/full/all/es3 176544976 ns/iter (± 4798887) 169723357 ns/iter (± 1292767) 1.04
es/full/all/es5 164547525 ns/iter (± 1268525) 161874558 ns/iter (± 1810073) 1.02
es/full/all/es2015 121872475 ns/iter (± 737998) 120811810 ns/iter (± 1226729) 1.01
es/full/all/es2016 121344645 ns/iter (± 1192114) 120303332 ns/iter (± 776693) 1.01
es/full/all/es2017 120150975 ns/iter (± 877927) 119584636 ns/iter (± 629054) 1.00
es/full/all/es2018 117796456 ns/iter (± 962178) 117450005 ns/iter (± 1285293) 1.00
es/full/all/es2019 117568178 ns/iter (± 879761) 116955547 ns/iter (± 992982) 1.01
es/full/all/es2020 113120498 ns/iter (± 1165115) 112137960 ns/iter (± 733892) 1.01
es/full/parser 495921 ns/iter (± 5888) 492966 ns/iter (± 2035) 1.01
es/full/base/fixer 20437 ns/iter (± 287) 18827 ns/iter (± 121) 1.09
es/full/base/resolver_and_hygiene 81748 ns/iter (± 187) 79267 ns/iter (± 122) 1.03
serialization of serde 292 ns/iter (± 0) 298 ns/iter (± 0) 0.98
css/minify/libraries/bootstrap 29198706 ns/iter (± 320371) 28740005 ns/iter (± 147258) 1.02
css/visitor/compare/clone 1650767 ns/iter (± 7474) 1625372 ns/iter (± 4799) 1.02
css/visitor/compare/visit_mut_span 1778853 ns/iter (± 25827) 1767248 ns/iter (± 5116) 1.01
css/visitor/compare/visit_mut_span_panic 1839667 ns/iter (± 6221) 1840393 ns/iter (± 5437) 1.00
css/visitor/compare/fold_span 2577119 ns/iter (± 9864) 2567335 ns/iter (± 8660) 1.00
css/visitor/compare/fold_span_panic 2756819 ns/iter (± 5613) 2759888 ns/iter (± 7587) 1.00
css/lexer/bootstrap_5_1_3 4536028 ns/iter (± 12104) 4739614 ns/iter (± 5411) 0.96
css/lexer/foundation_6_7_4 3821445 ns/iter (± 9154) 4003072 ns/iter (± 2757) 0.95
css/lexer/tailwind_3_1_1 727064 ns/iter (± 2204) 758103 ns/iter (± 364) 0.96
css/parser/bootstrap_5_1_3 19671719 ns/iter (± 83332) 20122062 ns/iter (± 65793) 0.98
css/parser/foundation_6_7_4 15971035 ns/iter (± 84846) 16307797 ns/iter (± 66607) 0.98
css/parser/tailwind_3_1_1 3051732 ns/iter (± 4189) 3095110 ns/iter (± 6547) 0.99
es/codegen/colors 735376 ns/iter (± 401796) 739064 ns/iter (± 404414) 1.00
es/codegen/large 2895004 ns/iter (± 1539681) 2908646 ns/iter (± 1544284) 1.00
es/codegen/with-parser/colors 45714 ns/iter (± 196) 46026 ns/iter (± 268) 0.99
es/codegen/with-parser/large 498816 ns/iter (± 2061) 486760 ns/iter (± 1005) 1.02
es/minify/libraries/antd 1264643417 ns/iter (± 16902280) 1232615667 ns/iter (± 18043789) 1.03
es/minify/libraries/d3 250490428 ns/iter (± 3142805) 251051130 ns/iter (± 3289775) 1.00
es/minify/libraries/echarts 975192760 ns/iter (± 14266798) 981963423 ns/iter (± 10311379) 0.99
es/minify/libraries/jquery 74265223 ns/iter (± 253313) 74353751 ns/iter (± 410082) 1.00
es/minify/libraries/lodash 88760099 ns/iter (± 937073) 87953562 ns/iter (± 482501) 1.01
es/minify/libraries/moment 43984194 ns/iter (± 255345) 43894674 ns/iter (± 371826) 1.00
es/minify/libraries/react 16266274 ns/iter (± 95282) 16136784 ns/iter (± 63938) 1.01
es/minify/libraries/terser 193229619 ns/iter (± 3665810) 191599196 ns/iter (± 1257174) 1.01
es/minify/libraries/three 341510027 ns/iter (± 4055733) 347421795 ns/iter (± 4275590) 0.98
es/minify/libraries/typescript 2398415308 ns/iter (± 32814533) 2371200388 ns/iter (± 13370068) 1.01
es/minify/libraries/victory 532936504 ns/iter (± 17963060) 553106533 ns/iter (± 10445384) 0.96
es/minify/libraries/vue 108720328 ns/iter (± 1376453) 107824115 ns/iter (± 495724) 1.01
es/visitor/compare/clone 1986174 ns/iter (± 14529) 1972811 ns/iter (± 5874) 1.01
es/visitor/compare/visit_mut_span 2287172 ns/iter (± 6834) 2269732 ns/iter (± 4139) 1.01
es/visitor/compare/visit_mut_span_panic 2346820 ns/iter (± 8016) 2335052 ns/iter (± 5610) 1.01
es/visitor/compare/fold_span 3407033 ns/iter (± 9811) 3381241 ns/iter (± 9053) 1.01
es/visitor/compare/fold_span_panic 3488177 ns/iter (± 11927) 3493071 ns/iter (± 26708) 1.00
es/lexer/colors 13464 ns/iter (± 9) 13191 ns/iter (± 7) 1.02
es/lexer/angular 6187749 ns/iter (± 17697) 6190702 ns/iter (± 10914) 1.00
es/lexer/backbone 807953 ns/iter (± 1019) 798967 ns/iter (± 490) 1.01
es/lexer/jquery 4535882 ns/iter (± 6972) 4552658 ns/iter (± 5039) 1.00
es/lexer/jquery mobile 6975531 ns/iter (± 4962) 6926308 ns/iter (± 15745) 1.01
es/lexer/mootools 3615533 ns/iter (± 1692) 3643830 ns/iter (± 2179) 0.99
es/lexer/underscore 678868 ns/iter (± 501) 671500 ns/iter (± 737) 1.01
es/lexer/three 21692944 ns/iter (± 16878) 21648251 ns/iter (± 37165) 1.00
es/lexer/yui 3879550 ns/iter (± 1300) 3855283 ns/iter (± 1639) 1.01
es/parser/colors 26960 ns/iter (± 49) 26971 ns/iter (± 335) 1.00
es/parser/angular 13637983 ns/iter (± 99145) 13530814 ns/iter (± 116957) 1.01
es/parser/backbone 2002899 ns/iter (± 9680) 1999112 ns/iter (± 8170) 1.00
es/parser/jquery 11014451 ns/iter (± 80191) 10988565 ns/iter (± 118622) 1.00
es/parser/jquery mobile 16911159 ns/iter (± 184167) 16836081 ns/iter (± 137904) 1.00
es/parser/mootools 8433070 ns/iter (± 15215) 8405121 ns/iter (± 115296) 1.00
es/parser/underscore 1728877 ns/iter (± 8928) 1723843 ns/iter (± 9267) 1.00
es/parser/three 49380201 ns/iter (± 445900) 48989760 ns/iter (± 185514) 1.01
es/parser/yui 8365280 ns/iter (± 57138) 8337543 ns/iter (± 35080) 1.00
es/preset-env/usage/builtin_type 135384 ns/iter (± 31917) 135988 ns/iter (± 32019) 1.00
es/preset-env/usage/property 16919 ns/iter (± 47) 17612 ns/iter (± 45) 0.96
es/resolver/typescript 92078170 ns/iter (± 820174) 92669509 ns/iter (± 1044287) 0.99
es/fixer/typescript 67860675 ns/iter (± 458961) 67931120 ns/iter (± 580792) 1.00
es/hygiene/typescript 139170069 ns/iter (± 1391180) 136437261 ns/iter (± 1578472) 1.02
es/resolver_with_hygiene/typescript 252690247 ns/iter (± 3092534) 258642255 ns/iter (± 2793839) 0.98
es/visitor/base-perf/module_clone 59539 ns/iter (± 218) 59283 ns/iter (± 159) 1.00
es/visitor/base-perf/fold_empty 63235 ns/iter (± 140) 62734 ns/iter (± 214) 1.01
es/visitor/base-perf/fold_noop_impl_all 63104 ns/iter (± 408) 62892 ns/iter (± 246) 1.00
es/visitor/base-perf/fold_noop_impl_vec 63503 ns/iter (± 215) 63489 ns/iter (± 285) 1.00
es/visitor/base-perf/boxing_boxed_clone 57 ns/iter (± 0) 58 ns/iter (± 0) 0.98
es/visitor/base-perf/boxing_unboxed_clone 40 ns/iter (± 0) 39 ns/iter (± 0) 1.03
es/visitor/base-perf/boxing_boxed 111 ns/iter (± 0) 111 ns/iter (± 0) 1
es/visitor/base-perf/boxing_unboxed 75 ns/iter (± 0) 77 ns/iter (± 0) 0.97
es/visitor/base-perf/visit_empty 0 ns/iter (± 0) 0 ns/iter (± 0) NaN
es/visitor/base-perf/visit_contains_this 2620 ns/iter (± 11) 2623 ns/iter (± 12) 1.00
es/base/parallel/resolver/typescript 4457074707 ns/iter (± 278566843) 3756472490 ns/iter (± 253991238) 1.19
es/base/parallel/hygiene/typescript 1509050251 ns/iter (± 20435881) 1501538904 ns/iter (± 20778417) 1.01
misc/visitors/time-complexity/time 5 120 ns/iter (± 1) 135 ns/iter (± 1) 0.89
misc/visitors/time-complexity/time 10 393 ns/iter (± 7) 396 ns/iter (± 14) 0.99
misc/visitors/time-complexity/time 15 678 ns/iter (± 6) 720 ns/iter (± 1) 0.94
misc/visitors/time-complexity/time 20 1047 ns/iter (± 3) 1065 ns/iter (± 9) 0.98
misc/visitors/time-complexity/time 40 4129 ns/iter (± 295) 4108 ns/iter (± 5) 1.01
misc/visitors/time-complexity/time 60 8781 ns/iter (± 3) 8765 ns/iter (± 15) 1.00
es/full-target/es2016 228086 ns/iter (± 505) 227316 ns/iter (± 437) 1.00
es/full-target/es2017 217976 ns/iter (± 591) 218741 ns/iter (± 630) 1.00
es/full-target/es2018 206450 ns/iter (± 1008) 207324 ns/iter (± 1049) 1.00
es2020_nullish_coalescing 71108 ns/iter (± 402) 70532 ns/iter (± 440) 1.01
es2020_optional_chaining 82086 ns/iter (± 257) 82639 ns/iter (± 261) 0.99
es2022_class_properties 114480 ns/iter (± 411) 114889 ns/iter (± 606) 1.00
es2018_object_rest_spread 75172 ns/iter (± 354) 75185 ns/iter (± 195) 1.00
es2019_optional_catch_binding 65533 ns/iter (± 183) 64767 ns/iter (± 149) 1.01
es2017_async_to_generator 65654 ns/iter (± 182) 65105 ns/iter (± 306) 1.01
es2016_exponentiation 67168 ns/iter (± 409) 66166 ns/iter (± 157) 1.02
es2015_arrow 72333 ns/iter (± 277) 71836 ns/iter (± 221) 1.01
es2015_block_scoped_fn 68875 ns/iter (± 223) 68618 ns/iter (± 232) 1.00
es2015_block_scoping 120401 ns/iter (± 449) 119942 ns/iter (± 496) 1.00

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

Please sign in to comment.