Skip to content

Commit

Permalink
feat(es/transforms): Add an option to drop unused imports (#6962)
Browse files Browse the repository at this point in the history
  • Loading branch information
nissy-dev committed Mar 5, 2023
1 parent a82dd99 commit 67d0a89
Show file tree
Hide file tree
Showing 8 changed files with 175 additions and 11 deletions.
67 changes: 57 additions & 10 deletions crates/swc/src/config/mod.rs
Expand Up @@ -67,7 +67,11 @@ use swc_ecma_transforms::{
Assumptions,
};
use swc_ecma_transforms_compat::es2015::regenerator;
use swc_ecma_transforms_optimization::{inline_globals2, GlobalExprMap};
use swc_ecma_transforms_optimization::{
inline_globals2,
simplify::{dce::Config as DceConfig, Config as SimplifyConfig},
GlobalExprMap,
};
use swc_ecma_visit::{Fold, VisitMutWith};

pub use crate::plugin::PluginConfig;
Expand Down Expand Up @@ -451,10 +455,32 @@ impl Options {
}
};

let enable_simplifier = optimizer
.as_ref()
.map(|v| v.simplify.into_bool())
.unwrap_or_default();
let simplifier_pass = {
if let Some(ref opts) = optimizer.as_ref().and_then(|o| o.simplify) {
match opts {
SimplifyOption::Bool(allow_simplify) => {
if *allow_simplify {
Either::Left(simplifier(top_level_mark, Default::default()))
} else {
Either::Right(noop())
}
}
SimplifyOption::Json(cfg) => Either::Left(simplifier(
top_level_mark,
SimplifyConfig {
dce: DceConfig {
preserve_imports_with_side_effects: cfg
.preserve_imports_with_side_effects,
..Default::default()
},
..Default::default()
},
)),
}
} else {
Either::Right(noop())
}
};

let optimization = {
if let Some(opts) = optimizer.and_then(|o| o.globals) {
Expand All @@ -471,10 +497,7 @@ impl Options {
const_modules,
optimization,
Optional::new(export_default_from(), syntax.export_default_from()),
Optional::new(
simplifier(top_level_mark, Default::default()),
enable_simplifier
),
simplifier_pass,
json_parse_pass
);

Expand Down Expand Up @@ -1478,12 +1501,36 @@ pub struct OptimizerConfig {
pub globals: Option<GlobalPassOption>,

#[serde(default)]
pub simplify: BoolConfig<true>,
pub simplify: Option<SimplifyOption>,

#[serde(default)]
pub jsonify: Option<JsonifyOption>,
}

#[derive(Debug, Copy, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum SimplifyOption {
Bool(bool),
Json(SimplifyJsonOption),
}

impl Default for SimplifyOption {
fn default() -> Self {
SimplifyOption::Bool(true)
}
}

#[derive(Debug, Default, Clone, Copy, Serialize, Deserialize)]
#[serde(deny_unknown_fields, rename_all = "camelCase")]
pub struct SimplifyJsonOption {
#[serde(default = "default_preserve_imports_with_side_effects")]
pub preserve_imports_with_side_effects: bool,
}

fn default_preserve_imports_with_side_effects() -> bool {
true
}

#[derive(Debug, Default, Clone, Copy, Serialize, Deserialize)]
#[serde(deny_unknown_fields, rename_all = "camelCase")]
pub struct JsonifyOption {
Expand Down
16 changes: 16 additions & 0 deletions crates/swc/tests/fixture/issues-6xxx/6771/input/.swcrc
@@ -0,0 +1,16 @@
{
"jsc": {
"transform": {
"optimizer": {
"simplify": {
"preserveImportsWithSideEffects": false
},
"globals": {
"envs": {
"NODE_ENV_ALT": "true"
}
}
}
}
}
}
1 change: 1 addition & 0 deletions crates/swc/tests/fixture/issues-6xxx/6771/input/index.js
@@ -0,0 +1 @@
import path from 'path';
Empty file.
1 change: 1 addition & 0 deletions crates/swc_bundler/src/bundler/optimize.rs
Expand Up @@ -26,6 +26,7 @@ where
module_mark: None,
top_level: true,
top_retain: Default::default(),
preserve_imports_with_side_effects: true,
},
self.unresolved_mark,
)));
Expand Down
1 change: 1 addition & 0 deletions crates/swc_ecma_minifier/src/lib.rs
Expand Up @@ -304,6 +304,7 @@ fn perform_dce(m: &mut Program, options: &CompressOptions, extra: &ExtraOptions)
module_mark: None,
top_level: options.top_level(),
top_retain: options.top_retain.clone(),
preserve_imports_with_side_effects: true,
},
extra.unresolved_mark,
);
Expand Down
24 changes: 23 additions & 1 deletion crates/swc_ecma_transforms_optimization/src/simplify/dce/mod.rs
Expand Up @@ -63,6 +63,9 @@ pub struct Config {

/// Declarations with a symbol in this set will be preserved.
pub top_retain: Vec<JsWord>,

/// If false, imports with side effects will be removed.
pub preserve_imports_with_side_effects: bool,
}

