Skip to content

Commit

Permalink
feat(es/transforms): Support namespace imports from const_modules (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
magic-akari committed Mar 6, 2023
1 parent b7cef34 commit 3cb03d5
Show file tree
Hide file tree
Showing 2 changed files with 142 additions and 56 deletions.
155 changes: 99 additions & 56 deletions crates/swc_ecma_transforms_optimization/src/const_modules.rs
@@ -1,20 +1,28 @@
use std::{collections::HashMap, sync::Arc};
use std::{
collections::{HashMap, HashSet},
sync::Arc,
};

use dashmap::DashMap;
use once_cell::sync::Lazy;
use rustc_hash::FxHashMap;
use swc_atoms::JsWord;
use swc_common::{errors::HANDLER, sync::Lrc, util::move_map::MoveMap, FileName, SourceMap};
use swc_common::{
errors::HANDLER,
sync::Lrc,
util::{move_map::MoveMap, take::Take},
FileName, SourceMap,
};
use swc_ecma_ast::*;
use swc_ecma_parser::parse_file_as_expr;
use swc_ecma_utils::drop_span;
use swc_ecma_visit::{noop_fold_type, Fold, FoldWith};
use swc_ecma_visit::{as_folder, noop_visit_mut_type, Fold, VisitMut, VisitMutWith};

pub fn const_modules(
cm: Lrc<SourceMap>,
globals: FxHashMap<JsWord, FxHashMap<JsWord, String>>,
) -> impl Fold {
ConstModules {
as_folder(ConstModules {
globals: globals
.into_iter()
.map(|(src, map)| {
Expand All @@ -31,7 +39,7 @@ pub fn const_modules(
})
.collect(),
scope: Default::default(),
}
})
}

fn parse_option(cm: &SourceMap, name: &str, src: String) -> Arc<Expr> {
Expand Down Expand Up @@ -77,79 +85,114 @@ struct ConstModules {

#[derive(Default)]
struct Scope {
namespace: HashSet<Id>,
imported: HashMap<JsWord, Arc<Expr>>,
}

/// TODO: VisitMut
impl Fold for ConstModules {
noop_fold_type!();
impl VisitMut for ConstModules {
noop_visit_mut_type!();

fn fold_module_items(&mut self, items: Vec<ModuleItem>) -> Vec<ModuleItem> {
items.move_flat_map(|item| match item {
fn visit_mut_module_items(&mut self, n: &mut Vec<ModuleItem>) {
*n = n.take().move_flat_map(|item| match item {
ModuleItem::ModuleDecl(ModuleDecl::Import(import)) => {
let entry = self.globals.get(&import.src.value);

if let Some(entry) = entry {
for s in &import.specifiers {
let i = match *s {
ImportSpecifier::Named(ref s) => &s.local,
ImportSpecifier::Namespace(..) => unimplemented!(
"const modules does not support namespace import yet"
),
match *s {
ImportSpecifier::Named(ref s) => {
let imported = s
.imported
.as_ref()
.map(|m| match m {
ModuleExportName::Ident(id) => &id.sym,
ModuleExportName::Str(s) => &s.value,
})
.unwrap_or(&s.local.sym);
let value = entry.get(imported).cloned().unwrap_or_else(|| {
panic!(
"The requested const_module `{}` does not provide an \
export named `{}`",
import.src.value, imported
)
});
self.scope.imported.insert(imported.clone(), value);
}
ImportSpecifier::Namespace(ref s) => {
self.scope.namespace.insert(s.local.to_id());
}
ImportSpecifier::Default(..) => {
panic!("const_modules does not support default import")
panic!("const_module does not support default import")
}
};
let value = entry.get(&i.sym).cloned().unwrap_or_else(|| {
panic!(
"const_modules: {} does not contain flags named {}",
import.src.value, i.sym
)
});
self.scope.imported.insert(i.sym.clone(), value);
}

None
} else {
Some(ModuleItem::ModuleDecl(ModuleDecl::Import(import)))
}
}
_ => Some(item.fold_with(self)),
})
_ => Some(item),
});

if self.scope.imported.is_empty() && self.scope.namespace.is_empty() {
return;
}

n.iter_mut().for_each(|item| {
if let ModuleItem::Stmt(stmt) = item {
stmt.visit_mut_with(self);
}
});
}

fn fold_expr(&mut self, expr: Expr) -> Expr {
let expr = match expr {
Expr::Member(expr) => Expr::Member(MemberExpr {
obj: expr.obj.fold_with(self),
prop: if let MemberProp::Computed(c) = expr.prop {
MemberProp::Computed(c.fold_with(self))
} else {
expr.prop
},
..expr
}),

Expr::SuperProp(expr) => Expr::SuperProp(SuperPropExpr {
prop: if let SuperProp::Computed(c) = expr.prop {
SuperProp::Computed(c.fold_with(self))
} else {
expr.prop
},
..expr
}),
_ => expr.fold_children_with(self),
};
match expr {
Expr::Ident(Ident { ref sym, .. }) => {
// It's ok because we don't recurse into member expressions.
fn visit_mut_expr(&mut self, n: &mut Expr) {
match n {
Expr::Ident(ref id @ Ident { ref sym, .. }) => {
if let Some(value) = self.scope.imported.get(sym) {
(**value).clone()
} else {
expr
*n = (**value).clone();
return;
}

if let Some(..) = self.scope.namespace.get(&id.to_id()) {
panic!(
"The const_module namespace `{}` cannot be used without member accessor",
sym
)
}
}
_ => expr,
}
Expr::Member(MemberExpr { obj, prop, .. }) if obj.is_ident() => {
let member_obj = obj.as_ident().unwrap();

if self.scope.namespace.contains(&member_obj.to_id()) {
let module_name = &member_obj.sym;

let imported_name = match prop {
MemberProp::Ident(ref id) => &id.sym,
MemberProp::Computed(ref p) => match &*p.expr {
Expr::Lit(Lit::Str(s)) => &s.value,
_ => return,
},
MemberProp::PrivateName(..) => return,
};

let value = self
.globals
.get(module_name)
.and_then(|entry| entry.get(imported_name))
.unwrap_or_else(|| {
panic!(
"The requested const_module `{}` does not provide an export named \
`{}`",
module_name, imported_name
)
});

*n = (**value).clone();
}
}
e => {
e.visit_mut_children_with(self);
}
};
}
}
43 changes: 43 additions & 0 deletions crates/swc_ecma_transforms_optimization/tests/const_modules.rs
Expand Up @@ -33,6 +33,23 @@ test!(
}"#
);

test!(
::swc_ecma_parser::Syntax::default(),
|tester| tr(tester, &[("@ember/env-flags", &[("DEBUG", "true")])]),
imports_hoisted,
r#"
if (DEBUG) {
console.log('Foo!');
}
import { DEBUG } from '@ember/env-flags';
"#,
r#"
if (true) {
console.log('Foo!');
}"#
);

test!(
::swc_ecma_parser::Syntax::default(),
|tester| tr(
Expand Down Expand Up @@ -73,3 +90,29 @@ if (false) {
}
"
);

test!(
::swc_ecma_parser::Syntax::default(),
|tester| tr(tester, &[("foo", &[("bar", "true")])]),
namespace_import,
r#"
import * as foo from 'foo';
console.log(foo.bar)
"#,
r#"
console.log(true);
"#
);

test!(
::swc_ecma_parser::Syntax::default(),
|tester| tr(tester, &[("foo", &[("bar", "true")])]),
namespace_import_computed,
r#"
import * as foo from 'foo';
console.log(foo["bar"])
"#,
r#"
console.log(true);
"#
);

1 comment on commit 3cb03d5

@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: 3cb03d5 Previous: b46a724 Ratio
es/full/bugs-1 302642 ns/iter (± 10705) 301969 ns/iter (± 12506) 1.00
es/full/minify/libraries/antd 1612799971 ns/iter (± 38232592) 1751798235 ns/iter (± 27423284) 0.92
es/full/minify/libraries/d3 294701273 ns/iter (± 10371328) 313781442 ns/iter (± 7251243) 0.94
es/full/minify/libraries/echarts 1220544598 ns/iter (± 10238645) 1343273400 ns/iter (± 17174041) 0.91
es/full/minify/libraries/jquery 89035530 ns/iter (± 759573) 94171134 ns/iter (± 857791) 0.95
es/full/minify/libraries/lodash 103569973 ns/iter (± 1221114) 108475327 ns/iter (± 1225203) 0.95
es/full/minify/libraries/moment 51862134 ns/iter (± 575722) 54227541 ns/iter (± 532585) 0.96
es/full/minify/libraries/react 18988006 ns/iter (± 209149) 19576127 ns/iter (± 205698) 0.97
es/full/minify/libraries/terser 243960118 ns/iter (± 3097761) 257971818 ns/iter (± 4913641) 0.95
es/full/minify/libraries/three 432753415 ns/iter (± 12686145) 468794776 ns/iter (± 9074154) 0.92
es/full/minify/libraries/typescript 3099021986 ns/iter (± 18706285) 3273840701 ns/iter (± 17171922) 0.95
es/full/minify/libraries/victory 636729613 ns/iter (± 16207071) 715907598 ns/iter (± 15540915) 0.89
es/full/minify/libraries/vue 128045185 ns/iter (± 1961210) 134690067 ns/iter (± 1580974) 0.95
es/full/codegen/es3 26061 ns/iter (± 710) 25968 ns/iter (± 42) 1.00
es/full/codegen/es5 26150 ns/iter (± 210) 25926 ns/iter (± 37) 1.01
es/full/codegen/es2015 25708 ns/iter (± 258) 26010 ns/iter (± 40) 0.99
es/full/codegen/es2016 25664 ns/iter (± 300) 25957 ns/iter (± 47) 0.99
es/full/codegen/es2017 25360 ns/iter (± 156) 25932 ns/iter (± 40) 0.98
es/full/codegen/es2018 25411 ns/iter (± 161) 25979 ns/iter (± 49) 0.98
es/full/codegen/es2019 25344 ns/iter (± 215) 25923 ns/iter (± 65) 0.98
es/full/codegen/es2020 25491 ns/iter (± 185) 26000 ns/iter (± 64) 0.98
es/full/all/es3 172924970 ns/iter (± 2709758) 172889002 ns/iter (± 2697826) 1.00
es/full/all/es5 165310334 ns/iter (± 2704952) 165816529 ns/iter (± 3393576) 1.00
es/full/all/es2015 122852181 ns/iter (± 2305702) 130257684 ns/iter (± 1324826) 0.94
es/full/all/es2016 122113708 ns/iter (± 838468) 126256182 ns/iter (± 1409777) 0.97
es/full/all/es2017 121577030 ns/iter (± 1604742) 125588113 ns/iter (± 1874463) 0.97
es/full/all/es2018 119835432 ns/iter (± 1348138) 121612520 ns/iter (± 1200872) 0.99
es/full/all/es2019 118317330 ns/iter (± 1041532) 120867126 ns/iter (± 474262) 0.98
es/full/all/es2020 114526703 ns/iter (± 1343521) 115738719 ns/iter (± 1058748) 0.99
es/full/parser 514069 ns/iter (± 8499) 549494 ns/iter (± 9269) 0.94
es/full/base/fixer 21098 ns/iter (± 137) 22174 ns/iter (± 30) 0.95
es/full/base/resolver_and_hygiene 79765 ns/iter (± 895) 82033 ns/iter (± 119) 0.97
serialization of ast node 140 ns/iter (± 0) 145 ns/iter (± 0) 0.97
serialization of serde 130 ns/iter (± 1) 134 ns/iter (± 0) 0.97
css/minify/libraries/bootstrap 27151666 ns/iter (± 394902) 28270713 ns/iter (± 100080) 0.96
css/visitor/compare/clone 2062705 ns/iter (± 23972) 2076503 ns/iter (± 6708) 0.99
css/visitor/compare/visit_mut_span 2195989 ns/iter (± 13398) 2257719 ns/iter (± 5225) 0.97
css/visitor/compare/visit_mut_span_panic 2239782 ns/iter (± 16684) 2306138 ns/iter (± 5252) 0.97
css/visitor/compare/fold_span 2979638 ns/iter (± 37605) 3065510 ns/iter (± 17273) 0.97
css/visitor/compare/fold_span_panic 3104331 ns/iter (± 23291) 3169703 ns/iter (± 17924) 0.98
css/lexer/bootstrap_5_1_3 5096235 ns/iter (± 43559) 5200382 ns/iter (± 4729) 0.98
css/lexer/foundation_6_7_4 4266591 ns/iter (± 14239) 4378127 ns/iter (± 3130) 0.97
css/lexer/tailwind_3_1_1 814996 ns/iter (± 7615) 832817 ns/iter (± 388) 0.98
css/parser/bootstrap_5_1_3 21407327 ns/iter (± 231436) 21699439 ns/iter (± 71074) 0.99
css/parser/foundation_6_7_4 16887347 ns/iter (± 113637) 17317450 ns/iter (± 47883) 0.98
css/parser/tailwind_3_1_1 3214902 ns/iter (± 33376) 3321186 ns/iter (± 3494) 0.97
es/codegen/colors 336323 ns/iter (± 184164) 327608 ns/iter (± 184706) 1.03
es/codegen/large 1186654 ns/iter (± 611595) 1237281 ns/iter (± 639656) 0.96
es/codegen/with-parser/colors 47451 ns/iter (± 489) 47537 ns/iter (± 322) 1.00
es/codegen/with-parser/large 504458 ns/iter (± 5389) 523945 ns/iter (± 1842) 0.96
es/minify/libraries/antd 1450035046 ns/iter (± 19205491) 1529707732 ns/iter (± 17580393) 0.95
es/minify/libraries/d3 246101639 ns/iter (± 1896423) 264494012 ns/iter (± 8042598) 0.93
es/minify/libraries/echarts 1043039253 ns/iter (± 14789632) 1172131191 ns/iter (± 9081575) 0.89
es/minify/libraries/jquery 77451592 ns/iter (± 727196) 81395953 ns/iter (± 917524) 0.95
es/minify/libraries/lodash 93728905 ns/iter (± 1102613) 96915309 ns/iter (± 1088833) 0.97
es/minify/libraries/moment 45190756 ns/iter (± 501699) 47228591 ns/iter (± 553359) 0.96
es/minify/libraries/react 16885591 ns/iter (± 86451) 17420447 ns/iter (± 121832) 0.97
es/minify/libraries/terser 203439717 ns/iter (± 1563291) 223056445 ns/iter (± 3429455) 0.91
es/minify/libraries/three 353122752 ns/iter (± 6923578) 394298362 ns/iter (± 5811758) 0.90
es/minify/libraries/typescript 2668263909 ns/iter (± 22285770) 2797524692 ns/iter (± 20328220) 0.95
es/minify/libraries/victory 549458957 ns/iter (± 12877441) 611440182 ns/iter (± 7778733) 0.90
es/minify/libraries/vue 113398948 ns/iter (± 2064874) 120578796 ns/iter (± 1235553) 0.94
es/visitor/compare/clone 2324261 ns/iter (± 39150) 2393573 ns/iter (± 18023) 0.97
es/visitor/compare/visit_mut_span 2723363 ns/iter (± 26413) 2745443 ns/iter (± 5191) 0.99
es/visitor/compare/visit_mut_span_panic 2741744 ns/iter (± 14222) 2845713 ns/iter (± 5390) 0.96
es/visitor/compare/fold_span 3796496 ns/iter (± 28809) 3895450 ns/iter (± 13702) 0.97
es/visitor/compare/fold_span_panic 3971380 ns/iter (± 20525) 4062295 ns/iter (± 14958) 0.98
es/lexer/colors 15862 ns/iter (± 155) 16397 ns/iter (± 17) 0.97
es/lexer/angular 7518250 ns/iter (± 61958) 7852002 ns/iter (± 4679) 0.96
es/lexer/backbone 970188 ns/iter (± 6827) 1014643 ns/iter (± 4156) 0.96
es/lexer/jquery 5420626 ns/iter (± 24652) 5631955 ns/iter (± 5400) 0.96
es/lexer/jquery mobile 8263951 ns/iter (± 40034) 8651792 ns/iter (± 9776) 0.96
es/lexer/mootools 4239423 ns/iter (± 30481) 4437116 ns/iter (± 4443) 0.96
es/lexer/underscore 808763 ns/iter (± 7245) 844841 ns/iter (± 914) 0.96
es/lexer/three 25261882 ns/iter (± 238342) 26275599 ns/iter (± 35692) 0.96
es/lexer/yui 4646566 ns/iter (± 22655) 4837696 ns/iter (± 7311) 0.96
es/parser/colors 29441 ns/iter (± 502) 30627 ns/iter (± 59) 0.96
es/parser/angular 14999639 ns/iter (± 198798) 15810238 ns/iter (± 132985) 0.95
es/parser/backbone 2197296 ns/iter (± 20797) 2290466 ns/iter (± 12530) 0.96
es/parser/jquery 11793229 ns/iter (± 88452) 12372636 ns/iter (± 153009) 0.95
es/parser/jquery mobile 18388686 ns/iter (± 214116) 19775335 ns/iter (± 314485) 0.93
es/parser/mootools 9176881 ns/iter (± 61630) 9460962 ns/iter (± 30855) 0.97
es/parser/underscore 1867640 ns/iter (± 19513) 1950515 ns/iter (± 13230) 0.96
es/parser/three 53417744 ns/iter (± 883432) 59299201 ns/iter (± 336700) 0.90
es/parser/yui 9141837 ns/iter (± 78126) 9579154 ns/iter (± 68454) 0.95
es/preset-env/usage/builtin_type 138451 ns/iter (± 31046) 138738 ns/iter (± 30681) 1.00
es/preset-env/usage/property 20392 ns/iter (± 142) 21488 ns/iter (± 69) 0.95
es/resolver/typescript 120586167 ns/iter (± 3683701) 123410776 ns/iter (± 2112328) 0.98
es/fixer/typescript 93270408 ns/iter (± 6512871) 95167706 ns/iter (± 907840) 0.98
es/hygiene/typescript 202236549 ns/iter (± 2228485) 206372064 ns/iter (± 1689490) 0.98
es/resolver_with_hygiene/typescript 332638107 ns/iter (± 2957426) 343731229 ns/iter (± 6063836) 0.97
es/visitor/base-perf/module_clone 73725 ns/iter (± 1247) 75834 ns/iter (± 1833) 0.97
es/visitor/base-perf/fold_empty 82890 ns/iter (± 1643) 85852 ns/iter (± 1480) 0.97
es/visitor/base-perf/fold_noop_impl_all 83383 ns/iter (± 1468) 85756 ns/iter (± 1594) 0.97
es/visitor/base-perf/fold_noop_impl_vec 84387 ns/iter (± 1676) 85900 ns/iter (± 1568) 0.98
es/visitor/base-perf/boxing_boxed_clone 54 ns/iter (± 0) 56 ns/iter (± 0) 0.96
es/visitor/base-perf/boxing_unboxed_clone 57 ns/iter (± 0) 59 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 100 ns/iter (± 0) 102 ns/iter (± 0) 0.98
es/visitor/base-perf/visit_contains_this 3484 ns/iter (± 55) 3500 ns/iter (± 45) 1.00
es/base/parallel/resolver/typescript 6198225863 ns/iter (± 466766715) 5277963096 ns/iter (± 507182374) 1.17
es/base/parallel/hygiene/typescript 2366510470 ns/iter (± 20646089) 2393923370 ns/iter (± 34931043) 0.99
misc/visitors/time-complexity/time 5 101 ns/iter (± 1) 102 ns/iter (± 0) 0.99
misc/visitors/time-complexity/time 10 313 ns/iter (± 3) 334 ns/iter (± 0) 0.94
misc/visitors/time-complexity/time 15 636 ns/iter (± 5) 677 ns/iter (± 33) 0.94
misc/visitors/time-complexity/time 20 1169 ns/iter (± 6) 1207 ns/iter (± 1) 0.97
misc/visitors/time-complexity/time 40 6471 ns/iter (± 41) 6750 ns/iter (± 42) 0.96
misc/visitors/time-complexity/time 60 16718 ns/iter (± 153) 17266 ns/iter (± 18) 0.97
es/full-target/es2016 182226 ns/iter (± 1271) 187379 ns/iter (± 675) 0.97
es/full-target/es2017 175634 ns/iter (± 1513) 182531 ns/iter (± 1037) 0.96
es/full-target/es2018 165791 ns/iter (± 1960) 171386 ns/iter (± 814) 0.97
es2020_nullish_coalescing 64770 ns/iter (± 989) 66766 ns/iter (± 1972) 0.97
es2020_optional_chaining 92853 ns/iter (± 9063) 95549 ns/iter (± 3330) 0.97
es2022_class_properties 91011 ns/iter (± 787) 93265 ns/iter (± 179) 0.98
es2018_object_rest_spread 68874 ns/iter (± 719) 71481 ns/iter (± 92) 0.96
es2019_optional_catch_binding 59121 ns/iter (± 352) 61170 ns/iter (± 155) 0.97
es2017_async_to_generator 59262 ns/iter (± 507) 61452 ns/iter (± 86) 0.96
es2016_exponentiation 63071 ns/iter (± 409) 65241 ns/iter (± 130) 0.97
es2015_arrow 68766 ns/iter (± 602) 70424 ns/iter (± 239) 0.98
es2015_block_scoped_fn 65982 ns/iter (± 358) 66661 ns/iter (± 251) 0.99
es2015_block_scoping 136077 ns/iter (± 5992) 155260 ns/iter (± 8971) 0.88
es2015_classes 113111 ns/iter (± 1298) 118315 ns/iter (± 382) 0.96
es2015_computed_props 60049 ns/iter (± 306) 61134 ns/iter (± 97) 0.98
es2015_destructuring 115005 ns/iter (± 598) 116959 ns/iter (± 2892) 0.98
es2015_duplicate_keys 62462 ns/iter (± 362) 63275 ns/iter (± 96) 0.99
es2015_parameters 77055 ns/iter (± 567) 79736 ns/iter (± 136) 0.97
es2015_fn_name 64123 ns/iter (± 635) 66449 ns/iter (± 549) 0.96
es2015_for_of 62050 ns/iter (± 368) 64060 ns/iter (± 82) 0.97
es2015_instanceof 61264 ns/iter (± 592) 63243 ns/iter (± 79) 0.97
es2015_shorthand_property 59805 ns/iter (± 635) 61145 ns/iter (± 114) 0.98
es2015_spread 59252 ns/iter (± 408) 60988 ns/iter (± 123) 0.97
es2015_sticky_regex 61004 ns/iter (± 465) 62310 ns/iter (± 76) 0.98
es2015_typeof_symbol 60891 ns/iter (± 230) 62163 ns/iter (± 156) 0.98
es/transform/baseline/base 49803 ns/iter (± 225) 51514 ns/iter (± 79) 0.97
es/transform/baseline/common_reserved_word 60410 ns/iter (± 452) 62367 ns/iter (± 94) 0.97
es/transform/baseline/common_typescript 142229 ns/iter (± 9374) 142570 ns/iter (± 4936) 1.00
es/target/es3 164701 ns/iter (± 1078) 169998 ns/iter (± 291) 0.97
es/target/es2015 614470 ns/iter (± 6333) 633478 ns/iter (± 1322) 0.97
es/target/es2016 63105 ns/iter (± 441) 65008 ns/iter (± 116) 0.97
es/target/es2017 59768 ns/iter (± 410) 61478 ns/iter (± 119) 0.97
es/target/es2018 78265 ns/iter (± 590) 81448 ns/iter (± 147) 0.96
es/target/es2020 128122 ns/iter (± 806) 132781 ns/iter (± 371) 0.96
babelify-only 665741 ns/iter (± 4187) 672047 ns/iter (± 668) 0.99
parse_and_babelify_angular 41399554 ns/iter (± 608711) 44925710 ns/iter (± 1125470) 0.92
parse_and_babelify_backbone 5263440 ns/iter (± 50514) 5491925 ns/iter (± 49949) 0.96
parse_and_babelify_jquery 31332753 ns/iter (± 399736) 33364116 ns/iter (± 390820) 0.94
parse_and_babelify_jquery_mobile 54876973 ns/iter (± 793573) 57143567 ns/iter (± 597913) 0.96
parse_and_babelify_mootools 32122155 ns/iter (± 319242) 34900978 ns/iter (± 744851) 0.92
parse_and_babelify_underscore 4308479 ns/iter (± 35923) 4353258 ns/iter (± 27862) 0.99
parse_and_babelify_yui 31788921 ns/iter (± 823659) 33270099 ns/iter (± 657602) 0.96
html/minify/document/css_spec 40773894 ns/iter (± 460477) 42333837 ns/iter (± 275803) 0.96
html/minify/document/github 16950373 ns/iter (± 182289) 17653095 ns/iter (± 77116) 0.96
html/minify/document/stackoverflow 15197587 ns/iter (± 99812) 15740290 ns/iter (± 37108) 0.97
html/minify/document_fragment/css_spec 38453696 ns/iter (± 478418) 40942842 ns/iter (± 366766) 0.94
html/minify/document_fragment/github 16166762 ns/iter (± 122490) 16913571 ns/iter (± 80607) 0.96
html/minify/document_fragment/stackoverflow 14790922 ns/iter (± 92789) 15346747 ns/iter (± 64081) 0.96
html/document/visitor/compare/clone 328499 ns/iter (± 2158) 334340 ns/iter (± 1972) 0.98
html/document/visitor/compare/visit_mut_span 353611 ns/iter (± 2672) 361875 ns/iter (± 2001) 0.98
html/document/visitor/compare/visit_mut_span_panic 362273 ns/iter (± 3018) 369209 ns/iter (± 1682) 0.98
html/document/visitor/compare/fold_span 388695 ns/iter (± 3197) 400115 ns/iter (± 1819) 0.97
html/document/visitor/compare/fold_span_panic 444823 ns/iter (± 4345) 462808 ns/iter (± 1480) 0.96
html/document_fragment/visitor/compare/clone 328641 ns/iter (± 2762) 340485 ns/iter (± 1388) 0.97
html/document_fragment/visitor/compare/visit_mut_span 351934 ns/iter (± 2784) 368441 ns/iter (± 1618) 0.96
html/document_fragment/visitor/compare/visit_mut_span_panic 359402 ns/iter (± 3957) 379710 ns/iter (± 1568) 0.95
html/document_fragment/visitor/compare/fold_span 393490 ns/iter (± 4175) 400024 ns/iter (± 2509) 0.98
html/document_fragment/visitor/compare/fold_span_panic 448153 ns/iter (± 3163) 462412 ns/iter (± 1484) 0.97
html/lexer/css_2021_spec 15294222 ns/iter (± 211897) 15613095 ns/iter (± 13951) 0.98
html/lexer/github_com_17_05_2022 5867372 ns/iter (± 57988) 6046104 ns/iter (± 3620) 0.97
html/lexer/stackoverflow_com_17_05_2022 5518814 ns/iter (± 36523) 5664583 ns/iter (± 8492) 0.97
html/parser/parser_document/css_2021_spec 24519203 ns/iter (± 559827) 25934370 ns/iter (± 228497) 0.95
html/parser/parser_document/github_com_17_05_2022 8554851 ns/iter (± 96192) 8765127 ns/iter (± 4967) 0.98
html/parser/parser_document/stackoverflow_com_17_05_2022 7465730 ns/iter (± 106594) 7762357 ns/iter (± 5988) 0.96
html/parser/parser_document_fragment/css_2021_spec 24567341 ns/iter (± 161710) 26042159 ns/iter (± 215662) 0.94
html/parser/parser_document_fragment/github_com_17_05_2022 8459223 ns/iter (± 34075) 8762878 ns/iter (± 16592) 0.97
html/parser/parser_document_fragment/stackoverflow_com_17_05_2022 7422567 ns/iter (± 58443) 7726509 ns/iter (± 11529) 0.96

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

Please sign in to comment.