Skip to content

Commit

Permalink
perf(es/utils): Introduce NodeIgnoringSpan (#7030)
Browse files Browse the repository at this point in the history
  • Loading branch information
hyf0 committed Mar 8, 2023
1 parent 50ee7d1 commit 8bfef35
Show file tree
Hide file tree
Showing 8 changed files with 184 additions and 151 deletions.
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 3 additions & 2 deletions crates/swc/src/config/mod.rs
Expand Up @@ -72,6 +72,7 @@ use swc_ecma_transforms_optimization::{
simplify::{dce::Config as DceConfig, Config as SimplifyConfig},
GlobalExprMap,
};
use swc_ecma_utils::NodeIgnoringSpan;
use swc_ecma_visit::{Fold, VisitMutWith};

pub use crate::plugin::PluginConfig;
Expand Down Expand Up @@ -1698,11 +1699,11 @@ impl GlobalPassOption {
.filter(|(k, _)| k.contains('.'))
.map(|(k, v)| {
(
*expr(cm, handler, k.to_string()),
NodeIgnoringSpan::owned(*expr(cm, handler, k.to_string())),
*expr(cm, handler, v.to_string()),
)
})
.collect::<Vec<_>>();
.collect::<AHashMap<_, _>>();
let map = Arc::new(map);
CACHE.insert(cache_key, map.clone());
map
Expand Down
49 changes: 9 additions & 40 deletions crates/swc_ecma_minifier/src/metadata/mod.rs
@@ -1,50 +1,17 @@
use std::hash::Hash;

use rustc_hash::FxHashSet;
use swc_common::{
comments::{Comment, CommentKind, Comments},
EqIgnoreSpan, Span, SyntaxContext,
Span, SyntaxContext,
};
use swc_ecma_ast::*;
use swc_ecma_usage_analyzer::marks::Marks;
use swc_ecma_utils::find_pat_ids;
use swc_ecma_utils::{find_pat_ids, NodeIgnoringSpan};
use swc_ecma_visit::{
noop_visit_mut_type, noop_visit_type, Visit, VisitMut, VisitMutWith, VisitWith,
};

use crate::option::CompressOptions;

#[derive(Debug, Eq)]
struct HashEqIgnoreSpanExprRef<'a>(&'a Expr);

impl<'a> PartialEq for HashEqIgnoreSpanExprRef<'a> {
fn eq(&self, other: &Self) -> bool {
Ident::within_ignored_ctxt(|| self.0.eq_ignore_span(other.0))
}
}

impl<'a> Hash for HashEqIgnoreSpanExprRef<'a> {
fn hash<H: std::hash::Hasher>(&self, state: &mut H) {
// In pratice, most of cases/input we are dealing with are Expr::Member or
// Expr::Ident.
match self.0 {
Expr::Ident(i) => {
i.sym.hash(state);
}
Expr::Member(i) => {
Self(&i.obj).hash(state);
if let MemberProp::Ident(prop) = &i.prop {
prop.sym.hash(state);
}
}
_ => {
// Other expression kind would fallback to the same empty hash.
// So, their will spend linear time to do comparisons.
}
}
}
}

#[cfg(test)]
mod tests;

Expand All @@ -59,7 +26,7 @@ pub(crate) fn info_marker<'a>(
options
.pure_funcs
.iter()
.map(|f| HashEqIgnoreSpanExprRef(f))
.map(|f| NodeIgnoringSpan::borrowed(f.as_ref()))
.collect()
});
InfoMarker {
Expand All @@ -81,7 +48,7 @@ struct State {
struct InfoMarker<'a> {
#[allow(dead_code)]
options: Option<&'a CompressOptions>,
pure_funcs: Option<FxHashSet<HashEqIgnoreSpanExprRef<'a>>>,
pure_funcs: Option<FxHashSet<NodeIgnoringSpan<'a, Expr>>>,
comments: Option<&'a dyn Comments>,
marks: Marks,
// unresolved_mark: Mark,
Expand Down Expand Up @@ -170,9 +137,11 @@ impl VisitMut for InfoMarker<'_> {
} else if let Some(pure_fns) = &self.pure_funcs {
if let Callee::Expr(e) = &n.callee {
// Check for pure_funcs
if pure_fns.contains(&HashEqIgnoreSpanExprRef(e)) {
n.span = n.span.apply_mark(self.marks.pure);
};
Ident::within_ignored_ctxt(|| {
if pure_fns.contains(&NodeIgnoringSpan::borrowed(e)) {
n.span = n.span.apply_mark(self.marks.pure);
};
})
}
}
}
Expand Down
77 changes: 0 additions & 77 deletions crates/swc_ecma_minifier/src/metadata/tests.rs
Expand Up @@ -158,80 +158,3 @@
// fn export_default_fn_1() {
// assert_standalone("export default function f(module, exports) {}", 0);
// }