impl Default for Config {
Expand All @@ -71,6 +74,7 @@ impl Default for Config {
module_mark: Default::default(),
top_level: true,
top_retain: Default::default(),
preserve_imports_with_side_effects: true,
}
}
}
Expand Down Expand Up @@ -911,7 +915,25 @@ impl VisitMut for TreeShaker {
}

fn visit_mut_module_item(&mut self, n: &mut ModuleItem) {
n.visit_mut_children_with(self);
match n {
ModuleItem::ModuleDecl(ModuleDecl::Import(i)) => {
let is_for_side_effect = i.specifiers.is_empty();

i.visit_mut_with(self);

if !self.config.preserve_imports_with_side_effects
&& !is_for_side_effect
&& i.specifiers.is_empty()
{
debug!("Dropping an import because it's not used");
self.changed = true;
*n = ModuleItem::Stmt(Stmt::Empty(EmptyStmt { span: DUMMY_SP }));
}
}
_ => {
n.visit_mut_children_with(self);
}
}
debug_assert_valid(n);
}

Expand Down
@@ -0,0 +1,76 @@
use swc_common::{chain, pass::Repeat, Mark};
use swc_ecma_parser::{EsConfig, Syntax};
use swc_ecma_transforms_base::resolver;
use swc_ecma_transforms_optimization::simplify::dce::{dce, Config};
use swc_ecma_transforms_testing::test;
use swc_ecma_visit::Fold;

fn tr() -> impl Fold {
Repeat::new(dce(
Config {
top_level: true,
preserve_imports_with_side_effects: false,
..Default::default()
},
Mark::new(),
))
}

macro_rules! to {
($name:ident, $src:expr, $expected:expr) => {
test!(
Syntax::Es(EsConfig {
decorators: true,
..Default::default()
}),
|_| chain!(resolver(Mark::new(), Mark::new(), false), tr()),
$name,
$src,
$expected
);
};
}

macro_rules! optimized_out {
($name:ident, $src:expr) => {
to!($name, $src, "");
};
}

macro_rules! noop {
($name:ident, $src:expr) => {
to!($name, $src, $src);
};
}

to!(
single_pass,
"
const a = 1;
if (a) {
const b = 2;
}
",
"
const a = 1;
if (a) {}
"
);

optimized_out!(import_default_unused, "import foo from 'foo'");

optimized_out!(import_specific_unused, "import {foo} from 'foo'");

optimized_out!(import_mixed_unused, "import foo, { bar } from 'foo'");

noop!(
import_export_named,
"import foo from 'src'; export { foo };"
);

to!(
import_unused_export_named,
"import foo, { bar } from 'src'; export { foo }; ",
"import foo from 'src'; export { foo }; "
);

1 comment on commit 67d0a89

