Skip to content

Commit

Permalink
perf(es/ast): Shrink size of Expr (#7041)
Browse files Browse the repository at this point in the history
**Related issue:**

 - Closes #7019.
  • Loading branch information
kdy1 committed Mar 9, 2023
1 parent 691a8c1 commit a9fe1d2
Show file tree
Hide file tree
Showing 48 changed files with 234 additions and 221 deletions.
12 changes: 9 additions & 3 deletions crates/swc_ecma_ast/src/expr.rs
Expand Up @@ -170,6 +170,9 @@ pub enum Expr {
Invalid(Invalid),
}

#[cfg(target_pointer_width = "64")]
assert_eq_size!(Expr, [u8; 80]);

impl Expr {
/// Normalize parenthesized expressions.
///
Expand Down Expand Up @@ -862,7 +865,8 @@ pub struct ArrowExpr {

pub params: Vec<Pat>,

pub body: BlockStmtOrExpr,
/// This is boxed to reduce the type size of [Expr].
pub body: Box<BlockStmtOrExpr>,

#[serde(default, rename = "async")]
pub is_async: bool,
Expand Down Expand Up @@ -978,8 +982,9 @@ pub struct TaggedTpl {
#[serde(default, rename = "typeParameters")]
pub type_params: Option<Box<TsTypeParamInstantiation>>,

/// This is boxed to reduce the type size of [Expr].
#[serde(rename = "template")]
pub tpl: Tpl,
pub tpl: Box<Tpl>,
}

impl Take for TaggedTpl {
Expand Down Expand Up @@ -1366,7 +1371,8 @@ impl Take for PatOrExpr {
pub struct OptChainExpr {
pub span: Span,
pub question_dot_token: Span,
pub base: OptChainBase,
/// This is boxed to reduce the type size of [Expr].
pub base: Box<OptChainBase>,
}

#[ast_node]
Expand Down
9 changes: 9 additions & 0 deletions crates/swc_ecma_ast/src/macros.rs
Expand Up @@ -234,3 +234,12 @@ macro_rules! bridge_decl_from {
bridge_from!(crate::ModuleItem, crate::Stmt, $src);
};
}

/// Copied from static_assertions
macro_rules! assert_eq_size {
($x:ty, $($xs:ty),+ $(,)?) => {
const _: fn() = || {
$(let _ = std::mem::transmute::<$x, $xs>;)+
};
};
}
3 changes: 3 additions & 0 deletions crates/swc_ecma_ast/src/stmt.rs
Expand Up @@ -104,6 +104,9 @@ pub enum Stmt {
Expr(ExprStmt),
}

#[cfg(target_pointer_width = "64")]
assert_eq_size!(Stmt, [u8; 64]);

// Implement Clone without inline to avoid multiple copies of the
// implementation.
impl Clone for Stmt {
Expand Down
2 changes: 1 addition & 1 deletion crates/swc_ecma_codegen/src/lib.rs
Expand Up @@ -813,7 +813,7 @@ where
fn emit_opt_chain(&mut self, n: &OptChainExpr) -> Result {
self.emit_leading_comments_of_span(n.span(), false)?;

match n.base {
match &*n.base {
OptChainBase::Member(ref e) => {
if let Expr::New(new) = &*e.obj {
self.emit_new(new, false)?;
Expand Down
13 changes: 4 additions & 9 deletions crates/swc_ecma_codegen/src/util.rs
Expand Up @@ -144,15 +144,10 @@ impl StartsWithAlphaNum for Expr {
| Expr::TsInstantiation(TsInstantiation { ref expr, .. })
| Expr::TsSatisfies(TsSatisfiesExpr { ref expr, .. }) => expr.starts_with_alpha_num(),

Expr::OptChain(OptChainExpr {
base: OptChainBase::Member(MemberExpr { obj: expr, .. }),
..
}) => expr.starts_with_alpha_num(),

Expr::OptChain(OptChainExpr {
base: OptChainBase::Call(OptCall { callee, .. }),
..
}) => callee.starts_with_alpha_num(),
Expr::OptChain(OptChainExpr { base, .. }) => match &**base {
OptChainBase::Member(base) => base.obj.starts_with_alpha_num(),
OptChainBase::Call(base) => base.callee.starts_with_alpha_num(),
},

Expr::Invalid(..) => true,
}
Expand Down
1 change: 1 addition & 0 deletions crates/swc_ecma_lints/src/lib.rs
@@ -1,5 +1,6 @@
#![cfg_attr(feature = "non_critical_lints", deny(unused))]
#![cfg_attr(feature = "non_critical_lints", deny(clippy::all))]
#![feature(box_patterns)]

pub mod config;
pub mod rule;
Expand Down
2 changes: 1 addition & 1 deletion crates/swc_ecma_lints/src/rules/duplicate_bindings.rs
Expand Up @@ -168,7 +168,7 @@ impl Visit for DuplicateBindings {
return_type: _,
} = a;
params.visit_with(self);
if let BlockStmtOrExpr::BlockStmt(b) = body {
if let BlockStmtOrExpr::BlockStmt(b) = &**body {
self.visit_with_stmts(&b.stmts, false)
}
}
Expand Down
2 changes: 1 addition & 1 deletion crates/swc_ecma_lints/src/rules/no_alert.rs
Expand Up @@ -138,7 +138,7 @@ impl NoAlert {
}
Expr::Member(member_expr)
| Expr::OptChain(OptChainExpr {
base: OptChainBase::Member(member_expr),
base: box OptChainBase::Member(member_expr),
..
}) => {
let MemberExpr { obj, prop, .. } = member_expr;
Expand Down
2 changes: 1 addition & 1 deletion crates/swc_ecma_lints/src/rules/no_empty_function.rs
Expand Up @@ -290,7 +290,7 @@ impl Visit for NoEmptyFunction {
}

fn visit_arrow_expr(&mut self, function: &ArrowExpr) {
if let BlockStmtOrExpr::BlockStmt(BlockStmt { stmts, span }) = &function.body {
if let BlockStmtOrExpr::BlockStmt(BlockStmt { stmts, span }) = &*function.body {
if self.consider_comments && self.has_comment_in_body(span) {
return;
}
Expand Down
2 changes: 1 addition & 1 deletion crates/swc_ecma_lints/src/rules/radix.rs
Expand Up @@ -244,7 +244,7 @@ impl Radix {
return self.extract_obj_and_prop_member_case(member_expr);
}
Expr::OptChain(OptChainExpr {
base: OptChainBase::Member(member_expr),
base: box OptChainBase::Member(member_expr),
..
}) => {
return self.extract_obj_and_prop_member_case(member_expr);
Expand Down
10 changes: 3 additions & 7 deletions crates/swc_ecma_lints/src/rules/utils.rs
Expand Up @@ -67,12 +67,8 @@ pub fn extract_arg_val(unresolved_ctxt: SyntaxContext, expr: &Expr) -> ArgValue
ArgValue::Other
}
}
Expr::TaggedTpl(TaggedTpl {
tag,
tpl: Tpl { exprs, quasis, .. },
..
}) => {
if exprs.is_empty() {
Expr::TaggedTpl(TaggedTpl { tag, tpl, .. }) => {
if tpl.exprs.is_empty() {
if let Expr::Member(MemberExpr { obj, prop, .. }) = tag.as_ref() {
if let (Expr::Ident(obj), MemberProp::Ident(prop)) = (obj.as_ref(), prop) {
if &*obj.sym != "String" {
Expand All @@ -87,7 +83,7 @@ pub fn extract_arg_val(unresolved_ctxt: SyntaxContext, expr: &Expr) -> ArgValue
return ArgValue::Other;
}

return ArgValue::Str(quasis.first().unwrap().raw.clone());
return ArgValue::Str(tpl.quasis.first().unwrap().raw.clone());
}
}
}
Expand Down
8 changes: 4 additions & 4 deletions crates/swc_ecma_minifier/src/compress/optimize/iife.rs
Expand Up @@ -472,7 +472,7 @@ where
}

if self.ctx.in_top_level() && !self.ctx.in_call_arg && self.options.negate_iife {
match &f.body {
match &*f.body {
BlockStmtOrExpr::BlockStmt(body) => {
let has_decl =
body.stmts.iter().any(|stmt| matches!(stmt, Stmt::Decl(..)));
Expand All @@ -494,7 +494,7 @@ where
.map(|p| p.clone().ident().unwrap().id)
.collect::<Vec<_>>();

match &mut f.body {
match &mut *f.body {
BlockStmtOrExpr::BlockStmt(body) => {
let new = self.inline_fn_like(&param_ids, body, &mut call.args);
if let Some(new) = new {
Expand Down Expand Up @@ -1080,7 +1080,7 @@ where

Expr::Arrow(ArrowExpr {
params,
body: BlockStmtOrExpr::Expr(body),
body: box BlockStmtOrExpr::Expr(body),
is_async: false,
is_generator: false,
..
Expand All @@ -1107,7 +1107,7 @@ fn find_params(callee: &mut Expr) -> Option<Vec<&mut Pat>> {
}
fn find_body(callee: &mut Expr) -> Option<Either<&mut BlockStmt, &mut Expr>> {
match callee {
Expr::Arrow(e) => match &mut e.body {
Expr::Arrow(e) => match &mut *e.body {
BlockStmtOrExpr::BlockStmt(b) => Some(Either::Left(b)),
BlockStmtOrExpr::Expr(b) => Some(Either::Right(&mut **b)),
},
Expand Down
2 changes: 1 addition & 1 deletion crates/swc_ecma_minifier/src/compress/optimize/inline.rs
Expand Up @@ -785,7 +785,7 @@ fn is_arrow_simple_enough_for_copy(e: &ArrowExpr) -> bool {
return false;
}

match &e.body {
match &*e.body {
BlockStmtOrExpr::BlockStmt(s) => is_block_stmt_of_fn_simple_enough_for_copy(s),
BlockStmtOrExpr::Expr(e) => is_arrow_body_simple_enough_for_copy(e),
}
Expand Down
10 changes: 5 additions & 5 deletions crates/swc_ecma_minifier/src/compress/optimize/mod.rs
Expand Up @@ -750,7 +750,7 @@ where
.as_ref()
.map(|body| body.stmts.is_empty())
.unwrap_or(false),
Expr::Arrow(f) => match &f.body {
Expr::Arrow(f) => match &*f.body {
BlockStmtOrExpr::BlockStmt(body) => body.stmts.is_empty(),
BlockStmtOrExpr::Expr(_) => false,
},
Expand Down Expand Up @@ -1407,7 +1407,7 @@ where

if !self.prepend_stmts.is_empty() {
let mut stmts = self.prepend_stmts.take().take_stmts();
match &mut n.body {
match &mut *n.body {
BlockStmtOrExpr::BlockStmt(v) => {
prepend_stmts(&mut v.stmts, stmts.into_iter());
}
Expand All @@ -1419,17 +1419,17 @@ where
span: DUMMY_SP,
arg: Some(v.take()),
}));
n.body = BlockStmtOrExpr::BlockStmt(BlockStmt {
n.body = Box::new(BlockStmtOrExpr::BlockStmt(BlockStmt {
span: DUMMY_SP,
stmts,
});
}));
}
}
}

self.prepend_stmts = prepend;

if let BlockStmtOrExpr::BlockStmt(body) = &mut n.body {
if let BlockStmtOrExpr::BlockStmt(body) = &mut *n.body {
drop_invalid_stmts(&mut body.stmts);
}
}
Expand Down
Expand Up @@ -1408,7 +1408,7 @@ where
Expr::Paren(e) => self.is_skippable_for_seq(a, &e.expr),
Expr::Unary(e) => self.is_skippable_for_seq(a, &e.arg),

Expr::OptChain(OptChainExpr { base, .. }) => match base {
Expr::OptChain(OptChainExpr { base, .. }) => match &**base {
OptChainBase::Member(e) => {
if !self.should_preserve_property_access(
&e.obj,
Expand Down
6 changes: 3 additions & 3 deletions crates/swc_ecma_minifier/src/compress/pure/arrows.rs
Expand Up @@ -31,7 +31,7 @@ impl Pure<'_> {
*e = Expr::Arrow(ArrowExpr {
span: function.span,
params: function.params.take().into_iter().map(|p| p.pat).collect(),
body: BlockStmtOrExpr::BlockStmt(function.body.take().unwrap()),
body: Box::new(BlockStmtOrExpr::BlockStmt(function.body.take().unwrap())),
is_async: function.is_async,
is_generator: function.is_generator,
type_params: Default::default(),
Expand Down Expand Up @@ -104,7 +104,7 @@ impl Pure<'_> {
.into_iter()
.map(|v| v.pat)
.collect(),
body: BlockStmtOrExpr::Expr(arg),
body: Box::new(BlockStmtOrExpr::Expr(arg)),
is_async: m.function.is_async,
is_generator: m.function.is_generator,
type_params: Default::default(),
Expand Down Expand Up @@ -133,7 +133,7 @@ impl Pure<'_> {

if let Expr::Arrow(
m @ ArrowExpr {
body: BlockStmtOrExpr::BlockStmt(..),
body: box BlockStmtOrExpr::BlockStmt(..),
..
},
) = &mut *kv.value
Expand Down
2 changes: 1 addition & 1 deletion crates/swc_ecma_minifier/src/compress/pure/evaluate.rs
Expand Up @@ -537,7 +537,7 @@ impl Pure<'_> {
_ => return,
};

match &mut opt.base {
match &mut *opt.base {
OptChainBase::Member(MemberExpr { span, obj, .. }) => {
//
if is_pure_undefined_or_null(&self.expr_ctx, obj) {
Expand Down
12 changes: 4 additions & 8 deletions crates/swc_ecma_minifier/src/compress/pure/misc.rs
Expand Up @@ -373,7 +373,7 @@ impl Pure<'_> {
_ => return,
};

if let OptChainBase::Member(base) = &mut opt.base {
if let OptChainBase::Member(base) = &mut *opt.base {
if match &*base.obj {
Expr::Lit(Lit::Null(..)) => false,
Expr::Lit(..) | Expr::Object(..) | Expr::Array(..) => true,
Expand Down Expand Up @@ -866,15 +866,11 @@ impl Pure<'_> {
return;
}

Expr::TaggedTpl(TaggedTpl {
span,
tpl: Tpl { exprs, .. },
..
}) if span.has_mark(self.marks.pure) => {
Expr::TaggedTpl(TaggedTpl { span, tpl, .. }) if span.has_mark(self.marks.pure) => {
report_change!("ignore_return_value: Dropping a pure call");
self.changed = true;

let new = self.make_ignored_expr(exprs.take().into_iter());
let new = self.make_ignored_expr(tpl.exprs.take().into_iter());

*e = new.unwrap_or(Expr::Invalid(Invalid { span: DUMMY_SP }));
return;
Expand Down Expand Up @@ -1228,7 +1224,7 @@ impl Pure<'_> {
}
}
}
Expr::Arrow(callee) => match &mut callee.body {
Expr::Arrow(callee) => match &mut *callee.body {
BlockStmtOrExpr::BlockStmt(body) => {
for stmt in &mut body.stmts {
self.ignore_return_value_of_return_stmt(stmt, opts);
Expand Down
1 change: 1 addition & 0 deletions crates/swc_ecma_minifier/src/lib.rs
Expand Up @@ -36,6 +36,7 @@
#![allow(clippy::only_used_in_recursion)]
#![allow(unstable_name_collisions)]
#![allow(clippy::match_like_matches_macro)]
#![feature(box_patterns)]

use once_cell::sync::Lazy;
use swc_common::{comments::Comments, pass::Repeated, sync::Lrc, SourceMap, SyntaxContext};
Expand Down
2 changes: 1 addition & 1 deletion crates/swc_ecma_minifier/src/pass/global_defs.rs
Expand Up @@ -116,7 +116,7 @@ fn should_replace(pred: &Expr, node: &Expr) -> bool {
})
| Expr::OptChain(OptChainExpr {
base:
OptChainBase::Member(MemberExpr {
box OptChainBase::Member(MemberExpr {
obj: node_obj,
prop: nodes,
..
Expand Down
4 changes: 2 additions & 2 deletions crates/swc_ecma_minifier/src/util/size.rs
Expand Up @@ -153,7 +153,7 @@ impl SizeWithCtxt for Expr {
body,
is_async,
..
}) => match body {
}) => match &**body {
BlockStmtOrExpr::BlockStmt(_) => TODO,
BlockStmtOrExpr::Expr(e) => {
let p = match &params[..] {
Expand All @@ -178,7 +178,7 @@ impl SizeWithCtxt for Expr {
MetaPropKind::ImportMeta => 11,
},
Expr::PrivateName(p) => p.size(),
Expr::OptChain(p) => match &p.base {
Expr::OptChain(p) => match &*p.base {
OptChainBase::Member(m) => 1 + m.obj.size(unresolved) + m.prop.size(unresolved),
OptChainBase::Call(c) => {
1 + c.callee.size(unresolved) + c.args.size(unresolved) + 2
Expand Down
4 changes: 2 additions & 2 deletions crates/swc_ecma_minifier/tests/eval.rs
Expand Up @@ -194,11 +194,11 @@ impl VisitMut for PartialInliner {
raw: Atom::new(&*s.value),
cooked: Some(Atom::new(&*s.value)),
};
tt.tpl = Tpl {
tt.tpl = Box::new(Tpl {
span: el.span,
exprs: Default::default(),
quasis: vec![el],
};
});
}
_ => {
unreachable!()
Expand Down

1 comment on commit a9fe1d2

@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: a9fe1d2 Previous: 691a8c1 Ratio
es/full/bugs-1 319123 ns/iter (± 10309) 324736 ns/iter (± 11287) 0.98
es/full/minify/libraries/antd 2153251974 ns/iter (± 46133013) 2221143312 ns/iter (± 42923893) 0.97
es/full/minify/libraries/d3 338907699 ns/iter (± 6429238) 351888906 ns/iter (± 6878712) 0.96
es/full/minify/libraries/echarts 1563927642 ns/iter (± 12626596) 1662739369 ns/iter (± 14556049) 0.94
es/full/minify/libraries/jquery 96681939 ns/iter (± 1887301) 97788315 ns/iter (± 744451) 0.99
es/full/minify/libraries/lodash 112646647 ns/iter (± 1451409) 114001374 ns/iter (± 1570485) 0.99
es/full/minify/libraries/moment 55649038 ns/iter (± 436117) 56146919 ns/iter (± 727847) 0.99
es/full/minify/libraries/react 19915180 ns/iter (± 162983) 20013191 ns/iter (± 140515) 1.00
es/full/minify/libraries/terser 281679816 ns/iter (± 6074165) 298721449 ns/iter (± 5471424) 0.94
es/full/minify/libraries/three 530578894 ns/iter (± 9462090) 567635528 ns/iter (± 5941505) 0.93
es/full/minify/libraries/typescript 3925953478 ns/iter (± 33709198) 4121736292 ns/iter (± 14846886) 0.95
es/full/minify/libraries/victory 847815715 ns/iter (± 15256545) 914529849 ns/iter (± 15646766) 0.93
es/full/minify/libraries/vue 141671349 ns/iter (± 2196633) 143859413 ns/iter (± 1537220) 0.98
es/full/codegen/es3 26006 ns/iter (± 60) 26319 ns/iter (± 83) 0.99
es/full/codegen/es5 26149 ns/iter (± 55) 26265 ns/iter (± 41) 1.00
es/full/codegen/es2015 26128 ns/iter (± 75) 26267 ns/iter (± 27) 0.99
es/full/codegen/es2016 26054 ns/iter (± 50) 26283 ns/iter (± 28) 0.99
es/full/codegen/es2017 26099 ns/iter (± 44) 26175 ns/iter (± 33) 1.00
es/full/codegen/es2018 26069 ns/iter (± 84) 26287 ns/iter (± 50) 0.99
es/full/codegen/es2019 26068 ns/iter (± 70) 26247 ns/iter (± 41) 0.99
es/full/codegen/es2020 26074 ns/iter (± 67) 26296 ns/iter (± 56) 0.99
es/full/all/es3 177619329 ns/iter (± 2387527) 175980633 ns/iter (± 3325028) 1.01
es/full/all/es5 169992412 ns/iter (± 1688550) 167485724 ns/iter (± 1740166) 1.01
es/full/all/es2015 132725278 ns/iter (± 2247036) 133010826 ns/iter (± 1494245) 1.00
es/full/all/es2016 130934647 ns/iter (± 2183549) 133279853 ns/iter (± 3269067) 0.98
es/full/all/es2017 129022520 ns/iter (± 2718090) 129762619 ns/iter (± 1423338) 0.99
es/full/all/es2018 124534424 ns/iter (± 2186683) 126354615 ns/iter (± 1090331) 0.99
es/full/all/es2019 124669276 ns/iter (± 2129553) 125903845 ns/iter (± 1073362) 0.99
es/full/all/es2020 118258262 ns/iter (± 2295101) 119202005 ns/iter (± 2168650) 0.99
es/full/parser 557003 ns/iter (± 13702) 563668 ns/iter (± 11711) 0.99
es/full/base/fixer 23368 ns/iter (± 37) 22131 ns/iter (± 16) 1.06
es/full/base/resolver_and_hygiene 82550 ns/iter (± 310) 82470 ns/iter (± 118) 1.00
serialization of ast node 127 ns/iter (± 0) 128 ns/iter (± 0) 0.99
serialization of serde 128 ns/iter (± 0) 129 ns/iter (± 0) 0.99
css/minify/libraries/bootstrap 28753576 ns/iter (± 71808) 29282370 ns/iter (± 244802) 0.98
css/visitor/compare/clone 2123035 ns/iter (± 13540) 2119452 ns/iter (± 9248) 1.00
css/visitor/compare/visit_mut_span 2317922 ns/iter (± 8396) 2288469 ns/iter (± 7194) 1.01
css/visitor/compare/visit_mut_span_panic 2382318 ns/iter (± 13599) 2347539 ns/iter (± 9141) 1.01
css/visitor/compare/fold_span 3094975 ns/iter (± 20799) 3095227 ns/iter (± 18022) 1.00
css/visitor/compare/fold_span_panic 3229902 ns/iter (± 25379) 3213921 ns/iter (± 27930) 1.00
css/lexer/bootstrap_5_1_3 5228807 ns/iter (± 9349) 5211783 ns/iter (± 4804) 1.00
css/lexer/foundation_6_7_4 4402925 ns/iter (± 1567) 4397812 ns/iter (± 5481) 1.00
css/lexer/tailwind_3_1_1 833879 ns/iter (± 371) 830657 ns/iter (± 977) 1.00
css/parser/bootstrap_5_1_3 22974485 ns/iter (± 156311) 22524816 ns/iter (± 235441) 1.02
css/parser/foundation_6_7_4 17902845 ns/iter (± 67637) 17833836 ns/iter (± 54845) 1.00
css/parser/tailwind_3_1_1 3368139 ns/iter (± 2884) 3367063 ns/iter (± 15107) 1.00
es/codegen/colors 320507 ns/iter (± 179811) 330688 ns/iter (± 184829) 0.97
es/codegen/large 1098075 ns/iter (± 550080) 2321341 ns/iter (± 1510112) 0.47
es/codegen/with-parser/colors 48865 ns/iter (± 468) 47855 ns/iter (± 190) 1.02
es/codegen/with-parser/large 525142 ns/iter (± 1576) 526675 ns/iter (± 2319) 1.00
es/minify/libraries/antd 1844533035 ns/iter (± 19246775) 1954360269 ns/iter (± 27252247) 0.94
es/minify/libraries/d3 293539874 ns/iter (± 4330223) 308449378 ns/iter (± 4058515) 0.95
es/minify/libraries/echarts 1361650510 ns/iter (± 22237491) 1411007297 ns/iter (± 13278780) 0.97
es/minify/libraries/jquery 87810343 ns/iter (± 3512949) 82324961 ns/iter (± 683027) 1.07
es/minify/libraries/lodash 103059439 ns/iter (± 2174038) 99385131 ns/iter (± 1128634) 1.04
es/minify/libraries/moment 48727787 ns/iter (± 1193319) 47885373 ns/iter (± 435476) 1.02
es/minify/libraries/react 18031163 ns/iter (± 357045) 17463631 ns/iter (± 133674) 1.03
es/minify/libraries/terser 243930676 ns/iter (± 6769497) 238742589 ns/iter (± 5061060) 1.02
es/minify/libraries/three 452917861 ns/iter (± 7944030) 450705670 ns/iter (± 10840871) 1.00
es/minify/libraries/typescript 3331857655 ns/iter (± 25525056) 3481159421 ns/iter (± 25455863) 0.96
es/minify/libraries/victory 748609129 ns/iter (± 20679987) 737289247 ns/iter (± 30390723) 1.02
es/minify/libraries/vue 125313248 ns/iter (± 2334895) 122585264 ns/iter (± 619023) 1.02
es/visitor/compare/clone 2349701 ns/iter (± 10778) 2420000 ns/iter (± 13455) 0.97
es/visitor/compare/visit_mut_span 2696011 ns/iter (± 5008) 2811252 ns/iter (± 18241) 0.96
es/visitor/compare/visit_mut_span_panic 2752720 ns/iter (± 6221) 2855086 ns/iter (± 15881) 0.96
es/visitor/compare/fold_span 3823979 ns/iter (± 14147) 3951399 ns/iter (± 16522) 0.97
es/visitor/compare/fold_span_panic 3975064 ns/iter (± 23849) 4171913 ns/iter (± 20243) 0.95
es/lexer/colors 16221 ns/iter (± 25) 16163 ns/iter (± 15) 1.00
es/lexer/angular 7958022 ns/iter (± 9555) 7894732 ns/iter (± 10714) 1.01
es/lexer/backbone 1021647 ns/iter (± 761) 1017055 ns/iter (± 359) 1.00
es/lexer/jquery 5698240 ns/iter (± 6692) 5681916 ns/iter (± 2086) 1.00
es/lexer/jquery mobile 8755814 ns/iter (± 7866) 8701069 ns/iter (± 20216) 1.01
es/lexer/mootools 4458693 ns/iter (± 3006) 4454500 ns/iter (± 2876) 1.00
es/lexer/underscore 851053 ns/iter (± 1030) 850431 ns/iter (± 610) 1.00
es/lexer/three 26583459 ns/iter (± 233576) 26356947 ns/iter (± 13300) 1.01
es/lexer/yui 4859602 ns/iter (± 2964) 4848861 ns/iter (± 4388) 1.00
es/parser/colors 30983 ns/iter (± 69) 30870 ns/iter (± 26) 1.00
es/parser/angular 16354602 ns/iter (± 151340) 16550229 ns/iter (± 290161) 0.99
es/parser/backbone 2298336 ns/iter (± 14874) 2337304 ns/iter (± 12537) 0.98
es/parser/jquery 12754796 ns/iter (± 154802) 12920938 ns/iter (± 375821) 0.99
es/parser/jquery mobile 21327666 ns/iter (± 497953) 21609770 ns/iter (± 951222) 0.99
es/parser/mootools 9503591 ns/iter (± 58721) 9688739 ns/iter (± 47244) 0.98
es/parser/underscore 1932645 ns/iter (± 9665) 1980766 ns/iter (± 13328) 0.98
es/parser/three 65109172 ns/iter (± 650797) 66001136 ns/iter (± 1058759) 0.99
es/parser/yui 9713864 ns/iter (± 115419) 9939344 ns/iter (± 144100) 0.98
es/preset-env/usage/builtin_type 145689 ns/iter (± 34622) 140555 ns/iter (± 31891) 1.04
es/preset-env/usage/property 21521 ns/iter (± 106) 21511 ns/iter (± 99) 1.00
es/resolver/typescript 137773624 ns/iter (± 6302719) 151583170 ns/iter (± 3927458) 0.91
es/fixer/typescript 106324338 ns/iter (± 1637012) 124639598 ns/iter (± 1381086) 0.85
es/hygiene/typescript 242069738 ns/iter (± 4021182) 269189410 ns/iter (± 1637341) 0.90
es/resolver_with_hygiene/typescript 400940771 ns/iter (± 3689799) 429440182 ns/iter (± 3886990) 0.93
es/visitor/base-perf/module_clone 77493 ns/iter (± 1464) 75894 ns/iter (± 1850) 1.02
es/visitor/base-perf/fold_empty 87668 ns/iter (± 1776) 85517 ns/iter (± 1550) 1.03
es/visitor/base-perf/fold_noop_impl_all 88705 ns/iter (± 1967) 87034 ns/iter (± 1071) 1.02
es/visitor/base-perf/fold_noop_impl_vec 88120 ns/iter (± 2179) 86170 ns/iter (± 1860) 1.02
es/visitor/base-perf/boxing_boxed_clone 57 ns/iter (± 0) 56 ns/iter (± 0) 1.02
es/visitor/base-perf/boxing_unboxed_clone 54 ns/iter (± 0) 60 ns/iter (± 0) 0.90
es/visitor/base-perf/boxing_boxed 102 ns/iter (± 0) 103 ns/iter (± 0) 0.99
es/visitor/base-perf/boxing_unboxed 97 ns/iter (± 0) 104 ns/iter (± 0) 0.93
es/visitor/base-perf/visit_contains_this 3608 ns/iter (± 62) 3408 ns/iter (± 77) 1.06
es/base/parallel/resolver/typescript 5764911212 ns/iter (± 524083175) 6007354553 ns/iter (± 786870580) 0.96
es/base/parallel/hygiene/typescript 2715086699 ns/iter (± 36201051) 3093972359 ns/iter (± 49272085) 0.88
misc/visitors/time-complexity/time 5 96 ns/iter (± 0) 99 ns/iter (± 0) 0.97
misc/visitors/time-complexity/time 10 328 ns/iter (± 0) 315 ns/iter (± 4) 1.04
misc/visitors/time-complexity/time 15 642 ns/iter (± 0) 652 ns/iter (± 0) 0.98
misc/visitors/time-complexity/time 20 1200 ns/iter (± 3) 1212 ns/iter (± 0) 0.99
misc/visitors/time-complexity/time 40 6229 ns/iter (± 11) 6210 ns/iter (± 1) 1.00
misc/visitors/time-complexity/time 60 15533 ns/iter (± 22) 15545 ns/iter (± 14) 1.00
es/full-target/es2016 189662 ns/iter (± 1319) 187930 ns/iter (± 624) 1.01
es/full-target/es2017 184709 ns/iter (± 283) 183282 ns/iter (± 631) 1.01
es/full-target/es2018 173770 ns/iter (± 799) 171634 ns/iter (± 218) 1.01
es2020_nullish_coalescing 67315 ns/iter (± 173) 66701 ns/iter (± 143) 1.01
es2020_optional_chaining 95697 ns/iter (± 195) 95408 ns/iter (± 353) 1.00
es2022_class_properties 93805 ns/iter (± 263) 94395 ns/iter (± 138) 0.99
es2018_object_rest_spread 71959 ns/iter (± 153) 71241 ns/iter (± 157) 1.01
es2019_optional_catch_binding 61621 ns/iter (± 94) 61449 ns/iter (± 599) 1.00
es2017_async_to_generator 62172 ns/iter (± 90) 61882 ns/iter (± 66) 1.00
es2016_exponentiation 65776 ns/iter (± 114) 65090 ns/iter (± 73) 1.01
es2015_arrow 69823 ns/iter (± 98) 70253 ns/iter (± 289) 0.99
es2015_block_scoped_fn 67160 ns/iter (± 291) 65971 ns/iter (± 104) 1.02
es2015_block_scoping 151112 ns/iter (± 8261) 157222 ns/iter (± 9876) 0.96
es2015_classes 117899 ns/iter (± 762) 118508 ns/iter (± 860) 0.99
es2015_computed_props 61417 ns/iter (± 89) 61276 ns/iter (± 87) 1.00
es2015_destructuring 116560 ns/iter (± 349) 116602 ns/iter (± 149) 1.00
es2015_duplicate_keys 64284 ns/iter (± 96) 63893 ns/iter (± 154) 1.01
es2015_parameters 80422 ns/iter (± 54) 80460 ns/iter (± 206) 1.00
es2015_fn_name 68190 ns/iter (± 947) 68146 ns/iter (± 860) 1.00
es2015_for_of 64673 ns/iter (± 116) 64603 ns/iter (± 97) 1.00
es2015_instanceof 63925 ns/iter (± 142) 63276 ns/iter (± 178) 1.01
es2015_shorthand_property 61370 ns/iter (± 102) 61304 ns/iter (± 87) 1.00
es2015_spread 61579 ns/iter (± 130) 61429 ns/iter (± 126) 1.00
es2015_sticky_regex 62769 ns/iter (± 105) 62233 ns/iter (± 127) 1.01
es2015_typeof_symbol 63090 ns/iter (± 150) 62513 ns/iter (± 107) 1.01
es/transform/baseline/base 52192 ns/iter (± 85) 52197 ns/iter (± 122) 1.00
es/transform/baseline/common_reserved_word 63215 ns/iter (± 68) 62918 ns/iter (± 100) 1.00
es/transform/baseline/common_typescript 143130 ns/iter (± 3000) 167342 ns/iter (± 264) 0.86
es/target/es3 168328 ns/iter (± 239) 169622 ns/iter (± 274) 0.99
es/target/es2015 633828 ns/iter (± 1464) 632585 ns/iter (± 2702) 1.00
es/target/es2016 65957 ns/iter (± 116) 65175 ns/iter (± 215) 1.01
es/target/es2017 62319 ns/iter (± 79) 62022 ns/iter (± 79) 1.00
es/target/es2018 82311 ns/iter (± 94) 81386 ns/iter (± 146) 1.01
es/target/es2020 133191 ns/iter (± 290) 133013 ns/iter (± 206) 1.00
babelify-only 659696 ns/iter (± 11439) 672363 ns/iter (± 1318) 0.98
parse_and_babelify_angular 51707047 ns/iter (± 1478246) 51415645 ns/iter (± 851009) 1.01
parse_and_babelify_backbone 5698883 ns/iter (± 66239) 5905245 ns/iter (± 111907) 0.97
parse_and_babelify_jquery 38213353 ns/iter (± 951303) 40609972 ns/iter (± 1660168) 0.94
parse_and_babelify_jquery_mobile 67740981 ns/iter (± 1253126) 71179196 ns/iter (± 1209441) 0.95
parse_and_babelify_mootools 41147481 ns/iter (± 559080) 40854052 ns/iter (± 452111) 1.01
parse_and_babelify_underscore 4441873 ns/iter (± 37358) 4500429 ns/iter (± 29705) 0.99
parse_and_babelify_yui 39460556 ns/iter (± 504172) 40481046 ns/iter (± 446963) 0.97
html/minify/document/css_spec 44797256 ns/iter (± 457821) 46251277 ns/iter (± 463440) 0.97
html/minify/document/github 18071630 ns/iter (± 100139) 18261841 ns/iter (± 139570) 0.99
html/minify/document/stackoverflow 16119185 ns/iter (± 52902) 16080206 ns/iter (± 78375) 1.00
html/minify/document_fragment/css_spec 43402445 ns/iter (± 275706) 43701337 ns/iter (± 512683) 0.99
html/minify/document_fragment/github 17188333 ns/iter (± 27981) 17513456 ns/iter (± 103587) 0.98
html/minify/document_fragment/stackoverflow 15589342 ns/iter (± 42245) 15865709 ns/iter (± 94559) 0.98
html/document/visitor/compare/clone 349443 ns/iter (± 1770) 346398 ns/iter (± 1237) 1.01
html/document/visitor/compare/visit_mut_span 371100 ns/iter (± 1168) 375616 ns/iter (± 1887) 0.99
html/document/visitor/compare/visit_mut_span_panic 383994 ns/iter (± 2313) 381715 ns/iter (± 1899) 1.01
html/document/visitor/compare/fold_span 412371 ns/iter (± 2178) 415430 ns/iter (± 1923) 0.99
html/document/visitor/compare/fold_span_panic 471057 ns/iter (± 2788) 471769 ns/iter (± 2021) 1.00
html/document_fragment/visitor/compare/clone 344604 ns/iter (± 1339) 341766 ns/iter (± 1931) 1.01
html/document_fragment/visitor/compare/visit_mut_span 375579 ns/iter (± 2370) 375615 ns/iter (± 2298) 1.00
html/document_fragment/visitor/compare/visit_mut_span_panic 384498 ns/iter (± 1362) 381582 ns/iter (± 1894) 1.01
html/document_fragment/visitor/compare/fold_span 413269 ns/iter (± 2633) 408471 ns/iter (± 2773) 1.01
html/document_fragment/visitor/compare/fold_span_panic 468370 ns/iter (± 1741) 467505 ns/iter (± 2210) 1.00
html/lexer/css_2021_spec 15894766 ns/iter (± 74939) 15621868 ns/iter (± 75190) 1.02
html/lexer/github_com_17_05_2022 6109613 ns/iter (± 2712) 6049019 ns/iter (± 13784) 1.01
html/lexer/stackoverflow_com_17_05_2022 5735230 ns/iter (± 2548) 5666348 ns/iter (± 9914) 1.01
html/parser/parser_document/css_2021_spec 28204727 ns/iter (± 445445) 27657576 ns/iter (± 285407) 1.02
html/parser/parser_document/github_com_17_05_2022 8935409 ns/iter (± 6356) 8979462 ns/iter (± 20642) 1.00
html/parser/parser_document/stackoverflow_com_17_05_2022 7783501 ns/iter (± 15688) 7793730 ns/iter (± 6016) 1.00
html/parser/parser_document_fragment/css_2021_spec 28630710 ns/iter (± 497156) 28161146 ns/iter (± 288764) 1.02
html/parser/parser_document_fragment/github_com_17_05_2022 9000891 ns/iter (± 26550) 8947022 ns/iter (± 9469) 1.01
html/parser/parser_document_fragment/stackoverflow_com_17_05_2022 7812351 ns/iter (± 8485) 7837754 ns/iter (± 28869) 1.00

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

Please sign in to comment.