use rustc_hash::FxHashSet;
use swc_common::{util::take::Take, Mark, DUMMY_SP};
use swc_ecma_utils::{member_expr, quote_expr};

use super::HashEqIgnoreSpanExprRef;

#[test]
fn test_hash_eq_ignore_span_expr_ref() {
use swc_ecma_ast::*;

fn expr_ref(expr_ref: &Expr) -> HashEqIgnoreSpanExprRef {
HashEqIgnoreSpanExprRef(expr_ref)
}

testing::run_test(false, |_cm, _handler| {
let dummy_sp = DUMMY_SP;
let meaningful_sp = dummy_sp.apply_mark(Mark::new());

let meaningful_ident_expr = Expr::Ident(Ident::new("foo".into(), meaningful_sp));
let dummy_ident_expr = Expr::Ident(Ident::new("foo".into(), dummy_sp));

let meaningful_member_expr = member_expr!(meaningful_sp, foo.bar);
let dummy_member_expr = member_expr!(dummy_sp, foo.bar);

let meaningful_null_expr = quote_expr!(meaningful_sp, null);
let dummy_null_expr = quote_expr!(dummy_sp, null);

let meaningful_array_expr = Box::new(Expr::Array(ArrayLit {
span: meaningful_sp,
elems: Default::default(),
}));

let dummy_array_expr = Box::new(Expr::Array(ArrayLit::dummy()));

// Should equal ignoring span and syntax context
assert_eq!(
expr_ref(&meaningful_ident_expr),
expr_ref(&dummy_ident_expr)
);

assert_eq!(
expr_ref(&meaningful_array_expr),
expr_ref(&dummy_array_expr)
);

let mut set = FxHashSet::from_iter([
expr_ref(&meaningful_ident_expr),
expr_ref(&meaningful_member_expr),
expr_ref(&meaningful_null_expr),
expr_ref(&meaningful_array_expr),
]);

// Should produce the same hash value ignoring span and syntax context
assert!(set.contains(&expr_ref(&dummy_ident_expr)));
assert!(set.contains(&expr_ref(&dummy_member_expr)));
assert!(set.contains(&expr_ref(&dummy_null_expr)));
assert!(set.contains(&expr_ref(&dummy_array_expr)));

set.insert(expr_ref(&dummy_ident_expr));
set.insert(expr_ref(&dummy_member_expr));
set.insert(expr_ref(&dummy_null_expr));
set.insert(expr_ref(&dummy_array_expr));
assert_eq!(set.len(), 4);

// Should not equal ignoring span and syntax context
let dummy_ident_expr = Expr::Ident(Ident::new("baz".into(), dummy_sp));
let dummy_member_expr = member_expr!(dummy_sp, baz.bar);
let dummy_arrow_expr = Box::new(Expr::Arrow(ArrowExpr::dummy()));
assert!(!set.contains(&expr_ref(&dummy_ident_expr)));
assert!(!set.contains(&expr_ref(&dummy_member_expr)));
assert!(!set.contains(&expr_ref(&dummy_arrow_expr)));

Ok(())
})
.unwrap();
}
19 changes: 9 additions & 10 deletions crates/swc_ecma_transforms_optimization/src/inline_globals.rs
Expand Up @@ -2,17 +2,16 @@ use swc_atoms::{js_word, JsWord};
use swc_common::{
collections::{AHashMap, AHashSet},
sync::Lrc,
EqIgnoreSpan,
};
use swc_ecma_ast::*;
use swc_ecma_transforms_base::perf::Parallel;
use swc_ecma_transforms_macros::parallel;
use swc_ecma_utils::collect_decls;
use swc_ecma_utils::{collect_decls, 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
/// expressions will be replaced with the value.
pub type GlobalExprMap = Lrc<Vec<(Expr, Expr)>>;
pub type GlobalExprMap = Lrc<AHashMap<NodeIgnoringSpan<'static, Expr>, Expr>>;

/// Create a global inlining pass, which replaces expressions with the specified
/// value.
Expand Down Expand Up @@ -49,7 +48,7 @@ pub fn inline_globals2(
struct InlineGlobals {
envs: Lrc<AHashMap<JsWord, Expr>>,
globals: Lrc<AHashMap<JsWord, Expr>>,
global_exprs: GlobalExprMap,
global_exprs: Lrc<AHashMap<NodeIgnoringSpan<'static, Expr>, Expr>>,

typeofs: Lrc<AHashMap<JsWord, JsWord>>,

Expand Down Expand Up @@ -93,12 +92,12 @@ impl VisitMut for InlineGlobals {
}
}

for (key, value) in self.global_exprs.iter() {
if Ident::within_ignored_ctxt(|| key.eq_ignore_span(&*expr)) {
*expr = value.clone();
expr.visit_mut_with(self);
return;
}
if let Some(value) =
Ident::within_ignored_ctxt(|| self.global_exprs.get(&NodeIgnoringSpan::borrowed(expr)))
{
*expr = value.clone();
expr.visit_mut_with(self);
return;
}

expr.visit_mut_children_with(self);
Expand Down
45 changes: 23 additions & 22 deletions crates/swc_ecma_utils/Cargo.toml
@@ -1,16 +1,16 @@
[package]
authors = ["강동윤 <kdy1997.dev@gmail.com>"]
description = "Utilities for swc ecmascript ast nodes"
authors = ["강동윤 <kdy1997.dev@gmail.com>"]
description = "Utilities for swc ecmascript ast nodes"
documentation = "https://rustdoc.swc.rs/swc_ecma_utils/"
edition = "2021"
license = "Apache-2.0"
name = "swc_ecma_utils"
repository = "https://github.com/swc-project/swc.git"
version = "0.111.4"
edition = "2021"
license = "Apache-2.0"
name = "swc_ecma_utils"
repository = "https://github.com/swc-project/swc.git"
version = "0.111.4"

[package.metadata.docs.rs]
all-features = true
rustdoc-args = ["--cfg", "docsrs"]
[package.metadata.docs.rs]
all-features = true
rustdoc-args = ["--cfg", "docsrs"]

[lib]
bench = false
Expand All @@ -20,17 +20,18 @@ bench = false
concurrent = ["swc_common/concurrent", "rayon"]

[dependencies]
indexmap = "1.6.1"
num_cpus = "1.13.1"
once_cell = "1.10.0"
rayon = {version = "1.5.1", optional = true}
rustc-hash = "1.1.0"
swc_atoms = {version = "0.4.39", path = "../swc_atoms"}
swc_common = {version = "0.29.35", path = "../swc_common"}
swc_ecma_ast = {version = "0.98.2", path = "../swc_ecma_ast"}
swc_ecma_visit = {version = "0.84.2", path = "../swc_ecma_visit"}
tracing = "0.1.32"
unicode-id = "0.3"
indexmap = "1.6.1"
num_cpus = "1.13.1"
once_cell = "1.10.0"
rayon = { version = "1.5.1", optional = true }
rustc-hash = "1.1.0"
swc_atoms = { version = "0.4.39", path = "../swc_atoms" }
swc_common = { version = "0.29.35", path = "../swc_common" }
swc_ecma_ast = { version = "0.98.2", path = "../swc_ecma_ast" }
swc_ecma_visit = { version = "0.84.2", path = "../swc_ecma_visit" }
tracing = "0.1.32"
unicode-id = "0.3"

[dev-dependencies]
swc_ecma_parser = {version = "0.128.4", path = "../swc_ecma_parser"}
swc_ecma_parser = { version = "0.128.4", path = "../swc_ecma_parser" }
testing = { version = "0.31.37", path = "../testing" }
3 changes: 3 additions & 0 deletions crates/swc_ecma_utils/src/lib.rs
Expand Up @@ -53,6 +53,9 @@ pub mod parallel;
mod value;
pub mod var;

mod node_ignore_span;
pub use node_ignore_span::NodeIgnoringSpan;

// TODO: remove
pub struct ThisVisitor {
found: bool,
Expand Down

1 comment on commit 8bfef35

@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: 8bfef35 Previous: 30546a2 Ratio
es/full/bugs-1 299345 ns/iter (± 17554) 308691 ns/iter (± 10134) 0.97
es/full/minify/libraries/antd 1658518142 ns/iter (± 49892918) 1751724270 ns/iter (± 19340256) 0.95
es/full/minify/libraries/d3 327807506 ns/iter (± 5194022) 320656445 ns/iter (± 10562550) 1.02
es/full/minify/libraries/echarts 1215057725 ns/iter (± 40282366) 1342638358 ns/iter (± 20243237) 0.90
es/full/minify/libraries/jquery 91960181 ns/iter (± 549731) 95525255 ns/iter (± 1805152) 0.96
es/full/minify/libraries/lodash 106375783 ns/iter (± 456896) 108806262 ns/iter (± 1185221) 0.98
es/full/minify/libraries/moment 53105091 ns/iter (± 559270) 53901113 ns/iter (± 359531) 0.99
es/full/minify/libraries/react 19158962 ns/iter (± 62658) 19531701 ns/iter (± 161844) 0.98
es/full/minify/libraries/terser 245950439 ns/iter (± 2549932) 260149328 ns/iter (± 6098030) 0.95
es/full/minify/libraries/three 440744679 ns/iter (± 8535380) 483958164 ns/iter (± 9496251) 0.91
es/full/minify/libraries/typescript 3002770372 ns/iter (± 20865619) 3239695483 ns/iter (± 26966879) 0.93
es/full/minify/libraries/victory 640012996 ns/iter (± 12388989) 704109377 ns/iter (± 17862017) 0.91
es/full/minify/libraries/vue 129165728 ns/iter (± 1142075) 133287401 ns/iter (± 986763) 0.97
es/full/codegen/es3 25910 ns/iter (± 84) 25853 ns/iter (± 53) 1.00
es/full/codegen/es5 26075 ns/iter (± 61) 25937 ns/iter (± 70) 1.01
es/full/codegen/es2015 25988 ns/iter (± 54) 25959 ns/iter (± 43) 1.00
es/full/codegen/es2016 25989 ns/iter (± 49) 25946 ns/iter (± 47) 1.00
es/full/codegen/es2017 25960 ns/iter (± 43) 25901 ns/iter (± 39) 1.00
es/full/codegen/es2018 25991 ns/iter (± 38) 25927 ns/iter (± 54) 1.00
es/full/codegen/es2019 25993 ns/iter (± 86) 25935 ns/iter (± 56) 1.00
es/full/codegen/es2020 25997 ns/iter (± 32) 25966 ns/iter (± 49) 1.00
es/full/all/es3 170230389 ns/iter (± 4353255) 173812972 ns/iter (± 1776357) 0.98
es/full/all/es5 162367626 ns/iter (± 2960271) 164663680 ns/iter (± 3071591) 0.99
es/full/all/es2015 127104663 ns/iter (± 2246789) 124833688 ns/iter (± 1899515) 1.02
es/full/all/es2016 125502239 ns/iter (± 2639197) 124514332 ns/iter (± 1508106) 1.01
es/full/all/es2017 123155833 ns/iter (± 1287612) 124729030 ns/iter (± 1651546) 0.99
es/full/all/es2018 120867246 ns/iter (± 521777) 121478522 ns/iter (± 1608573) 0.99
es/full/all/es2019 119747957 ns/iter (± 535053) 120486004 ns/iter (± 1455347) 0.99
es/full/all/es2020 115060267 ns/iter (± 586869) 116051970 ns/iter (± 1550696) 0.99
es/full/parser 547728 ns/iter (± 7584) 537153 ns/iter (± 5419) 1.02
es/full/base/fixer 22383 ns/iter (± 82) 21963 ns/iter (± 29) 1.02
es/full/base/resolver_and_hygiene 81437 ns/iter (± 134) 83731 ns/iter (± 102) 0.97
serialization of ast node 127 ns/iter (± 0) 128 ns/iter (± 0) 0.99
serialization of serde 129 ns/iter (± 0) 129 ns/iter (± 0) 1
css/minify/libraries/bootstrap 28601830 ns/iter (± 106877) 28200817 ns/iter (± 128521) 1.01
css/visitor/compare/clone 2115247 ns/iter (± 11946) 2085838 ns/iter (± 7117) 1.01
css/visitor/compare/visit_mut_span 2276455 ns/iter (± 12096) 2279832 ns/iter (± 7744) 1.00
css/visitor/compare/visit_mut_span_panic 2346285 ns/iter (± 10828) 2342435 ns/iter (± 7589) 1.00
css/visitor/compare/fold_span 3062545 ns/iter (± 16462) 3074026 ns/iter (± 25106) 1.00
css/visitor/compare/fold_span_panic 3216622 ns/iter (± 19172) 3164807 ns/iter (± 23218) 1.02
css/lexer/bootstrap_5_1_3 5211661 ns/iter (± 3720) 5232821 ns/iter (± 4405) 1.00
css/lexer/foundation_6_7_4 4395364 ns/iter (± 935) 4408831 ns/iter (± 5016) 1.00
css/lexer/tailwind_3_1_1 834654 ns/iter (± 1148) 838402 ns/iter (± 203) 1.00
css/parser/bootstrap_5_1_3 22183246 ns/iter (± 122245) 22014413 ns/iter (± 56047) 1.01
css/parser/foundation_6_7_4 17696402 ns/iter (± 70946) 17472794 ns/iter (± 29193) 1.01
css/parser/tailwind_3_1_1 3343106 ns/iter (± 3407) 3358491 ns/iter (± 2643) 1.00
es/codegen/colors 326546 ns/iter (± 184055) 332969 ns/iter (± 187250) 0.98
es/codegen/large 2384809 ns/iter (± 1618657) 2448913 ns/iter (± 1638645) 0.97
es/codegen/with-parser/colors 47378 ns/iter (± 79) 47036 ns/iter (± 354) 1.01
es/codegen/with-parser/large 524955 ns/iter (± 504) 521522 ns/iter (± 1125) 1.01
es/minify/libraries/antd 1439172203 ns/iter (± 19881796) 1511602861 ns/iter (± 37090551) 0.95
es/minify/libraries/d3 273035569 ns/iter (± 3520849) 260080807 ns/iter (± 4444792) 1.05
es/minify/libraries/echarts 1123054828 ns/iter (± 6509723) 1147062634 ns/iter (± 12963991) 0.98
es/minify/libraries/jquery 80901488 ns/iter (± 554637) 81795537 ns/iter (± 1047382) 0.99
es/minify/libraries/lodash 96595032 ns/iter (± 757701) 97323688 ns/iter (± 1667899) 0.99
es/minify/libraries/moment 47098958 ns/iter (± 414826) 47194612 ns/iter (± 717192) 1.00
es/minify/libraries/react 17329651 ns/iter (± 74351) 17198354 ns/iter (± 403324) 1.01
es/minify/libraries/terser 217714706 ns/iter (± 1679547) 218759285 ns/iter (± 2874161) 1.00
es/minify/libraries/three 385596453 ns/iter (± 5194570) 395340686 ns/iter (± 10896672) 0.98
es/minify/libraries/typescript 2623010258 ns/iter (± 16925789) 2772569701 ns/iter (± 21097491) 0.95
es/minify/libraries/victory 595771859 ns/iter (± 5629070) 629499619 ns/iter (± 18721940) 0.95
es/minify/libraries/vue 118249669 ns/iter (± 656312) 118510653 ns/iter (± 1482664) 1.00
es/visitor/compare/clone 2405933 ns/iter (± 9900) 2410233 ns/iter (± 10082) 1.00
es/visitor/compare/visit_mut_span 2791889 ns/iter (± 5731) 2792034 ns/iter (± 4166) 1.00
es/visitor/compare/visit_mut_span_panic 2866705 ns/iter (± 3877) 2812923 ns/iter (± 5841) 1.02
es/visitor/compare/fold_span 4023728 ns/iter (± 13721) 3942436 ns/iter (± 8495) 1.02
es/visitor/compare/fold_span_panic 4168809 ns/iter (± 9238) 4111840 ns/iter (± 9687) 1.01
es/lexer/colors 16390 ns/iter (± 11) 16387 ns/iter (± 97) 1.00
es/lexer/angular 7843275 ns/iter (± 1870) 7899139 ns/iter (± 6672) 0.99
es/lexer/backbone 1009280 ns/iter (± 235) 1017697 ns/iter (± 1111) 0.99
es/lexer/jquery 5621941 ns/iter (± 1789) 5662511 ns/iter (± 4510) 0.99
es/lexer/jquery mobile 8634530 ns/iter (± 11006) 8704289 ns/iter (± 11368) 0.99
es/lexer/mootools 4433574 ns/iter (± 5073) 4467800 ns/iter (± 5339) 0.99
es/lexer/underscore 841935 ns/iter (± 207) 848057 ns/iter (± 319) 0.99
es/lexer/three 26192921 ns/iter (± 9469) 26457564 ns/iter (± 22485) 0.99
es/lexer/yui 4826085 ns/iter (± 1463) 4850256 ns/iter (± 9211) 1.00
es/parser/colors 30435 ns/iter (± 41) 30432 ns/iter (± 63) 1.00
es/parser/angular 15861928 ns/iter (± 168085) 15750636 ns/iter (± 183844) 1.01
es/parser/backbone 2304422 ns/iter (± 14835) 2307178 ns/iter (± 18768) 1.00
es/parser/jquery 12450525 ns/iter (± 78250) 12382419 ns/iter (± 52059) 1.01
es/parser/jquery mobile 19835223 ns/iter (± 274208) 19826027 ns/iter (± 523047) 1.00
es/parser/mootools 9503253 ns/iter (± 30766) 9558940 ns/iter (± 28436) 0.99
es/parser/underscore 1946111 ns/iter (± 12006) 1954066 ns/iter (± 11270) 1.00
es/parser/three 58103603 ns/iter (± 153101) 58755787 ns/iter (± 973058) 0.99
es/parser/yui 9576027 ns/iter (± 53556) 9582247 ns/iter (± 52432) 1.00
es/preset-env/usage/builtin_type 144692 ns/iter (± 33628) 140167 ns/iter (± 31547) 1.03
es/preset-env/usage/property 21145 ns/iter (± 92) 20773 ns/iter (± 58) 1.02
es/resolver/typescript 113645551 ns/iter (± 5103422) 121870712 ns/iter (± 1604819) 0.93
es/fixer/typescript 84540836 ns/iter (± 1776614) 94353791 ns/iter (± 1719521) 0.90
es/hygiene/typescript 179569406 ns/iter (± 1243746) 201142227 ns/iter (± 2071835) 0.89
es/resolver_with_hygiene/typescript 313393636 ns/iter (± 942748) 341786418 ns/iter (± 1770591) 0.92
es/visitor/base-perf/module_clone 75327 ns/iter (± 2026) 77733 ns/iter (± 1885) 0.97
es/visitor/base-perf/fold_empty 85001 ns/iter (± 682) 87473 ns/iter (± 1698) 0.97
es/visitor/base-perf/fold_noop_impl_all 85326 ns/iter (± 1795) 88745 ns/iter (± 1080) 0.96
es/visitor/base-perf/fold_noop_impl_vec 86640 ns/iter (± 1386) 88369 ns/iter (± 1825) 0.98
es/visitor/base-perf/boxing_boxed_clone 56 ns/iter (± 0) 56 ns/iter (± 0) 1
es/visitor/base-perf/boxing_unboxed_clone 59 ns/iter (± 0) 61 ns/iter (± 0) 0.97
es/visitor/base-perf/boxing_boxed 102 ns/iter (± 0) 103 ns/iter (± 0) 0.99
es/visitor/base-perf/boxing_unboxed 102 ns/iter (± 0) 103 ns/iter (± 0) 0.99
es/visitor/base-perf/visit_contains_this 3544 ns/iter (± 60) 3405 ns/iter (± 63) 1.04
es/base/parallel/resolver/typescript 5063032249 ns/iter (± 511148323) 5759190229 ns/iter (± 613688730) 0.88
es/base/parallel/hygiene/typescript 2131272245 ns/iter (± 26136286) 2396022358 ns/iter (± 34714357) 0.89
misc/visitors/time-complexity/time 5 94 ns/iter (± 0) 102 ns/iter (± 0) 0.92
misc/visitors/time-complexity/time 10 309 ns/iter (± 1) 328 ns/iter (± 1) 0.94
misc/visitors/time-complexity/time 15 637 ns/iter (± 4) 692 ns/iter (± 14) 0.92
misc/visitors/time-complexity/time 20 1192 ns/iter (± 9) 1259 ns/iter (± 1) 0.95
misc/visitors/time-complexity/time 40 6076 ns/iter (± 42) 6721 ns/iter (± 7) 0.90
misc/visitors/time-complexity/time 60 15292 ns/iter (± 54) 17277 ns/iter (± 42) 0.89
es/full-target/es2016 184720 ns/iter (± 813) 188276 ns/iter (± 867) 0.98
es/full-target/es2017 181839 ns/iter (± 963) 183690 ns/iter (± 425) 0.99
es/full-target/es2018 168305 ns/iter (± 912) 172279 ns/iter (± 400) 0.98
es2020_nullish_coalescing 66032 ns/iter (± 4924) 67159 ns/iter (± 216) 0.98
es2020_optional_chaining 94158 ns/iter (± 6390) 96039 ns/iter (± 314) 0.98
es2022_class_properties 92430 ns/iter (± 737) 93827 ns/iter (± 209) 0.99
es2018_object_rest_spread 69342 ns/iter (± 508) 71793 ns/iter (± 69) 0.97
es2019_optional_catch_binding 60234 ns/iter (± 523) 61646 ns/iter (± 82) 0.98
es2017_async_to_generator 61426 ns/iter (± 503) 61947 ns/iter (± 114) 0.99
es2016_exponentiation 63724 ns/iter (± 245) 64923 ns/iter (± 88) 0.98
es2015_arrow 68627 ns/iter (± 466) 70905 ns/iter (± 244) 0.97
es2015_block_scoped_fn 64884 ns/iter (± 367) 66549 ns/iter (± 178) 0.97
es2015_block_scoping 137945 ns/iter (± 8238) 153825 ns/iter (± 10659) 0.90
es2015_classes 115371 ns/iter (± 733) 117353 ns/iter (± 446) 0.98
es2015_computed_props 59785 ns/iter (± 632) 61666 ns/iter (± 123) 0.97
es2015_destructuring 115604 ns/iter (± 831) 116178 ns/iter (± 230) 1.00
es2015_duplicate_keys 62880 ns/iter (± 958) 63727 ns/iter (± 98) 0.99
es2015_parameters 77697 ns/iter (± 451) 80492 ns/iter (± 159) 0.97
es2015_fn_name 64846 ns/iter (± 443) 66630 ns/iter (± 504) 0.97
es2015_for_of 63010 ns/iter (± 274) 64817 ns/iter (± 164) 0.97
es2015_instanceof 62540 ns/iter (± 313) 63439 ns/iter (± 103) 0.99
es2015_shorthand_property 60684 ns/iter (± 477) 61473 ns/iter (± 117) 0.99
es2015_spread 59779 ns/iter (± 319) 61102 ns/iter (± 157) 0.98
es2015_sticky_regex 60968 ns/iter (± 353) 62423 ns/iter (± 119) 0.98
es2015_typeof_symbol 61402 ns/iter (± 492) 62788 ns/iter (± 181) 0.98
es/transform/baseline/base 51446 ns/iter (± 363) 52003 ns/iter (± 55) 0.99
es/transform/baseline/common_reserved_word 61515 ns/iter (± 654) 63189 ns/iter (± 148) 0.97
es/transform/baseline/common_typescript 138873 ns/iter (± 1087) 141755 ns/iter (± 4904) 0.98
es/target/es3 166020 ns/iter (± 642) 169412 ns/iter (± 264) 0.98
es/target/es2015 615392 ns/iter (± 4366) 634079 ns/iter (± 1023) 0.97
es/target/es2016 64131 ns/iter (± 299) 65270 ns/iter (± 396) 0.98
es/target/es2017 60517 ns/iter (± 277) 62067 ns/iter (± 88) 0.98
es/target/es2018 79928 ns/iter (± 333) 81779 ns/iter (± 152) 0.98
es/target/es2020 131182 ns/iter (± 696) 133440 ns/iter (± 313) 0.98
babelify-only 652566 ns/iter (± 4328) 671996 ns/iter (± 962) 0.97
parse_and_babelify_angular 43673373 ns/iter (± 593178) 45518882 ns/iter (± 1325097) 0.96
parse_and_babelify_backbone 5256650 ns/iter (± 29885) 5508886 ns/iter (± 77784) 0.95
parse_and_babelify_jquery 30514281 ns/iter (± 169413) 32856050 ns/iter (± 380941) 0.93
parse_and_babelify_jquery_mobile 51958325 ns/iter (± 902177) 56409413 ns/iter (± 652107) 0.92
parse_and_babelify_mootools 32003486 ns/iter (± 560732) 34129638 ns/iter (± 279452) 0.94
parse_and_babelify_underscore 4275778 ns/iter (± 25876) 4411226 ns/iter (± 24736) 0.97
parse_and_babelify_yui 30803607 ns/iter (± 449644) 34672887 ns/iter (± 513145) 0.89
html/minify/document/css_spec 41598979 ns/iter (± 289845) 43249988 ns/iter (± 311615) 0.96
html/minify/document/github 17586573 ns/iter (± 129692) 17786521 ns/iter (± 52098) 0.99
html/minify/document/stackoverflow 15569213 ns/iter (± 91398) 15862914 ns/iter (± 60694) 0.98
html/minify/document_fragment/css_spec 39242927 ns/iter (± 308028) 40918892 ns/iter (± 376568) 0.96
html/minify/document_fragment/github 16512462 ns/iter (± 70055) 17024321 ns/iter (± 71017) 0.97
html/minify/document_fragment/stackoverflow 15167183 ns/iter (± 101851) 15501786 ns/iter (± 105511) 0.98
html/document/visitor/compare/clone 340882 ns/iter (± 1952) 343022 ns/iter (± 1041) 0.99
html/document/visitor/compare/visit_mut_span 365353 ns/iter (± 3454) 369601 ns/iter (± 2354) 0.99
html/document/visitor/compare/visit_mut_span_panic 375652 ns/iter (± 2816) 377461 ns/iter (± 2144) 1.00
html/document/visitor/compare/fold_span 407222 ns/iter (± 2887) 414933 ns/iter (± 2235) 0.98
html/document/visitor/compare/fold_span_panic 465433 ns/iter (± 4131) 471469 ns/iter (± 1478) 0.99
html/document_fragment/visitor/compare/clone 342957 ns/iter (± 3119) 343173 ns/iter (± 2388) 1.00
html/document_fragment/visitor/compare/visit_mut_span 368132 ns/iter (± 3225) 377504 ns/iter (± 2276) 0.98
html/document_fragment/visitor/compare/visit_mut_span_panic 370645 ns/iter (± 2833) 377498 ns/iter (± 1505) 0.98
html/document_fragment/visitor/compare/fold_span 403340 ns/iter (± 2891) 407564 ns/iter (± 1531) 0.99
html/document_fragment/visitor/compare/fold_span_panic 460615 ns/iter (± 3561) 470600 ns/iter (± 1441) 0.98
html/lexer/css_2021_spec 15476856 ns/iter (± 154162) 15652220 ns/iter (± 23336) 0.99
html/lexer/github_com_17_05_2022 5934808 ns/iter (± 33332) 6060530 ns/iter (± 18412) 0.98
html/lexer/stackoverflow_com_17_05_2022 5512959 ns/iter (± 34989) 5648385 ns/iter (± 10635) 0.98
html/parser/parser_document/css_2021_spec 25270477 ns/iter (± 381864) 26444298 ns/iter (± 299192) 0.96
html/parser/parser_document/github_com_17_05_2022 8760601 ns/iter (± 110403) 8917118 ns/iter (± 14159) 0.98
html/parser/parser_document/stackoverflow_com_17_05_2022 7588081 ns/iter (± 49870) 7875958 ns/iter (± 6379) 0.96
html/parser/parser_document_fragment/css_2021_spec 25656646 ns/iter (± 162971) 26572406 ns/iter (± 282722) 0.97
html/parser/parser_document_fragment/github_com_17_05_2022 8739650 ns/iter (± 34148) 8932844 ns/iter (± 17120) 0.98
html/parser/parser_document_fragment/stackoverflow_com_17_05_2022 7716362 ns/iter (± 63272) 7874040 ns/iter (± 8603) 0.98

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

Please sign in to comment.