@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: 67d0a89 Previous: bb2486c Ratio
es/full/bugs-1 334122 ns/iter (± 19373) 312837 ns/iter (± 18734) 1.07
es/full/minify/libraries/antd 1802694860 ns/iter (± 31555421) 1784895320 ns/iter (± 33965472) 1.01
es/full/minify/libraries/d3 319517686 ns/iter (± 6735090) 326213405 ns/iter (± 6309793) 0.98
es/full/minify/libraries/echarts 1358850238 ns/iter (± 20303091) 1363344113 ns/iter (± 31656594) 1.00
es/full/minify/libraries/jquery 95201474 ns/iter (± 1026784) 97976869 ns/iter (± 2977271) 0.97
es/full/minify/libraries/lodash 111855203 ns/iter (± 2537597) 112819611 ns/iter (± 2626682) 0.99
es/full/minify/libraries/moment 54383812 ns/iter (± 915808) 55804747 ns/iter (± 1265407) 0.97
es/full/minify/libraries/react 19931774 ns/iter (± 449470) 20160313 ns/iter (± 401088) 0.99
es/full/minify/libraries/terser 262104652 ns/iter (± 9903950) 262782627 ns/iter (± 11161932) 1.00
es/full/minify/libraries/three 481636407 ns/iter (± 9867347) 473490213 ns/iter (± 8228999) 1.02
es/full/minify/libraries/typescript 3333883677 ns/iter (± 47936534) 3295695168 ns/iter (± 31372213) 1.01
es/full/minify/libraries/victory 714331701 ns/iter (± 9094624) 710409839 ns/iter (± 20893514) 1.01
es/full/minify/libraries/vue 140100241 ns/iter (± 4091415) 134231341 ns/iter (± 1929872) 1.04
es/full/codegen/es3 26231 ns/iter (± 52) 26542 ns/iter (± 30) 0.99
es/full/codegen/es5 26224 ns/iter (± 64) 26551 ns/iter (± 59) 0.99
es/full/codegen/es2015 26213 ns/iter (± 66) 26470 ns/iter (± 46) 0.99
es/full/codegen/es2016 26290 ns/iter (± 129) 26540 ns/iter (± 42) 0.99
es/full/codegen/es2017 26142 ns/iter (± 44) 26566 ns/iter (± 73) 0.98
es/full/codegen/es2018 26165 ns/iter (± 58) 26475 ns/iter (± 49) 0.99
es/full/codegen/es2019 26271 ns/iter (± 95) 26553 ns/iter (± 49) 0.99
es/full/codegen/es2020 26230 ns/iter (± 61) 26478 ns/iter (± 49) 0.99
es/full/all/es3 180215068 ns/iter (± 3191566) 177024319 ns/iter (± 2008782) 1.02
es/full/all/es5 168044253 ns/iter (± 2869317) 168503257 ns/iter (± 3334603) 1.00
es/full/all/es2015 133094406 ns/iter (± 2748920) 132054805 ns/iter (± 1875265) 1.01
es/full/all/es2016 131070361 ns/iter (± 1936903) 131593227 ns/iter (± 1684583) 1.00
es/full/all/es2017 132854070 ns/iter (± 3316957) 127411089 ns/iter (± 1993917) 1.04
es/full/all/es2018 132769444 ns/iter (± 1710759) 125026315 ns/iter (± 1913835) 1.06
es/full/all/es2019 130251155 ns/iter (± 2607229) 126250854 ns/iter (± 2373171) 1.03
es/full/all/es2020 123362077 ns/iter (± 3007206) 120186771 ns/iter (± 1841783) 1.03
es/full/parser 550096 ns/iter (± 8464) 546531 ns/iter (± 8235) 1.01
es/full/base/fixer 22260 ns/iter (± 39) 22029 ns/iter (± 31) 1.01
es/full/base/resolver_and_hygiene 81605 ns/iter (± 122) 82013 ns/iter (± 139) 1.00
serialization of ast node 124 ns/iter (± 1) 125 ns/iter (± 0) 0.99
serialization of serde 124 ns/iter (± 0) 125 ns/iter (± 0) 0.99
css/minify/libraries/bootstrap 28225717 ns/iter (± 53287) 28244895 ns/iter (± 71448) 1.00
css/visitor/compare/clone 2089840 ns/iter (± 16156) 2097745 ns/iter (± 19099) 1.00
css/visitor/compare/visit_mut_span 2283891 ns/iter (± 11397) 2272142 ns/iter (± 4509) 1.01
css/visitor/compare/visit_mut_span_panic 2323550 ns/iter (± 7158) 2324591 ns/iter (± 7152) 1.00
css/visitor/compare/fold_span 3050703 ns/iter (± 30065) 3050335 ns/iter (± 20539) 1.00
css/visitor/compare/fold_span_panic 3218429 ns/iter (± 19420) 3216472 ns/iter (± 26590) 1.00
css/lexer/bootstrap_5_1_3 5189893 ns/iter (± 2548) 5227430 ns/iter (± 4595) 0.99
css/lexer/foundation_6_7_4 4372970 ns/iter (± 2207) 4364059 ns/iter (± 2140) 1.00
css/lexer/tailwind_3_1_1 831383 ns/iter (± 338) 829869 ns/iter (± 309) 1.00
css/parser/bootstrap_5_1_3 21839559 ns/iter (± 113100) 21854989 ns/iter (± 317126) 1.00
css/parser/foundation_6_7_4 17344432 ns/iter (± 43108) 17466743 ns/iter (± 140276) 0.99
css/parser/tailwind_3_1_1 3322812 ns/iter (± 2154) 3334271 ns/iter (± 3136) 1.00
es/codegen/colors 333407 ns/iter (± 186102) 330824 ns/iter (± 185376) 1.01
es/codegen/large 1319376 ns/iter (± 674174) 1175114 ns/iter (± 592174) 1.12
es/codegen/with-parser/colors 47870 ns/iter (± 256) 48187 ns/iter (± 533) 0.99
es/codegen/with-parser/large 530012 ns/iter (± 1454) 533959 ns/iter (± 5238) 0.99
es/minify/libraries/antd 1576349859 ns/iter (± 14233399) 1555371304 ns/iter (± 22527562) 1.01
es/minify/libraries/d3 281395352 ns/iter (± 9084264) 272912557 ns/iter (± 8386964) 1.03
es/minify/libraries/echarts 1190575161 ns/iter (± 19311788) 1206733319 ns/iter (± 14438228) 0.99
es/minify/libraries/jquery 84176671 ns/iter (± 1235869) 84174422 ns/iter (± 2891623) 1.00
es/minify/libraries/lodash 100004654 ns/iter (± 2262117) 100012799 ns/iter (± 2177516) 1.00
es/minify/libraries/moment 49965759 ns/iter (± 1031421) 47606295 ns/iter (± 1188113) 1.05
es/minify/libraries/react 18196270 ns/iter (± 400040) 17815081 ns/iter (± 343114) 1.02
es/minify/libraries/terser 228362297 ns/iter (± 6050082) 227972602 ns/iter (± 8229409) 1.00
es/minify/libraries/three 403950863 ns/iter (± 9857911) 390154633 ns/iter (± 10407897) 1.04
es/minify/libraries/typescript 2849781276 ns/iter (± 30813544) 2803879620 ns/iter (± 28260943) 1.02
es/minify/libraries/victory 639773974 ns/iter (± 15779435) 648734253 ns/iter (± 12215767) 0.99
es/minify/libraries/vue 121769537 ns/iter (± 1726073) 126699179 ns/iter (± 2820716) 0.96
es/visitor/compare/clone 2387339 ns/iter (± 28993) 2398607 ns/iter (± 15764) 1.00
es/visitor/compare/visit_mut_span 2811587 ns/iter (± 6697) 2797332 ns/iter (± 13376) 1.01
es/visitor/compare/visit_mut_span_panic 2866423 ns/iter (± 28320) 2860052 ns/iter (± 52596) 1.00
es/visitor/compare/fold_span 3993647 ns/iter (± 23699) 3984766 ns/iter (± 32545) 1.00
es/visitor/compare/fold_span_panic 4121146 ns/iter (± 16621) 4114299 ns/iter (± 29437) 1.00
es/lexer/colors 16181 ns/iter (± 7) 16324 ns/iter (± 42) 0.99
es/lexer/angular 7838466 ns/iter (± 4322) 7865266 ns/iter (± 5715) 1.00
es/lexer/backbone 1004480 ns/iter (± 543) 1009849 ns/iter (± 954) 0.99
es/lexer/jquery 5600011 ns/iter (± 3770) 5621931 ns/iter (± 3461) 1.00
es/lexer/jquery mobile 8616983 ns/iter (± 6096) 8642471 ns/iter (± 19797) 1.00
es/lexer/mootools 4408545 ns/iter (± 5688) 4432416 ns/iter (± 3248) 0.99
es/lexer/underscore 838635 ns/iter (± 757) 844057 ns/iter (± 298) 0.99
es/lexer/three 26271448 ns/iter (± 8611) 26339412 ns/iter (± 24192) 1.00
es/lexer/yui 4809837 ns/iter (± 4273) 4835987 ns/iter (± 1126) 0.99
es/parser/colors 30641 ns/iter (± 50) 30069 ns/iter (± 38) 1.02
es/parser/angular 16151061 ns/iter (± 150362) 15996557 ns/iter (± 150511) 1.01
es/parser/backbone 2324245 ns/iter (± 13095) 2320645 ns/iter (± 11438) 1.00
es/parser/jquery 12560912 ns/iter (± 83885) 12694176 ns/iter (± 136940) 0.99
es/parser/jquery mobile 19839270 ns/iter (± 167758) 20602614 ns/iter (± 539515) 0.96
es/parser/mootools 9622913 ns/iter (± 36261) 9653273 ns/iter (± 62392) 1.00
es/parser/underscore 1963739 ns/iter (± 10701) 1967245 ns/iter (± 13407) 1.00
es/parser/three 60368327 ns/iter (± 522601) 60163549 ns/iter (± 318520) 1.00
es/parser/yui 9740394 ns/iter (± 73895) 9642914 ns/iter (± 61778) 1.01
es/preset-env/usage/builtin_type 141989 ns/iter (± 32076) 140510 ns/iter (± 31402) 1.01
es/preset-env/usage/property 21345 ns/iter (± 76) 21098 ns/iter (± 109) 1.01
es/resolver/typescript 126043919 ns/iter (± 3621086) 125105385 ns/iter (± 1944771) 1.01
es/fixer/typescript 97766651 ns/iter (± 5631860) 96037930 ns/iter (± 1123787) 1.02
es/hygiene/typescript 207228335 ns/iter (± 2993614) 209964463 ns/iter (± 3548449) 0.99
es/resolver_with_hygiene/typescript 350817835 ns/iter (± 3393212) 352892592 ns/iter (± 4250749) 0.99
es/visitor/base-perf/module_clone 75706 ns/iter (± 667) 75779 ns/iter (± 1781) 1.00
es/visitor/base-perf/fold_empty 85590 ns/iter (± 1538) 86507 ns/iter (± 1332) 0.99
es/visitor/base-perf/fold_noop_impl_all 85777 ns/iter (± 811) 86680 ns/iter (± 2045) 0.99
es/visitor/base-perf/fold_noop_impl_vec 85884 ns/iter (± 1419) 86965 ns/iter (± 1903) 0.99
es/visitor/base-perf/boxing_boxed_clone 58 ns/iter (± 0) 56 ns/iter (± 0) 1.04
es/visitor/base-perf/boxing_unboxed_clone 59 ns/iter (± 0) 59 ns/iter (± 0) 1
es/visitor/base-perf/boxing_boxed 104 ns/iter (± 0) 103 ns/iter (± 0) 1.01
es/visitor/base-perf/boxing_unboxed 102 ns/iter (± 0) 102 ns/iter (± 0) 1
es/visitor/base-perf/visit_contains_this 3483 ns/iter (± 59) 3451 ns/iter (± 89) 1.01
es/base/parallel/resolver/typescript 5190338316 ns/iter (± 503707449) 5072750937 ns/iter (± 457646295) 1.02
es/base/parallel/hygiene/typescript 2419514309 ns/iter (± 40229350) 2422006922 ns/iter (± 28743698) 1.00
misc/visitors/time-complexity/time 5 100 ns/iter (± 0) 100 ns/iter (± 0) 1
misc/visitors/time-complexity/time 10 320 ns/iter (± 0) 331 ns/iter (± 3) 0.97
misc/visitors/time-complexity/time 15 680 ns/iter (± 7) 657 ns/iter (± 0) 1.04
misc/visitors/time-complexity/time 20 1216 ns/iter (± 2) 1216 ns/iter (± 0) 1
misc/visitors/time-complexity/time 40 6242 ns/iter (± 50) 6196 ns/iter (± 3) 1.01
misc/visitors/time-complexity/time 60 15579 ns/iter (± 27) 15571 ns/iter (± 12) 1.00
es/full-target/es2016 187407 ns/iter (± 480) 187629 ns/iter (± 797) 1.00
es/full-target/es2017 182823 ns/iter (± 650) 182432 ns/iter (± 565) 1.00
es/full-target/es2018 171677 ns/iter (± 340) 171763 ns/iter (± 532) 1.00
es2020_nullish_coalescing 67432 ns/iter (± 176) 66994 ns/iter (± 116) 1.01
es2020_optional_chaining 96900 ns/iter (± 7836) 96600 ns/iter (± 1086) 1.00
es2022_class_properties 94665 ns/iter (± 143) 94363 ns/iter (± 154) 1.00
es2018_object_rest_spread 72121 ns/iter (± 108) 71387 ns/iter (± 189) 1.01
es2019_optional_catch_binding 61890 ns/iter (± 239) 61217 ns/iter (± 79) 1.01
es2017_async_to_generator 62493 ns/iter (± 77) 61800 ns/iter (± 118) 1.01
es2016_exponentiation 65833 ns/iter (± 117) 65626 ns/iter (± 147) 1.00
es2015_arrow 70743 ns/iter (± 306) 70453 ns/iter (± 263) 1.00
es2015_block_scoped_fn 67023 ns/iter (± 97) 66353 ns/iter (± 155) 1.01
es2015_block_scoping 151936 ns/iter (± 10777) 159833 ns/iter (± 6401) 0.95
es2015_classes 117874 ns/iter (± 420) 117213 ns/iter (± 517) 1.01
es2015_computed_props 61875 ns/iter (± 103) 61166 ns/iter (± 120) 1.01
es2015_destructuring 117012 ns/iter (± 325) 117752 ns/iter (± 211) 0.99
es2015_duplicate_keys 64327 ns/iter (± 67) 63883 ns/iter (± 84) 1.01
es2015_parameters 80027 ns/iter (± 156) 79539 ns/iter (± 207) 1.01
es2015_fn_name 67303 ns/iter (± 638) 66592 ns/iter (± 397) 1.01
es2015_for_of 64889 ns/iter (± 97) 64151 ns/iter (± 67) 1.01
es2015_instanceof 63859 ns/iter (± 109) 63371 ns/iter (± 85) 1.01
es2015_shorthand_property 61530 ns/iter (± 121) 61076 ns/iter (± 67) 1.01
es2015_spread 61695 ns/iter (± 61) 60979 ns/iter (± 83) 1.01
es2015_sticky_regex 62893 ns/iter (± 125) 62213 ns/iter (± 63) 1.01
es2015_typeof_symbol 63227 ns/iter (± 59) 62437 ns/iter (± 124) 1.01
es/transform/baseline/base 52576 ns/iter (± 98) 51777 ns/iter (± 72) 1.02
es/transform/baseline/common_reserved_word 63089 ns/iter (± 83) 62554 ns/iter (± 104) 1.01
es/transform/baseline/common_typescript 143026 ns/iter (± 323) 141658 ns/iter (± 3928) 1.01
es/target/es3 171678 ns/iter (± 227) 170788 ns/iter (± 392) 1.01
es/target/es2015 634236 ns/iter (± 1275) 632648 ns/iter (± 1268) 1.00
es/target/es2016 65874 ns/iter (± 101) 65441 ns/iter (± 109) 1.01
es/target/es2017 62711 ns/iter (± 76) 61690 ns/iter (± 103) 1.02
es/target/es2018 82124 ns/iter (± 146) 81298 ns/iter (± 121) 1.01
es/target/es2020 133745 ns/iter (± 184) 132849 ns/iter (± 252) 1.01
babelify-only 679535 ns/iter (± 1151) 679250 ns/iter (± 1630) 1.00
parse_and_babelify_angular 47828606 ns/iter (± 1166335) 49261102 ns/iter (± 946448) 0.97
parse_and_babelify_backbone 5759739 ns/iter (± 112495) 5826357 ns/iter (± 168108) 0.99
parse_and_babelify_jquery 34403139 ns/iter (± 867894) 36605700 ns/iter (± 1413531) 0.94
parse_and_babelify_jquery_mobile 58306517 ns/iter (± 820754) 60456303 ns/iter (± 1676943) 0.96
parse_and_babelify_mootools 35832268 ns/iter (± 1151486) 37365353 ns/iter (± 1120661) 0.96
parse_and_babelify_underscore 4398496 ns/iter (± 34925) 4626119 ns/iter (± 143752) 0.95
parse_and_babelify_yui 34783289 ns/iter (± 643163) 37756159 ns/iter (± 1475286) 0.92
html/minify/document/css_spec 42882147 ns/iter (± 397506) 43199171 ns/iter (± 562376) 0.99
html/minify/document/github 17744478 ns/iter (± 113741) 17799723 ns/iter (± 78362) 1.00
html/minify/document/stackoverflow 15806025 ns/iter (± 34107) 15891529 ns/iter (± 83803) 0.99
html/minify/document_fragment/css_spec 40883928 ns/iter (± 541741) 41660647 ns/iter (± 458124) 0.98
html/minify/document_fragment/github 16961569 ns/iter (± 89967) 17095102 ns/iter (± 43411) 0.99
html/minify/document_fragment/stackoverflow 15438080 ns/iter (± 71160) 15599151 ns/iter (± 117008) 0.99
html/document/visitor/compare/clone 347251 ns/iter (± 2084) 346603 ns/iter (± 1901) 1.00
html/document/visitor/compare/visit_mut_span 368649 ns/iter (± 1781) 372357 ns/iter (± 1867) 0.99
html/document/visitor/compare/visit_mut_span_panic 384534 ns/iter (± 2011) 382476 ns/iter (± 2151) 1.01
html/document/visitor/compare/fold_span 413699 ns/iter (± 3017) 412029 ns/iter (± 1876) 1.00
html/document/visitor/compare/fold_span_panic 467687 ns/iter (± 1079) 466522 ns/iter (± 1715) 1.00
html/document_fragment/visitor/compare/clone 345597 ns/iter (± 2386) 342587 ns/iter (± 2082) 1.01
html/document_fragment/visitor/compare/visit_mut_span 374576 ns/iter (± 2478) 369776 ns/iter (± 2483) 1.01
html/document_fragment/visitor/compare/visit_mut_span_panic 377866 ns/iter (± 2467) 377332 ns/iter (± 1944) 1.00
html/document_fragment/visitor/compare/fold_span 411030 ns/iter (± 1418) 408840 ns/iter (± 1884) 1.01
html/document_fragment/visitor/compare/fold_span_panic 467234 ns/iter (± 1510) 467560 ns/iter (± 2727) 1.00
html/lexer/css_2021_spec 15571141 ns/iter (± 25891) 15661647 ns/iter (± 9749) 0.99
html/lexer/github_com_17_05_2022 6047150 ns/iter (± 17456) 6076133 ns/iter (± 4770) 1.00
html/lexer/stackoverflow_com_17_05_2022 5642921 ns/iter (± 2084) 5683758 ns/iter (± 2261) 0.99
html/parser/parser_document/css_2021_spec 26164770 ns/iter (± 145688) 26197607 ns/iter (± 268430) 1.00
html/parser/parser_document/github_com_17_05_2022 8763246 ns/iter (± 7258) 8791746 ns/iter (± 8149) 1.00
html/parser/parser_document/stackoverflow_com_17_05_2022 7860120 ns/iter (± 6277) 7731965 ns/iter (± 4954) 1.02
html/parser/parser_document_fragment/css_2021_spec 26504442 ns/iter (± 329626) 26676209 ns/iter (± 121217) 0.99
html/parser/parser_document_fragment/github_com_17_05_2022 8760182 ns/iter (± 13293) 8813583 ns/iter (± 11350) 0.99
html/parser/parser_document_fragment/stackoverflow_com_17_05_2022 7713331 ns/iter (± 7419) 7730436 ns/iter (± 7424) 1.00

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

Please sign in to comment.