Skip to content

Commit

Permalink
perf(es/minifier): Make pure function check O(1) (#6840)
Browse files Browse the repository at this point in the history
  • Loading branch information
hyf0 committed Jan 24, 2023
1 parent 05724e5 commit 58208ef
Show file tree
Hide file tree
Showing 2 changed files with 124 additions and 9 deletions.
56 changes: 47 additions & 9 deletions crates/swc_ecma_minifier/src/metadata/mod.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
use std::hash::Hash;

use rustc_hash::FxHashSet;
use swc_common::{
comments::{Comment, CommentKind, Comments},
EqIgnoreSpan, Span, SyntaxContext,
Expand All @@ -11,6 +14,37 @@ use swc_ecma_visit::{

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 @@ -21,10 +55,18 @@ pub(crate) fn info_marker<'a>(
marks: Marks,
// unresolved_mark: Mark,
) -> impl 'a + VisitMut {
let pure_funcs = options.map(|options| {
options
.pure_funcs
.iter()
.map(|f| HashEqIgnoreSpanExprRef(f))
.collect()
});
InfoMarker {
options,
comments,
marks,
pure_funcs,
// unresolved_mark,
state: Default::default(),
}
Expand All @@ -37,8 +79,9 @@ struct State {
}

struct InfoMarker<'a> {
#[allow(dead_code)]
options: Option<&'a CompressOptions>,

pure_funcs: Option<FxHashSet<HashEqIgnoreSpanExprRef<'a>>>,
comments: Option<&'a dyn Comments>,
marks: Marks,
// unresolved_mark: Mark,
Expand Down Expand Up @@ -124,17 +167,12 @@ impl VisitMut for InfoMarker<'_> {

if self.has_pure(n.span) {
n.span = n.span.apply_mark(self.marks.pure);
} else if let Some(options) = self.options {
} else if let Some(pure_fns) = &self.pure_funcs {
if let Callee::Expr(e) = &n.callee {
// Check for pure_funcs

if options
.pure_funcs
.iter()
.any(|pure_func| Ident::within_ignored_ctxt(|| e.eq_ignore_span(pure_func)))
{
if pure_fns.contains(&HashEqIgnoreSpanExprRef(e)) {
n.span = n.span.apply_mark(self.marks.pure);
}
};
}
}
}
Expand Down
77 changes: 77 additions & 0 deletions crates/swc_ecma_minifier/src/metadata/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -158,3 +158,80 @@
// 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();
}

1 comment on commit 58208ef

