Skip to content

Commit

Permalink
feat(es/typescript): Improve fast TS strip (#9154)
Browse files Browse the repository at this point in the history
**Description:**

It's almost done, but it need some more adjustment for arrow functions.
  • Loading branch information
kdy1 committed Jul 5, 2024
1 parent 2daee6f commit 05c7210
Show file tree
Hide file tree
Showing 4 changed files with 593 additions and 55 deletions.
2 changes: 1 addition & 1 deletion crates/swc_ecma_transforms_proposal/tests/decorator-tests
298 changes: 244 additions & 54 deletions crates/swc_fast_ts_strip/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,12 @@ use swc_common::{
BytePos, FileName, SourceMap, Span, Spanned,
};
use swc_ecma_ast::{
BindingIdent, Decorator, EsVersion, Ident, ImportDecl, ImportSpecifier, Param, Pat, Program,
TsAsExpr, TsConstAssertion, TsEnumDecl, TsInstantiation, TsModuleDecl, TsModuleName,
TsNamespaceDecl, TsNonNullExpr, TsParamPropParam, TsSatisfiesExpr, TsTypeAliasDecl, TsTypeAnn,
ArrowExpr, BindingIdent, Class, ClassMethod, ClassProp, Decorator, EsVersion, ExportAll,
ExportDecl, ExportSpecifier, FnDecl, Ident, ImportDecl, ImportSpecifier, MethodKind,
NamedExport, Param, Pat, Program, TsAsExpr, TsConstAssertion, TsEnumDecl, TsInstantiation,
TsInterfaceDecl, TsModuleDecl, TsModuleName, TsNamespaceDecl, TsNonNullExpr, TsParamPropParam,
TsSatisfiesExpr, TsTypeAliasDecl, TsTypeAnn, TsTypeAssertion, TsTypeParamDecl,
TsTypeParamInstantiation, VarDecl,
};
use swc_ecma_parser::{
parse_file_as_module, parse_file_as_program, parse_file_as_script, Syntax, TsSyntax,
Expand Down Expand Up @@ -83,7 +86,7 @@ pub fn operate(
}

// Strip typescript types
let mut ts_strip = TsStrip::new(fm.src.clone());
let mut ts_strip = TsStrip::new(cm.clone(), fm.src.clone());
program.visit_with(&mut ts_strip);

let replacements = ts_strip.replacements;
Expand All @@ -98,19 +101,48 @@ pub fn operate(
code[(r.0 .0 - 1) as usize..(r.1 .0 - 1) as usize].fill(b' ');
}

// Assert that removal does not overlap with each other

for removal in ts_strip.removals.iter() {
for r in &ts_strip.removals {
if removal == r {
continue;
}

assert!(
r.0 < removal.0 || r.1 < removal.0 || r.0 > removal.1 || r.1 > removal.1,
"removal {:?} overlaps with replacement {:?}",
removal,
r
);
}
}

for removal in ts_strip.removals.iter().copied().rev() {
code.drain((removal.0 .0 - 1) as usize..(removal.1 .0 - 1) as usize);
}

String::from_utf8(code).map_err(|_| anyhow::anyhow!("failed to convert to utf-8"))
}

struct TsStrip {
cm: Lrc<SourceMap>,
src: Lrc<String>,

/// Replaced with whitespace
replacements: Vec<(BytePos, BytePos)>,

/// Applied after replacements. Used for arrow functions.
removals: Vec<(BytePos, BytePos)>,
}

impl TsStrip {
fn new(src: Lrc<String>) -> Self {
fn new(cm: Lrc<SourceMap>, src: Lrc<String>) -> Self {
TsStrip {
cm,
src,
replacements: Default::default(),
removals: Default::default(),
}
}
}
Expand All @@ -119,15 +151,208 @@ impl TsStrip {
fn add_replacement(&mut self, span: Span) {
self.replacements.push((span.lo, span.hi));
}

fn add_removal(&mut self, span: Span) {
self.removals.push((span.lo, span.hi));
}
}

impl Visit for TsStrip {
fn visit_arrow_expr(&mut self, n: &ArrowExpr) {
if let Some(ret) = &n.return_type {
let mut sp = self.cm.span_extend_to_prev_char(ret.span, ')');

let pos = self.src[(sp.hi.0 as usize - 1)..].find("=>").unwrap();

sp.hi.0 += pos as u32;

self.add_removal(sp);
}

n.type_params.visit_with(self);
n.params.visit_with(self);
n.body.visit_with(self);
}

fn visit_binding_ident(&mut self, n: &BindingIdent) {
n.visit_children_with(self);

if n.optional {
self.add_replacement(span(n.id.span.hi, n.id.span.hi + BytePos(1)));
}
}

fn visit_class(&mut self, n: &Class) {
n.visit_children_with(self);

let lo = match &n.super_class {
Some(v) => v.span().hi,
None => n.span.lo,
};
let hi = skip_until(self.src.as_bytes(), lo.0, b'{');
self.add_replacement(span(lo, BytePos(hi)));
}

fn visit_class_method(&mut self, n: &ClassMethod) {
if n.function.body.is_none() {
self.add_replacement(n.span);
return;
}

let hi = match n.kind {
MethodKind::Method => {
if n.is_static {
self.cm
.span_extend_to_next_str(span(n.span.lo, n.span.lo), "static", false)
.hi
} else {
n.key.span().lo
}
}
MethodKind::Getter => {
self.cm
.span_extend_to_next_str(span(n.span.lo, n.span.lo), "get", false)
.hi
}
MethodKind::Setter => {
self.cm
.span_extend_to_next_str(span(n.span.lo, n.span.lo), "set", false)
.hi
}
};

self.add_replacement(span(n.span.lo, hi));

n.visit_children_with(self);
}

fn visit_class_prop(&mut self, n: &ClassProp) {
if n.declare {
self.add_replacement(n.span);
return;
}

let hi = if n.is_static {
self.cm
.span_extend_to_next_str(span(n.span.lo, n.span.lo), "static", false)
.hi
} else {
n.key.span().lo
};

self.add_replacement(span(n.span.lo, hi));

n.visit_children_with(self);
}

fn visit_decorator(&mut self, n: &Decorator) {
HANDLER.with(|handler| {
handler.span_err(n.span, "Decorators are not supported");
});
}

fn visit_export_all(&mut self, n: &ExportAll) {
if n.type_only {
self.add_replacement(n.span);
return;
}

n.visit_children_with(self);
}

fn visit_export_decl(&mut self, n: &ExportDecl) {
match n.decl {
swc_ecma_ast::Decl::TsInterface(_)
| swc_ecma_ast::Decl::TsTypeAlias(_)
| swc_ecma_ast::Decl::TsEnum(_)
| swc_ecma_ast::Decl::TsModule(_) => {
self.add_replacement(n.span);
}

_ => {
n.visit_children_with(self);
}
}
}

fn visit_fn_decl(&mut self, n: &FnDecl) {
if n.function.body.is_none() {
self.add_replacement(n.function.span);
return;
}
n.visit_children_with(self);
}

fn visit_import_decl(&mut self, n: &ImportDecl) {
if n.type_only {
self.add_replacement(n.span);
return;
}

n.visit_children_with(self);
}

fn visit_import_specifiers(&mut self, n: &[ImportSpecifier]) {
for (i, import) in n.iter().enumerate() {
let ImportSpecifier::Named(import) = import else {
continue;
};

if import.is_type_only {
let mut span = import.span;
span.hi.0 = n.get(i + 1).map(|x| x.span_lo().0).unwrap_or_else(|| {
let bytes = self.src.as_bytes();
skip_until(bytes, span.hi.0, b'}')
});
self.add_replacement(span);
}
}
}

fn visit_named_export(&mut self, n: &NamedExport) {
if n.type_only {
self.add_replacement(n.span);
return;
}

for export in n.specifiers.iter() {
if let ExportSpecifier::Named(e) = export {
if e.is_type_only {
let sp = self.cm.span_extend_to_next_char(e.span, ',');
self.add_replacement(span(sp.lo, sp.hi + BytePos(1)));
}
}
}
}

fn visit_params(&mut self, n: &[Param]) {
if let Some(p) = n.first().filter(|param| {
matches!(
&param.pat,
Pat::Ident(BindingIdent {
id: Ident { sym, .. },
..
}) if &**sym == "this"
)
}) {
let mut span = p.span;

if n.len() == 1 {
let bytes = self.src.as_bytes();
span.hi.0 = skip_until(bytes, span.hi.0, b')');
} else {
span.hi = n[1].span.lo;
n[1..].visit_children_with(self);
}

self.add_replacement(span);

return;
}

n.visit_children_with(self);
}

fn visit_ts_as_expr(&mut self, n: &TsAsExpr) {
self.add_replacement(span(n.expr.span().hi, n.span.hi));

Expand Down Expand Up @@ -160,6 +385,10 @@ impl Visit for TsStrip {
n.expr.visit_children_with(self);
}

fn visit_ts_interface_decl(&mut self, n: &TsInterfaceDecl) {
self.add_replacement(n.span);
}

fn visit_ts_module_decl(&mut self, n: &TsModuleDecl) {
if n.declare || matches!(n.id, TsModuleName::Str(..)) {
self.add_replacement(n.span);
Expand Down Expand Up @@ -217,67 +446,28 @@ impl Visit for TsStrip {
self.add_replacement(n.span);
}

fn visit_binding_ident(&mut self, n: &BindingIdent) {
n.visit_children_with(self);
fn visit_ts_type_assertion(&mut self, n: &TsTypeAssertion) {
self.add_replacement(span(n.span.lo, n.expr.span().lo));

if n.optional {
self.add_replacement(span(n.id.span.hi, n.id.span.hi + BytePos(1)));
}
n.expr.visit_children_with(self);
}

fn visit_params(&mut self, n: &[Param]) {
if let Some(p) = n.first().filter(|param| {
matches!(
&param.pat,
Pat::Ident(BindingIdent {
id: Ident { sym, .. },
..
}) if &**sym == "this"
)
}) {
let mut span = p.span;

if n.len() == 1 {
let bytes = self.src.as_bytes();
span.hi.0 = skip_until(bytes, span.hi.0, b')');
} else {
span.hi = n[1].span.lo;
n[1..].visit_children_with(self);
}

self.add_replacement(span);

return;
}
fn visit_ts_type_param_decl(&mut self, n: &TsTypeParamDecl) {
self.add_replacement(n.span);
}

n.visit_children_with(self);
fn visit_ts_type_param_instantiation(&mut self, n: &TsTypeParamInstantiation) {
self.add_replacement(span(n.span.lo, n.span.hi));
}

fn visit_import_decl(&mut self, n: &ImportDecl) {
if n.type_only {
fn visit_var_decl(&mut self, n: &VarDecl) {
if n.declare {
self.add_replacement(n.span);
return;
}

n.visit_children_with(self);
}

fn visit_import_specifiers(&mut self, n: &[ImportSpecifier]) {
for (i, import) in n.iter().enumerate() {
let ImportSpecifier::Named(import) = import else {
continue;
};

if import.is_type_only {
let mut span = import.span;
span.hi.0 = n.get(i + 1).map(|x| x.span_lo().0).unwrap_or_else(|| {
let bytes = self.src.as_bytes();
skip_until(bytes, span.hi.0, b'}')
});
self.add_replacement(span);
}
}
}
}

fn span(lo: BytePos, hi: BytePos) -> Span {
Expand Down
Loading

1 comment on commit 05c7210

@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: 05c7210 Previous: 732d748 Ratio
es/full/bugs-1 275451 ns/iter (± 2400) 274210 ns/iter (± 1660) 1.00
es/full/minify/libraries/antd 1781313708 ns/iter (± 95617196) 1843049582 ns/iter (± 37592332) 0.97
es/full/minify/libraries/d3 341387329 ns/iter (± 5455610) 349347277 ns/iter (± 5207278) 0.98
es/full/minify/libraries/echarts 1407741219 ns/iter (± 43539560) 1546699197 ns/iter (± 35588990) 0.91
es/full/minify/libraries/jquery 102927056 ns/iter (± 1011635) 104386706 ns/iter (± 734362) 0.99
es/full/minify/libraries/lodash 113571941 ns/iter (± 265952) 114534827 ns/iter (± 1841283) 0.99
es/full/minify/libraries/moment 59510056 ns/iter (± 69498) 60124646 ns/iter (± 682074) 0.99
es/full/minify/libraries/react 18370153 ns/iter (± 46199) 18363782 ns/iter (± 113457) 1.00
es/full/minify/libraries/terser 269997994 ns/iter (± 1586217) 279467132 ns/iter (± 4662224) 0.97
es/full/minify/libraries/three 456260191 ns/iter (± 2383265) 486202229 ns/iter (± 14186842) 0.94
es/full/minify/libraries/typescript 3086712614 ns/iter (± 8655720) 3356121436 ns/iter (± 50965877) 0.92
es/full/minify/libraries/victory 700271951 ns/iter (± 12554047) 883394000 ns/iter (± 26392767) 0.79
es/full/minify/libraries/vue 143993596 ns/iter (± 283439) 147852049 ns/iter (± 1089317) 0.97
es/full/codegen/es3 59923 ns/iter (± 2959) 60437 ns/iter (± 168) 0.99
es/full/codegen/es5 59977 ns/iter (± 75) 60497 ns/iter (± 132) 0.99
es/full/codegen/es2015 59943 ns/iter (± 71) 60355 ns/iter (± 204) 0.99
es/full/codegen/es2016 60041 ns/iter (± 83) 60445 ns/iter (± 197) 0.99
es/full/codegen/es2017 59964 ns/iter (± 868) 60376 ns/iter (± 79) 0.99
es/full/codegen/es2018 59828 ns/iter (± 140) 60266 ns/iter (± 67) 0.99
es/full/codegen/es2019 59795 ns/iter (± 55) 60335 ns/iter (± 129) 0.99
es/full/codegen/es2020 59874 ns/iter (± 138) 60404 ns/iter (± 346) 0.99
es/full/all/es3 161417866 ns/iter (± 744641) 160716304 ns/iter (± 536984) 1.00
es/full/all/es5 156693655 ns/iter (± 900423) 155813660 ns/iter (± 694262) 1.01
es/full/all/es2015 114342649 ns/iter (± 585899) 114642849 ns/iter (± 694417) 1.00
es/full/all/es2016 114241044 ns/iter (± 551078) 114005643 ns/iter (± 746545) 1.00
es/full/all/es2017 113880727 ns/iter (± 692239) 112853633 ns/iter (± 442373) 1.01
es/full/all/es2018 111072193 ns/iter (± 559236) 110297938 ns/iter (± 725199) 1.01
es/full/all/es2019 111112843 ns/iter (± 973392) 111026820 ns/iter (± 371649) 1.00
es/full/all/es2020 106158267 ns/iter (± 1008120) 107267967 ns/iter (± 479840) 0.99
es/full/parser 447280 ns/iter (± 2791) 454005 ns/iter (± 3136) 0.99
es/full/base/fixer 15988 ns/iter (± 112) 15953 ns/iter (± 132) 1.00
es/full/base/resolver_and_hygiene 80092 ns/iter (± 164) 80664 ns/iter (± 634) 0.99
serialization of serde 277 ns/iter (± 1) 270 ns/iter (± 2) 1.03
css/minify/libraries/bootstrap 22092937 ns/iter (± 130055) 21964506 ns/iter (± 69992) 1.01
css/visitor/compare/clone 1349349 ns/iter (± 11136) 1353371 ns/iter (± 14823) 1.00
css/visitor/compare/visit_mut_span 1475193 ns/iter (± 7297) 1478139 ns/iter (± 9781) 1.00
css/visitor/compare/visit_mut_span_panic 1483120 ns/iter (± 33538) 1504073 ns/iter (± 24817) 0.99
css/visitor/compare/fold_span 1973138 ns/iter (± 3742) 1999607 ns/iter (± 6394) 0.99
css/visitor/compare/fold_span_panic 2106548 ns/iter (± 5089) 2128514 ns/iter (± 9955) 0.99
css/lexer/bootstrap_5_1_3 3430244 ns/iter (± 34396) 3558393 ns/iter (± 3142) 0.96
css/lexer/foundation_6_7_4 2780051 ns/iter (± 3362) 2890688 ns/iter (± 1784) 0.96
css/lexer/tailwind_3_1_1 533529 ns/iter (± 646) 548602 ns/iter (± 746) 0.97
css/parser/bootstrap_5_1_3 15913805 ns/iter (± 41191) 16363021 ns/iter (± 196187) 0.97
css/parser/foundation_6_7_4 12690344 ns/iter (± 15124) 13145786 ns/iter (± 62154) 0.97
css/parser/tailwind_3_1_1 2529983 ns/iter (± 2674) 2562731 ns/iter (± 3821) 0.99
es/codegen/colors 730138 ns/iter (± 397394) 727180 ns/iter (± 398782) 1.00
es/codegen/large 3010011 ns/iter (± 1598544) 3006928 ns/iter (± 1617511) 1.00
es/codegen/with-parser/colors 41088 ns/iter (± 1037) 41530 ns/iter (± 194) 0.99
es/codegen/with-parser/large 449569 ns/iter (± 10576) 456219 ns/iter (± 8060) 0.99
es/minify/libraries/antd 1396194277 ns/iter (± 18271770) 1396050129 ns/iter (± 12995229) 1.00
es/minify/libraries/d3 279820085 ns/iter (± 1362471) 281893853 ns/iter (± 5356337) 0.99
es/minify/libraries/echarts 1131175036 ns/iter (± 9812010) 1146416987 ns/iter (± 7357447) 0.99
es/minify/libraries/jquery 82166983 ns/iter (± 58055) 82496883 ns/iter (± 87713) 1.00
es/minify/libraries/lodash 103887818 ns/iter (± 531996) 103933448 ns/iter (± 357662) 1.00
es/minify/libraries/moment 48115428 ns/iter (± 42948) 48261360 ns/iter (± 46592) 1.00
es/minify/libraries/react 16204248 ns/iter (± 16396) 16206080 ns/iter (± 30115) 1.00
es/minify/libraries/terser 216804373 ns/iter (± 1291575) 217461579 ns/iter (± 576077) 1.00
es/minify/libraries/three 360284663 ns/iter (± 1346132) 365745967 ns/iter (± 2007419) 0.99
es/minify/libraries/typescript 2694283656 ns/iter (± 15115887) 2691452666 ns/iter (± 16007475) 1.00
es/minify/libraries/victory 554232837 ns/iter (± 8428649) 561797488 ns/iter (± 8470418) 0.99
es/minify/libraries/vue 120453451 ns/iter (± 216758) 120756849 ns/iter (± 109407) 1.00
es/visitor/compare/clone 1718530 ns/iter (± 7558) 1734585 ns/iter (± 9546) 0.99
es/visitor/compare/visit_mut_span 2051114 ns/iter (± 3701) 2072147 ns/iter (± 16900) 0.99
es/visitor/compare/visit_mut_span_panic 2056736 ns/iter (± 6026) 2080561 ns/iter (± 12128) 0.99
es/visitor/compare/fold_span 2765486 ns/iter (± 4994) 2801241 ns/iter (± 10371) 0.99
es/visitor/compare/fold_span_panic 2805171 ns/iter (± 10070) 2836993 ns/iter (± 7659) 0.99
es/lexer/colors 10087 ns/iter (± 62) 9402 ns/iter (± 26) 1.07
es/lexer/angular 5272977 ns/iter (± 64203) 4936910 ns/iter (± 19727) 1.07
es/lexer/backbone 672457 ns/iter (± 2369) 638615 ns/iter (± 3156) 1.05
es/lexer/jquery 3678803 ns/iter (± 13597) 3651916 ns/iter (± 5222) 1.01
es/lexer/jquery mobile 5542704 ns/iter (± 129429) 5356228 ns/iter (± 43735) 1.03
es/lexer/mootools 3028602 ns/iter (± 39170) 2889352 ns/iter (± 6668) 1.05
es/lexer/underscore 555167 ns/iter (± 2354) 536148 ns/iter (± 2143) 1.04
es/lexer/three 16728862 ns/iter (± 25809) 15979241 ns/iter (± 43793) 1.05
es/lexer/yui 2972422 ns/iter (± 9337) 2884914 ns/iter (± 18516) 1.03
es/lexer/cal-com 13457925 ns/iter (± 62207) 13020604 ns/iter (± 119722) 1.03
es/lexer/typescript 93072185 ns/iter (± 331416) 90092957 ns/iter (± 339253) 1.03
es/parser/colors 24063 ns/iter (± 51) 23597 ns/iter (± 214) 1.02
es/parser/angular 12624305 ns/iter (± 72497) 12557844 ns/iter (± 65550) 1.01
es/parser/backbone 1845814 ns/iter (± 6077) 1834141 ns/iter (± 5829) 1.01
es/parser/jquery 10221242 ns/iter (± 75262) 10114958 ns/iter (± 60063) 1.01
es/parser/jquery mobile 15471913 ns/iter (± 125917) 15295980 ns/iter (± 123310) 1.01
es/parser/mootools 7996046 ns/iter (± 51128) 7886979 ns/iter (± 17157) 1.01
es/parser/underscore 1605017 ns/iter (± 6114) 1595267 ns/iter (± 9685) 1.01
es/parser/three 44537578 ns/iter (± 235279) 43997946 ns/iter (± 197293) 1.01
es/parser/yui 7531800 ns/iter (± 32619) 7434215 ns/iter (± 65580) 1.01
es/parser/cal-com 39561695 ns/iter (± 384375) 40173103 ns/iter (± 196200) 0.98
es/parser/typescript 271021065 ns/iter (± 1363067) 269483417 ns/iter (± 1291980) 1.01
es/preset-env/usage/builtin_type 135532 ns/iter (± 34036) 136720 ns/iter (± 33636) 0.99
es/preset-env/usage/property 16425 ns/iter (± 166) 16192 ns/iter (± 67) 1.01
es/resolver/typescript 99271266 ns/iter (± 2349455) 97159461 ns/iter (± 3467009) 1.02
es/fixer/typescript 81936841 ns/iter (± 2984417) 79967537 ns/iter (± 1984968) 1.02
es/hygiene/typescript 187675035 ns/iter (± 4003389) 195036797 ns/iter (± 3493265) 0.96
es/resolver_with_hygiene/typescript 318325804 ns/iter (± 4538628) 325762961 ns/iter (± 5182430) 0.98
es/visitor/base-perf/module_clone 56875 ns/iter (± 2132) 57789 ns/iter (± 246) 0.98
es/visitor/base-perf/fold_empty 58956 ns/iter (± 333) 61184 ns/iter (± 711) 0.96
es/visitor/base-perf/fold_noop_impl_all 59906 ns/iter (± 509) 60837 ns/iter (± 964) 0.98
es/visitor/base-perf/fold_noop_impl_vec 59580 ns/iter (± 1420) 60926 ns/iter (± 476) 0.98
es/visitor/base-perf/boxing_boxed_clone 61 ns/iter (± 0) 58 ns/iter (± 0) 1.05
es/visitor/base-perf/boxing_unboxed_clone 47 ns/iter (± 0) 47 ns/iter (± 0) 1
es/visitor/base-perf/boxing_boxed 107 ns/iter (± 0) 106 ns/iter (± 0) 1.01
es/visitor/base-perf/boxing_unboxed 81 ns/iter (± 0) 81 ns/iter (± 0) 1
es/visitor/base-perf/visit_contains_this 2532 ns/iter (± 9) 2505 ns/iter (± 17) 1.01
es/base/parallel/resolver/typescript 2385456991 ns/iter (± 127294375) 2473412904 ns/iter (± 161110049) 0.96
es/base/parallel/hygiene/typescript 3319839854 ns/iter (± 40030628) 3289557651 ns/iter (± 44300517) 1.01
babelify-only 505353 ns/iter (± 4037) 508551 ns/iter (± 6937) 0.99
parse_and_babelify_angular 43706265 ns/iter (± 1564184) 45788602 ns/iter (± 614242) 0.95
parse_and_babelify_backbone 4359809 ns/iter (± 197109) 4418678 ns/iter (± 131903) 0.99
parse_and_babelify_jquery 28433878 ns/iter (± 537626) 30254548 ns/iter (± 616582) 0.94
parse_and_babelify_jquery_mobile 49697683 ns/iter (± 857392) 51162536 ns/iter (± 1022881) 0.97
parse_and_babelify_mootools 26751287 ns/iter (± 373368) 28295722 ns/iter (± 464150) 0.95
parse_and_babelify_underscore 3631159 ns/iter (± 39402) 3809260 ns/iter (± 63894) 0.95
parse_and_babelify_yui 24459051 ns/iter (± 572067) 25858880 ns/iter (± 304197) 0.95
html/minify/document/css_spec 44794462 ns/iter (± 398316) 46859668 ns/iter (± 300137) 0.96
html/minify/document/github 18311167 ns/iter (± 97284) 18843645 ns/iter (± 191259) 0.97
html/minify/document/stackoverflow 16607006 ns/iter (± 630554) 16972941 ns/iter (± 225777) 0.98
html/minify/document_fragment/css_spec 44476187 ns/iter (± 126167) 46300816 ns/iter (± 299604) 0.96
html/minify/document_fragment/github 18087638 ns/iter (± 113751) 18293368 ns/iter (± 68853) 0.99
html/minify/document_fragment/stackoverflow 16548863 ns/iter (± 247433) 16783094 ns/iter (± 73859) 0.99
html/document/visitor/compare/clone 163562 ns/iter (± 2014) 163229 ns/iter (± 1529) 1.00
html/document/visitor/compare/visit_mut_span 179998 ns/iter (± 1214) 181503 ns/iter (± 1426) 0.99
html/document/visitor/compare/visit_mut_span_panic 183912 ns/iter (± 6126) 186819 ns/iter (± 4675) 0.98
html/document/visitor/compare/fold_span 225830 ns/iter (± 1196) 228739 ns/iter (± 755) 0.99
html/document/visitor/compare/fold_span_panic 278285 ns/iter (± 954) 280927 ns/iter (± 2069) 0.99
html/document_fragment/visitor/compare/clone 164963 ns/iter (± 522) 166032 ns/iter (± 1199) 0.99
html/document_fragment/visitor/compare/visit_mut_span 179514 ns/iter (± 1274) 179781 ns/iter (± 798) 1.00
html/document_fragment/visitor/compare/visit_mut_span_panic 186203 ns/iter (± 1052) 186170 ns/iter (± 1524) 1.00
html/document_fragment/visitor/compare/fold_span 229610 ns/iter (± 1813) 231065 ns/iter (± 1271) 0.99
html/document_fragment/visitor/compare/fold_span_panic 277453 ns/iter (± 879) 279834 ns/iter (± 1847) 0.99
html/lexer/css_2021_spec 12896365 ns/iter (± 144676) 12871129 ns/iter (± 232636) 1.00
html/lexer/github_com_17_05_2022 4989622 ns/iter (± 12965) 4989138 ns/iter (± 6176) 1.00
html/lexer/stackoverflow_com_17_05_2022 4709761 ns/iter (± 18686) 4708761 ns/iter (± 7592) 1.00
html/parser/parser_document/css_2021_spec 25636156 ns/iter (± 102454) 25447948 ns/iter (± 791030) 1.01
html/parser/parser_document/github_com_17_05_2022 8542793 ns/iter (± 67702) 8494947 ns/iter (± 13462) 1.01
html/parser/parser_document/stackoverflow_com_17_05_2022 7602501 ns/iter (± 17499) 7361921 ns/iter (± 21831) 1.03
html/parser/parser_document_fragment/css_2021_spec 25360044 ns/iter (± 52320) 25284271 ns/iter (± 71833) 1.00
html/parser/parser_document_fragment/github_com_17_05_2022 8525349 ns/iter (± 18536) 8486656 ns/iter (± 12724) 1.00
html/parser/parser_document_fragment/stackoverflow_com_17_05_2022 7507545 ns/iter (± 14817) 7366622 ns/iter (± 6105) 1.02

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

Please sign in to comment.