@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: 58208ef Previous: 2fcab36 Ratio
es/full/bugs-1 304042 ns/iter (± 7616) 321557 ns/iter (± 10914) 0.95
es/full/minify/libraries/antd 1697341209 ns/iter (± 33496931) 1668519163 ns/iter (± 35434516) 1.02
es/full/minify/libraries/d3 310677891 ns/iter (± 11787282) 315110087 ns/iter (± 6007832) 0.99
es/full/minify/libraries/echarts 1291326383 ns/iter (± 26789554) 1285025451 ns/iter (± 16462052) 1.00
es/full/minify/libraries/jquery 89475103 ns/iter (± 1481618) 92723438 ns/iter (± 975462) 0.96
es/full/minify/libraries/lodash 106076192 ns/iter (± 2230072) 112218570 ns/iter (± 2315637) 0.95
es/full/minify/libraries/moment 53662734 ns/iter (± 764142) 54297318 ns/iter (± 1216346) 0.99
es/full/minify/libraries/react 19470713 ns/iter (± 457939) 19791513 ns/iter (± 446583) 0.98
es/full/minify/libraries/terser 254593056 ns/iter (± 2800410) 259401722 ns/iter (± 6092179) 0.98
es/full/minify/libraries/three 458670387 ns/iter (± 11587398) 473053816 ns/iter (± 5503219) 0.97
es/full/minify/libraries/typescript 3311654190 ns/iter (± 27382124) 3116595241 ns/iter (± 16451125) 1.06
es/full/minify/libraries/victory 736094593 ns/iter (± 24128954) 709407776 ns/iter (± 14721500) 1.04
es/full/minify/libraries/vue 133354184 ns/iter (± 4396160) 135670650 ns/iter (± 1822740) 0.98
es/full/codegen/es3 25980 ns/iter (± 56) 26030 ns/iter (± 64) 1.00
es/full/codegen/es5 25987 ns/iter (± 80) 26136 ns/iter (± 98) 0.99
es/full/codegen/es2015 26036 ns/iter (± 47) 26099 ns/iter (± 87) 1.00
es/full/codegen/es2016 26027 ns/iter (± 69) 26088 ns/iter (± 64) 1.00
es/full/codegen/es2017 26061 ns/iter (± 81) 26092 ns/iter (± 80) 1.00
es/full/codegen/es2018 26043 ns/iter (± 82) 26084 ns/iter (± 60) 1.00
es/full/codegen/es2019 26031 ns/iter (± 65) 26105 ns/iter (± 63) 1.00
es/full/codegen/es2020 26007 ns/iter (± 61) 26122 ns/iter (± 53) 1.00
es/full/all/es3 173935215 ns/iter (± 1912952) 174573122 ns/iter (± 2853339) 1.00
es/full/all/es5 164247729 ns/iter (± 1816402) 169288610 ns/iter (± 2773386) 0.97
es/full/all/es2015 129516962 ns/iter (± 2479380) 128396844 ns/iter (± 5775762) 1.01
es/full/all/es2016 124315461 ns/iter (± 1871006) 125181268 ns/iter (± 951978) 0.99
es/full/all/es2017 124771175 ns/iter (± 2085349) 124278251 ns/iter (± 2328736) 1.00
es/full/all/es2018 120135938 ns/iter (± 1279695) 123849794 ns/iter (± 4153098) 0.97
es/full/all/es2019 120886051 ns/iter (± 1643074) 121851401 ns/iter (± 1372274) 0.99
es/full/all/es2020 116367373 ns/iter (± 1376361) 117408135 ns/iter (± 2544623) 0.99
es/full/parser 541588 ns/iter (± 7687) 529082 ns/iter (± 8607) 1.02
es/full/base/fixer 22266 ns/iter (± 40) 22013 ns/iter (± 24) 1.01
es/full/base/resolver_and_hygiene 79799 ns/iter (± 178) 80033 ns/iter (± 55) 1.00
serialization of ast node 145 ns/iter (± 0) 144 ns/iter (± 0) 1.01
serialization of serde 129 ns/iter (± 0) 129 ns/iter (± 0) 1
css/minify/libraries/bootstrap 27784144 ns/iter (± 70407) 28729582 ns/iter (± 227224) 0.97
css/visitor/compare/clone 2044344 ns/iter (± 21104) 2083437 ns/iter (± 19105) 0.98
css/visitor/compare/visit_mut_span 2255976 ns/iter (± 9404) 2264100 ns/iter (± 7524) 1.00
css/visitor/compare/visit_mut_span_panic 2291174 ns/iter (± 4535) 2317593 ns/iter (± 12102) 0.99
css/visitor/compare/fold_span 3042259 ns/iter (± 22444) 3032203 ns/iter (± 19886) 1.00
css/visitor/compare/fold_span_panic 3169527 ns/iter (± 16426) 3177365 ns/iter (± 22859) 1.00
css/lexer/bootstrap_5_1_3 5175356 ns/iter (± 7874) 5198031 ns/iter (± 3704) 1.00
css/lexer/foundation_6_7_4 4346645 ns/iter (± 1062) 4382799 ns/iter (± 9143) 0.99
css/lexer/tailwind_3_1_1 827865 ns/iter (± 698) 830751 ns/iter (± 149) 1.00
css/parser/bootstrap_5_1_3 21541748 ns/iter (± 37949) 22386179 ns/iter (± 266207) 0.96
css/parser/foundation_6_7_4 17234952 ns/iter (± 19564) 17645858 ns/iter (± 129201) 0.98
css/parser/tailwind_3_1_1 3320197 ns/iter (± 3392) 3336717 ns/iter (± 3241) 1.00
es/codegen/colors 333957 ns/iter (± 185971) 324360 ns/iter (± 180685) 1.03
es/codegen/large 1195267 ns/iter (± 603067) 1039910 ns/iter (± 522806) 1.15
es/codegen/with-parser/colors 48816 ns/iter (± 611) 48751 ns/iter (± 358) 1.00
es/codegen/with-parser/large 536975 ns/iter (± 901) 536171 ns/iter (± 1622) 1.00
es/minify/libraries/antd 1484395715 ns/iter (± 35712197) 1537155157 ns/iter (± 21729625) 0.97
es/minify/libraries/d3 249546710 ns/iter (± 7816901) 297967328 ns/iter (± 5505681) 0.84
es/minify/libraries/echarts 1107616059 ns/iter (± 19150725) 1170429301 ns/iter (± 13381439) 0.95
es/minify/libraries/jquery 77964967 ns/iter (± 970778) 86907875 ns/iter (± 1965917) 0.90
es/minify/libraries/lodash 94835303 ns/iter (± 1346567) 104035439 ns/iter (± 2066640) 0.91
es/minify/libraries/moment 45699776 ns/iter (± 724477) 50237720 ns/iter (± 973120) 0.91
es/minify/libraries/react 17065892 ns/iter (± 207745) 18450758 ns/iter (± 442441) 0.92
es/minify/libraries/terser 218694150 ns/iter (± 5395643) 251125011 ns/iter (± 4498516) 0.87
es/minify/libraries/three 414150589 ns/iter (± 28586603) 434331597 ns/iter (± 5931041) 0.95
es/minify/libraries/typescript 2798500630 ns/iter (± 31168072) 2771728614 ns/iter (± 28615599) 1.01
es/minify/libraries/victory 605112117 ns/iter (± 17534551) 674886263 ns/iter (± 15284072) 0.90
es/minify/libraries/vue 119519259 ns/iter (± 2295847) 129296400 ns/iter (± 4188119) 0.92
es/visitor/compare/clone 2392669 ns/iter (± 28008) 2457597 ns/iter (± 12641) 0.97
es/visitor/compare/visit_mut_span 2768821 ns/iter (± 4272) 2906251 ns/iter (± 49186) 0.95
es/visitor/compare/visit_mut_span_panic 2824949 ns/iter (± 6127) 2924779 ns/iter (± 64171) 0.97
es/visitor/compare/fold_span 3953867 ns/iter (± 20775) 3968741 ns/iter (± 9924) 1.00
es/visitor/compare/fold_span_panic 4104881 ns/iter (± 15902) 4144360 ns/iter (± 15445) 0.99
es/lexer/colors 17211 ns/iter (± 4) 17237 ns/iter (± 23) 1.00
es/lexer/angular 8248286 ns/iter (± 5745) 8249071 ns/iter (± 51443) 1.00
es/lexer/backbone 1078069 ns/iter (± 364) 1078941 ns/iter (± 729) 1.00
es/lexer/jquery 5964112 ns/iter (± 1937) 5978628 ns/iter (± 1575) 1.00
es/lexer/jquery mobile 9210186 ns/iter (± 8822) 9198977 ns/iter (± 3107) 1.00
es/lexer/mootools 4670837 ns/iter (± 5924) 4673872 ns/iter (± 765) 1.00
es/lexer/underscore 898599 ns/iter (± 305) 898943 ns/iter (± 257) 1.00
es/lexer/three 27969090 ns/iter (± 21304) 27949661 ns/iter (± 107321) 1.00
es/lexer/yui 5046272 ns/iter (± 1202) 5067751 ns/iter (± 3057) 1.00
es/parser/colors 31042 ns/iter (± 142) 31023 ns/iter (± 151) 1.00
es/parser/angular 15791870 ns/iter (± 222657) 16035739 ns/iter (± 192956) 0.98
es/parser/backbone 2348126 ns/iter (± 9130) 2353938 ns/iter (± 12834) 1.00
es/parser/jquery 12681005 ns/iter (± 93289) 12926756 ns/iter (± 195716) 0.98
es/parser/jquery mobile 19954730 ns/iter (± 591955) 20950597 ns/iter (± 276039) 0.95
es/parser/mootools 9688800 ns/iter (± 22569) 9837816 ns/iter (± 53637) 0.98
es/parser/underscore 1982540 ns/iter (± 12973) 1997449 ns/iter (± 11492) 0.99
es/parser/three 59920268 ns/iter (± 1382470) 60341528 ns/iter (± 178036) 0.99
es/parser/yui 9640992 ns/iter (± 87145) 9772495 ns/iter (± 68152) 0.99
es/preset-env/usage/builtin_type 140481 ns/iter (± 31474) 140354 ns/iter (± 31416) 1.00
es/preset-env/usage/property 21987 ns/iter (± 62) 20891 ns/iter (± 65) 1.05
es/resolver/typescript 119216796 ns/iter (± 1714393) 110107942 ns/iter (± 5005137) 1.08
es/fixer/typescript 94241182 ns/iter (± 1690940) 85569170 ns/iter (± 1058470) 1.10
es/hygiene/typescript 200271782 ns/iter (± 2469436) 183160010 ns/iter (± 8693575) 1.09
es/resolver_with_hygiene/typescript 338899141 ns/iter (± 5760799) 321915229 ns/iter (± 3708612) 1.05
es/visitor/base-perf/module_clone 75065 ns/iter (± 1405) 76160 ns/iter (± 901) 0.99
es/visitor/base-perf/fold_empty 85216 ns/iter (± 2169) 85610 ns/iter (± 1699) 1.00
es/visitor/base-perf/fold_noop_impl_all 86372 ns/iter (± 1947) 85928 ns/iter (± 1031) 1.01
es/visitor/base-perf/fold_noop_impl_vec 87015 ns/iter (± 1604) 86085 ns/iter (± 1887) 1.01
es/visitor/base-perf/boxing_boxed_clone 55 ns/iter (± 0) 56 ns/iter (± 0) 0.98
es/visitor/base-perf/boxing_unboxed_clone 59 ns/iter (± 0) 59 ns/iter (± 0) 1
es/visitor/base-perf/boxing_boxed 102 ns/iter (± 0) 103 ns/iter (± 0) 0.99
es/visitor/base-perf/boxing_unboxed 104 ns/iter (± 0) 103 ns/iter (± 0) 1.01
es/visitor/base-perf/visit_contains_this 3437 ns/iter (± 92) 3502 ns/iter (± 56) 0.98
es/base/parallel/resolver/typescript 5150120026 ns/iter (± 473726908) 4962802539 ns/iter (± 357436665) 1.04
es/base/parallel/hygiene/typescript 2402141318 ns/iter (± 51083476) 2126863199 ns/iter (± 28291136) 1.13
misc/visitors/time-complexity/time 5 92 ns/iter (± 0) 92 ns/iter (± 0) 1
misc/visitors/time-complexity/time 10 312 ns/iter (± 0) 326 ns/iter (± 14) 0.96
misc/visitors/time-complexity/time 15 600 ns/iter (± 3) 600 ns/iter (± 0) 1
misc/visitors/time-complexity/time 20 1122 ns/iter (± 0) 1143 ns/iter (± 17) 0.98
misc/visitors/time-complexity/time 40 6038 ns/iter (± 72) 5922 ns/iter (± 3) 1.02
misc/visitors/time-complexity/time 60 15192 ns/iter (± 57) 15235 ns/iter (± 55) 1.00
es/full-target/es2016 188058 ns/iter (± 459) 188171 ns/iter (± 759) 1.00
es/full-target/es2017 182711 ns/iter (± 581) 182247 ns/iter (± 538) 1.00
es/full-target/es2018 172673 ns/iter (± 441) 171575 ns/iter (± 225) 1.01
es2020_nullish_coalescing 67248 ns/iter (± 101) 67554 ns/iter (± 224) 1.00
es2020_optional_chaining 104533 ns/iter (± 9584) 95398 ns/iter (± 4304) 1.10
es2022_class_properties 93493 ns/iter (± 202) 93723 ns/iter (± 120) 1.00
es2018_object_rest_spread 71970 ns/iter (± 103) 71942 ns/iter (± 114) 1.00
es2019_optional_catch_binding 61553 ns/iter (± 76) 61951 ns/iter (± 84) 0.99
es2017_async_to_generator 62064 ns/iter (± 130) 62205 ns/iter (± 170) 1.00
es2016_exponentiation 65845 ns/iter (± 203) 65760 ns/iter (± 134) 1.00
es2015_arrow 70574 ns/iter (± 257) 70486 ns/iter (± 143) 1.00
es2015_block_scoped_fn 66711 ns/iter (± 162) 67060 ns/iter (± 159) 0.99
es2015_block_scoping 159559 ns/iter (± 11132) 139734 ns/iter (± 779) 1.14
es2015_classes 117163 ns/iter (± 348) 116979 ns/iter (± 439) 1.00
es2015_computed_props 61695 ns/iter (± 176) 61489 ns/iter (± 84) 1.00
es2015_destructuring 115959 ns/iter (± 285) 115256 ns/iter (± 185) 1.01
es2015_duplicate_keys 63950 ns/iter (± 136) 63637 ns/iter (± 77) 1.00
es2015_parameters 80024 ns/iter (± 222) 79808 ns/iter (± 155) 1.00
es2015_fn_name 67018 ns/iter (± 427) 66948 ns/iter (± 447) 1.00
es2015_for_of 64755 ns/iter (± 80) 64428 ns/iter (± 146) 1.01
es2015_instanceof 63389 ns/iter (± 101) 63128 ns/iter (± 97) 1.00
es2015_shorthand_property 61440 ns/iter (± 137) 61248 ns/iter (± 133) 1.00
es2015_spread 61534 ns/iter (± 92) 61587 ns/iter (± 102) 1.00
es2015_sticky_regex 62943 ns/iter (± 106) 62709 ns/iter (± 82) 1.00
es2015_typeof_symbol 62998 ns/iter (± 104) 62734 ns/iter (± 98) 1.00
es/transform/baseline/base 52354 ns/iter (± 93) 52291 ns/iter (± 129) 1.00
es/transform/baseline/common_reserved_word 63404 ns/iter (± 150) 63148 ns/iter (± 72) 1.00
es/transform/baseline/common_typescript 168974 ns/iter (± 218) 143179 ns/iter (± 209) 1.18
es/target/es3 169908 ns/iter (± 323) 169126 ns/iter (± 242) 1.00
es/target/es2015 631232 ns/iter (± 1493) 629006 ns/iter (± 1225) 1.00
es/target/es2016 65965 ns/iter (± 100) 65785 ns/iter (± 84) 1.00
es/target/es2017 62163 ns/iter (± 101) 62174 ns/iter (± 149) 1.00
es/target/es2018 82517 ns/iter (± 121) 82021 ns/iter (± 154) 1.01
es/target/es2020 132705 ns/iter (± 181) 132047 ns/iter (± 275) 1.00
babelify-only 677891 ns/iter (± 4704) 666628 ns/iter (± 1211) 1.02
parse_and_babelify_angular 45783442 ns/iter (± 1043874) 43472387 ns/iter (± 1072533) 1.05
parse_and_babelify_backbone 5438737 ns/iter (± 93810) 5656513 ns/iter (± 110737) 0.96
parse_and_babelify_jquery 33353744 ns/iter (± 919262) 32723021 ns/iter (± 1202414) 1.02
parse_and_babelify_jquery_mobile 56289671 ns/iter (± 703720) 55234832 ns/iter (± 712782) 1.02
parse_and_babelify_mootools 35505019 ns/iter (± 696914) 33571229 ns/iter (± 719651) 1.06
parse_and_babelify_underscore 4433673 ns/iter (± 79227) 4397942 ns/iter (± 33702) 1.01
parse_and_babelify_yui 33678938 ns/iter (± 524357) 32726714 ns/iter (± 556812) 1.03
html/minify/document/css_spec 42191367 ns/iter (± 665097) 42333651 ns/iter (± 343977) 1.00
html/minify/document/github 17606807 ns/iter (± 47419) 17518404 ns/iter (± 65608) 1.01
html/minify/document/stackoverflow 15756590 ns/iter (± 92278) 15766279 ns/iter (± 44208) 1.00
html/minify/document_fragment/css_spec 40550779 ns/iter (± 252070) 41116131 ns/iter (± 666548) 0.99
html/minify/document_fragment/github 16897434 ns/iter (± 32071) 16846675 ns/iter (± 90585) 1.00
html/minify/document_fragment/stackoverflow 15523951 ns/iter (± 127887) 15333915 ns/iter (± 68027) 1.01
html/document/visitor/compare/clone 337399 ns/iter (± 1954) 345646 ns/iter (± 2559) 0.98
html/document/visitor/compare/visit_mut_span 366446 ns/iter (± 1948) 371653 ns/iter (± 1770) 0.99
html/document/visitor/compare/visit_mut_span_panic 372046 ns/iter (± 1913) 373676 ns/iter (± 4055) 1.00
html/document/visitor/compare/fold_span 401462 ns/iter (± 1549) 410634 ns/iter (± 2673) 0.98
html/document/visitor/compare/fold_span_panic 460486 ns/iter (± 1698) 461612 ns/iter (± 2523) 1.00
html/document_fragment/visitor/compare/clone 338027 ns/iter (± 2419) 342228 ns/iter (± 1787) 0.99
html/document_fragment/visitor/compare/visit_mut_span 365831 ns/iter (± 2084) 367177 ns/iter (± 1493) 1.00
html/document_fragment/visitor/compare/visit_mut_span_panic 376275 ns/iter (± 1837) 374825 ns/iter (± 2161) 1.00
html/document_fragment/visitor/compare/fold_span 406182 ns/iter (± 1303) 404010 ns/iter (± 1646) 1.01
html/document_fragment/visitor/compare/fold_span_panic 461453 ns/iter (± 2194) 460055 ns/iter (± 1664) 1.00
html/lexer/css_2021_spec 15558049 ns/iter (± 12346) 15590448 ns/iter (± 13932) 1.00
html/lexer/github_com_17_05_2022 6027918 ns/iter (± 1963) 6031193 ns/iter (± 6229) 1.00
html/lexer/stackoverflow_com_17_05_2022 5638412 ns/iter (± 2341) 5641766 ns/iter (± 6842) 1.00
html/parser/parser_document/css_2021_spec 26166601 ns/iter (± 394197) 25567485 ns/iter (± 379378) 1.02
html/parser/parser_document/github_com_17_05_2022 8754306 ns/iter (± 6683) 8759125 ns/iter (± 7686) 1.00
html/parser/parser_document/stackoverflow_com_17_05_2022 7704959 ns/iter (± 16564) 7787958 ns/iter (± 4861) 0.99
html/parser/parser_document_fragment/css_2021_spec 25950702 ns/iter (± 333872) 25640157 ns/iter (± 95568) 1.01
html/parser/parser_document_fragment/github_com_17_05_2022 8741806 ns/iter (± 10340) 8770784 ns/iter (± 12983) 1.00
html/parser/parser_document_fragment/stackoverflow_com_17_05_2022 7697667 ns/iter (± 4958) 7775289 ns/iter (± 11231) 0.99

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

Please sign in to comment.