Skip to content

Commit

Permalink
perf(es/minifier): Use rope-like structure for the name mangler (#6661)
Browse files Browse the repository at this point in the history
  • Loading branch information
kdy1 committed Dec 15, 2022
1 parent 8e929ce commit cb4173a
Show file tree
Hide file tree
Showing 3 changed files with 75 additions and 18 deletions.
1 change: 1 addition & 0 deletions crates/swc_ecma_transforms_base/src/rename/analyzer/mod.rs
Expand Up @@ -3,6 +3,7 @@ use swc_ecma_visit::{noop_visit_type, Visit, VisitWith};

use self::scope::Scope;

mod reverse_map;
pub(super) mod scope;

#[derive(Debug, Default)]
Expand Down
47 changes: 47 additions & 0 deletions crates/swc_ecma_transforms_base/src/rename/analyzer/reverse_map.rs
@@ -0,0 +1,47 @@
use rustc_hash::FxHashMap;

use super::scope::{FastId, FastJsWord};

#[derive(Debug, Default)]
pub(crate) struct ReverseMap<'a> {
prev: Option<&'a ReverseMap<'a>>,

inner: FxHashMap<FastJsWord, Vec<FastId>>,
}

impl ReverseMap<'_> {
pub fn push_entry(&mut self, key: FastJsWord, id: FastId) {
self.inner.entry(key).or_default().push(id);
}

fn iter(&self) -> Iter {
Iter { cur: Some(self) }
}

pub fn get<'a>(&'a self, key: &'a FastJsWord) -> impl Iterator<Item = &'a FastId> + 'a {
self.iter()
.filter_map(|v| v.inner.get(key))
.flat_map(|v| v.iter())
}

pub fn next(&self) -> ReverseMap {
ReverseMap {
prev: Some(self),
..Default::default()
}
}
}

pub(crate) struct Iter<'a> {
cur: Option<&'a ReverseMap<'a>>,
}

impl<'a> Iterator for Iter<'a> {
type Item = &'a ReverseMap<'a>;

fn next(&mut self) -> Option<Self::Item> {
let cur = self.cur.take()?;
self.cur = cur.prev;
Some(cur)
}
}
45 changes: 27 additions & 18 deletions crates/swc_ecma_transforms_base/src/rename/analyzer/scope.rs
@@ -1,15 +1,19 @@
#![allow(clippy::too_many_arguments)]

use std::mem::{transmute_copy, ManuallyDrop};
use std::{
fmt::{Display, Formatter},
mem::{transmute_copy, ManuallyDrop},
};

#[cfg(feature = "concurrent-renamer")]
use rayon::prelude::*;
use rustc_hash::{FxHashMap, FxHashSet};
use rustc_hash::FxHashSet;
use swc_atoms::{js_word, JsWord};
use swc_common::{collections::AHashMap, util::take::Take, SyntaxContext};
use swc_ecma_ast::*;
use tracing::debug;

use super::reverse_map::ReverseMap;
use crate::rename::Renamer;

#[derive(Debug, Default)]
Expand All @@ -32,6 +36,12 @@ impl Clone for FastJsWord {
}
}

impl Display for FastJsWord {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
Display::fmt(&*self.0, f)
}
}

impl FastJsWord {
pub fn new(src: JsWord) -> Self {
FastJsWord(ManuallyDrop::new(src))
Expand All @@ -46,8 +56,6 @@ pub(crate) type FastId = (FastJsWord, SyntaxContext);

pub(crate) type RenameMap = AHashMap<FastId, JsWord>;

pub(crate) type ReverseMap = FxHashMap<JsWord, Vec<FastId>>;

#[derive(Debug, Default)]
pub(super) struct ScopeData {
/// This is add-only.
Expand Down Expand Up @@ -151,35 +159,34 @@ impl Scope {
if preserved_symbols.contains(&sym) {
continue;
}
let sym = FastJsWord::new(sym);

if self.can_rename(&id, &sym, reverse) {
if cfg!(debug_assertions) {
debug!("Renaming `{}{:?}` to `{}`", id.0, id.1, sym);
}

let fid = fast_id(id);
to.insert(fid.clone(), sym.clone());
reverse.entry(sym).or_default().push(fid);
reverse.push_entry(sym.clone(), fid.clone());
to.insert(fid, sym.into_inner());

break;
}
}
}
}

fn can_rename(&self, id: &Id, symbol: &JsWord, reverse: &ReverseMap) -> bool {
fn can_rename(&self, id: &Id, symbol: &FastJsWord, reverse: &ReverseMap) -> bool {
// We can optimize this
// We only need to check the current scope and parents (ignoring `a` generated
// for unrelated scopes)
if let Some(lefts) = reverse.get(symbol) {
for left in lefts {
if left.1 == id.1 && *left.0 .0 == id.0 {
continue;
}
for left in reverse.get(symbol) {
if left.1 == id.1 && *left.0 .0 == id.0 {
continue;
}

if self.data.all.contains(left) {
return false;
}
if self.data.all.contains(left) {
return false;
}
}

Expand All @@ -201,7 +208,7 @@ impl Scope {
{
let queue = self.data.queue.take();

let mut cloned_reverse = reverse.clone();
let mut cloned_reverse = reverse.next();

self.rename_one_scope_in_mangle_mode(
renamer,
Expand Down Expand Up @@ -289,15 +296,17 @@ impl Scope {
continue;
}

let sym = FastJsWord::new(sym);

if self.can_rename(&id, &sym, reverse) {
#[cfg(debug_assertions)]
{
debug!("mangle: `{}{:?}` -> {}", id.0, id.1, sym);
}

let fid = fast_id(id.clone());
to.insert(fid.clone(), sym.clone());
reverse.entry(sym).or_default().push(fid.clone());
reverse.push_entry(sym.clone(), fid.clone());
to.insert(fid.clone(), sym.into_inner());
// self.data.decls.remove(&id);
// self.data.usages.remove(&id);

Expand Down

1 comment on commit cb4173a

@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: cb4173a Previous: bb9fab8 Ratio
es/full/bugs-1 307549 ns/iter (± 17103) 294436 ns/iter (± 18672) 1.04
es/full/minify/libraries/antd 1747643644 ns/iter (± 19341265) 1682929952 ns/iter (± 22010166) 1.04
es/full/minify/libraries/d3 313284816 ns/iter (± 4775108) 355263299 ns/iter (± 6437494) 0.88
es/full/minify/libraries/echarts 1354874075 ns/iter (± 12750915) 1392993601 ns/iter (± 13312952) 0.97
es/full/minify/libraries/jquery 92036818 ns/iter (± 776717) 91520549 ns/iter (± 874153) 1.01
es/full/minify/libraries/lodash 107803067 ns/iter (± 793937) 109655120 ns/iter (± 910534) 0.98
es/full/minify/libraries/moment 53624495 ns/iter (± 356373) 53472926 ns/iter (± 381720) 1.00
es/full/minify/libraries/react 19217933 ns/iter (± 334353) 19432660 ns/iter (± 120930) 0.99
es/full/minify/libraries/terser 257417945 ns/iter (± 2765754) 256302558 ns/iter (± 3615254) 1.00
es/full/minify/libraries/three 491971444 ns/iter (± 5626645) 472979053 ns/iter (± 9766481) 1.04
es/full/minify/libraries/typescript 3343596629 ns/iter (± 36374127) 3131604239 ns/iter (± 27741782) 1.07
es/full/minify/libraries/victory 755861182 ns/iter (± 15794788) 735437178 ns/iter (± 8807430) 1.03
es/full/minify/libraries/vue 132540867 ns/iter (± 2237567) 140084586 ns/iter (± 1289782) 0.95
es/full/codegen/es3 27342 ns/iter (± 60) 27338 ns/iter (± 44) 1.00
es/full/codegen/es5 27224 ns/iter (± 48) 27310 ns/iter (± 53) 1.00
es/full/codegen/es2015 27206 ns/iter (± 75) 27316 ns/iter (± 39) 1.00
es/full/codegen/es2016 27199 ns/iter (± 58) 27258 ns/iter (± 37) 1.00
es/full/codegen/es2017 27159 ns/iter (± 64) 27366 ns/iter (± 35) 0.99
es/full/codegen/es2018 27169 ns/iter (± 72) 27296 ns/iter (± 37) 1.00
es/full/codegen/es2019 27196 ns/iter (± 38) 27338 ns/iter (± 57) 0.99
es/full/codegen/es2020 27183 ns/iter (± 58) 27291 ns/iter (± 58) 1.00
es/full/all/es3 165807884 ns/iter (± 2838023) 166551369 ns/iter (± 2324597) 1.00
es/full/all/es5 159599653 ns/iter (± 1206851) 158377352 ns/iter (± 1348868) 1.01
es/full/all/es2015 119457396 ns/iter (± 651824) 118910261 ns/iter (± 759066) 1.00
es/full/all/es2016 118742186 ns/iter (± 754297) 117633050 ns/iter (± 698753) 1.01
es/full/all/es2017 117044212 ns/iter (± 946954) 117200000 ns/iter (± 800425) 1.00
es/full/all/es2018 115900335 ns/iter (± 625258) 115294995 ns/iter (± 749570) 1.01
es/full/all/es2019 115242257 ns/iter (± 757364) 114894506 ns/iter (± 1060860) 1.00
es/full/all/es2020 110804480 ns/iter (± 773503) 110434503 ns/iter (± 742005) 1.00
es/full/parser 517522 ns/iter (± 8407) 500817 ns/iter (± 8391) 1.03
es/full/base/fixer 21674 ns/iter (± 24) 21928 ns/iter (± 122) 0.99
es/full/base/resolver_and_hygiene 77950 ns/iter (± 400) 77659 ns/iter (± 173) 1.00
serialization of ast node 138 ns/iter (± 0) 138 ns/iter (± 0) 1
serialization of serde 124 ns/iter (± 0) 124 ns/iter (± 0) 1
css/minify/libraries/bootstrap 27171931 ns/iter (± 159908) 26887820 ns/iter (± 102574) 1.01
css/visitor/compare/clone 2052928 ns/iter (± 16640) 2075951 ns/iter (± 9801) 0.99
css/visitor/compare/visit_mut_span 2254912 ns/iter (± 5824) 2273458 ns/iter (± 10834) 0.99
css/visitor/compare/visit_mut_span_panic 2302595 ns/iter (± 3875) 2338348 ns/iter (± 9293) 0.98
css/visitor/compare/fold_span 3014376 ns/iter (± 22136) 3043917 ns/iter (± 31390) 0.99
css/visitor/compare/fold_span_panic 3140004 ns/iter (± 21920) 3168852 ns/iter (± 31699) 0.99
css/lexer/bootstrap_5_1_3 5195876 ns/iter (± 5685) 5192281 ns/iter (± 3829) 1.00
css/lexer/foundation_6_7_4 4411955 ns/iter (± 5414) 4412449 ns/iter (± 2479) 1.00
css/lexer/tailwind_3_1_1 827014 ns/iter (± 921) 826178 ns/iter (± 2449) 1.00
css/parser/bootstrap_5_1_3 20795778 ns/iter (± 92331) 20596008 ns/iter (± 67809) 1.01
css/parser/foundation_6_7_4 16614590 ns/iter (± 358718) 16520169 ns/iter (± 85931) 1.01
css/parser/tailwind_3_1_1 3191332 ns/iter (± 1817) 3179605 ns/iter (± 14653) 1.00
es/codegen/colors 322832 ns/iter (± 181265) 332505 ns/iter (± 184587) 0.97
es/codegen/large 1222619 ns/iter (± 648829) 1214663 ns/iter (± 638499) 1.01
es/codegen/with-parser/colors 46444 ns/iter (± 185) 46525 ns/iter (± 308) 1.00
es/codegen/with-parser/large 506151 ns/iter (± 792) 507275 ns/iter (± 3069) 1.00
es/minify/libraries/antd 1537765646 ns/iter (± 17495496) 1426407874 ns/iter (± 35008575) 1.08
es/minify/libraries/d3 270564678 ns/iter (± 2546261) 291770407 ns/iter (± 8919424) 0.93
es/minify/libraries/echarts 1168670568 ns/iter (± 8739553) 1234274153 ns/iter (± 18205554) 0.95
es/minify/libraries/jquery 79049173 ns/iter (± 402012) 78429729 ns/iter (± 462202) 1.01
es/minify/libraries/lodash 97178072 ns/iter (± 654722) 96527179 ns/iter (± 810436) 1.01
es/minify/libraries/moment 46448220 ns/iter (± 557728) 45601333 ns/iter (± 409756) 1.02
es/minify/libraries/react 17132418 ns/iter (± 178791) 17188800 ns/iter (± 48269) 1.00
es/minify/libraries/terser 221322840 ns/iter (± 1344115) 217834267 ns/iter (± 5117316) 1.02
es/minify/libraries/three 407318621 ns/iter (± 6715311) 375739149 ns/iter (± 8066482) 1.08
es/minify/libraries/typescript 2872945859 ns/iter (± 16800180) 2667070863 ns/iter (± 17619355) 1.08
es/minify/libraries/victory 661292915 ns/iter (± 13593674) 650161833 ns/iter (± 5953547) 1.02
es/minify/libraries/vue 120009351 ns/iter (± 1165564) 126373991 ns/iter (± 1633084) 0.95
es/visitor/compare/clone 2397189 ns/iter (± 32516) 2462465 ns/iter (± 54473) 0.97
es/visitor/compare/visit_mut_span 2820002 ns/iter (± 6403) 2829867 ns/iter (± 5572) 1.00
es/visitor/compare/visit_mut_span_panic 2895829 ns/iter (± 9637) 2870932 ns/iter (± 31975) 1.01
es/visitor/compare/fold_span 4073064 ns/iter (± 19496) 4024262 ns/iter (± 30676) 1.01
es/visitor/compare/fold_span_panic 4186693 ns/iter (± 40180) 4200530 ns/iter (± 62954) 1.00
es/lexer/colors 17301 ns/iter (± 11) 17202 ns/iter (± 8) 1.01
es/lexer/angular 8277733 ns/iter (± 3768) 8242882 ns/iter (± 7031) 1.00
es/lexer/backbone 1080932 ns/iter (± 653) 1072940 ns/iter (± 1007) 1.01
es/lexer/jquery 5989510 ns/iter (± 9387) 5954217 ns/iter (± 4914) 1.01
es/lexer/jquery mobile 9217453 ns/iter (± 8822) 9170690 ns/iter (± 76548) 1.01
es/lexer/mootools 4703594 ns/iter (± 6606) 4666905 ns/iter (± 1661) 1.01
es/lexer/underscore 903078 ns/iter (± 1696) 895575 ns/iter (± 432) 1.01
es/lexer/three 28083250 ns/iter (± 23122) 27956337 ns/iter (± 21218) 1.00
es/lexer/yui 5078391 ns/iter (± 4588) 5057986 ns/iter (± 4264) 1.00
es/parser/colors 31127 ns/iter (± 172) 31100 ns/iter (± 87) 1.00
es/parser/angular 16169038 ns/iter (± 216179) 16296176 ns/iter (± 221851) 0.99
es/parser/backbone 2329835 ns/iter (± 15506) 2307745 ns/iter (± 15186) 1.01
es/parser/jquery 12518000 ns/iter (± 69109) 12509076 ns/iter (± 173857) 1.00
es/parser/jquery mobile 19906042 ns/iter (± 165118) 20019512 ns/iter (± 245125) 0.99
es/parser/mootools 9577984 ns/iter (± 22266) 9518618 ns/iter (± 38550) 1.01
es/parser/underscore 1972276 ns/iter (± 9221) 1970016 ns/iter (± 13241) 1.00
es/parser/three 60737398 ns/iter (± 552253) 58861235 ns/iter (± 988584) 1.03
es/parser/yui 9722516 ns/iter (± 58254) 9668789 ns/iter (± 59036) 1.01
es/preset-env/usage/builtin_type 138109 ns/iter (± 29992) 139745 ns/iter (± 32025) 0.99
es/preset-env/usage/property 21520 ns/iter (± 119) 21622 ns/iter (± 116) 1.00
es/resolver/typescript 121828619 ns/iter (± 2534116) 112657650 ns/iter (± 5869324) 1.08
es/fixer/typescript 100484955 ns/iter (± 7791125) 88737974 ns/iter (± 3462499) 1.13
es/hygiene/typescript 199837365 ns/iter (± 767829) 174923076 ns/iter (± 1264461) 1.14
es/resolver_with_hygiene/typescript 340751107 ns/iter (± 1599241) 303966080 ns/iter (± 2716871) 1.12
es/visitor/base-perf/module_clone 76327 ns/iter (± 1135) 76881 ns/iter (± 926) 0.99
es/visitor/base-perf/fold_empty 86218 ns/iter (± 1582) 84810 ns/iter (± 1205) 1.02
es/visitor/base-perf/fold_noop_impl_all 85527 ns/iter (± 630) 85526 ns/iter (± 1294) 1.00
es/visitor/base-perf/fold_noop_impl_vec 86968 ns/iter (± 1212) 85464 ns/iter (± 1275) 1.02
es/visitor/base-perf/boxing_boxed_clone 56 ns/iter (± 0) 56 ns/iter (± 0) 1
es/visitor/base-perf/boxing_unboxed_clone 60 ns/iter (± 0) 59 ns/iter (± 0) 1.02
es/visitor/base-perf/boxing_boxed 102 ns/iter (± 0) 102 ns/iter (± 0) 1
es/visitor/base-perf/boxing_unboxed 108 ns/iter (± 0) 103 ns/iter (± 0) 1.05
es/visitor/base-perf/visit_contains_this 3560 ns/iter (± 95) 3532 ns/iter (± 53) 1.01
es/base/parallel/resolver/typescript 6119864528 ns/iter (± 453058491) 5417307049 ns/iter (± 559709080) 1.13
es/base/parallel/hygiene/typescript 2247701111 ns/iter (± 22222650) 2019229736 ns/iter (± 29826157) 1.11
misc/visitors/time-complexity/time 5 93 ns/iter (± 0) 94 ns/iter (± 0) 0.99
misc/visitors/time-complexity/time 10 331 ns/iter (± 4) 324 ns/iter (± 0) 1.02
misc/visitors/time-complexity/time 15 638 ns/iter (± 1) 649 ns/iter (± 13) 0.98
misc/visitors/time-complexity/time 20 1196 ns/iter (± 5) 1217 ns/iter (± 5) 0.98
misc/visitors/time-complexity/time 40 6149 ns/iter (± 10) 6171 ns/iter (± 20) 1.00
misc/visitors/time-complexity/time 60 15522 ns/iter (± 11) 15504 ns/iter (± 27) 1.00
es/full-target/es2016 189636 ns/iter (± 1289) 188499 ns/iter (± 1045) 1.01
es/full-target/es2017 183036 ns/iter (± 612) 182801 ns/iter (± 574) 1.00
es/full-target/es2018 172317 ns/iter (± 656) 171970 ns/iter (± 311) 1.00
es2020_nullish_coalescing 67161 ns/iter (± 188) 66432 ns/iter (± 152) 1.01
es2020_optional_chaining 95859 ns/iter (± 368) 95684 ns/iter (± 281) 1.00
es2022_class_properties 93487 ns/iter (± 166) 92974 ns/iter (± 125) 1.01
es2018_object_rest_spread 71647 ns/iter (± 120) 71432 ns/iter (± 142) 1.00
es2019_optional_catch_binding 60909 ns/iter (± 115) 60902 ns/iter (± 116) 1.00
es2017_async_to_generator 61540 ns/iter (± 125) 61542 ns/iter (± 193) 1.00
es2016_exponentiation 65125 ns/iter (± 90) 64302 ns/iter (± 153) 1.01
es2015_arrow 70293 ns/iter (± 281) 70195 ns/iter (± 247) 1.00
es2015_block_scoped_fn 65846 ns/iter (± 106) 65728 ns/iter (± 99) 1.00
es2015_block_scoping 153039 ns/iter (± 9249) 152273 ns/iter (± 9926) 1.01
es2015_classes 117250 ns/iter (± 455) 116749 ns/iter (± 483) 1.00
es2015_computed_props 60986 ns/iter (± 151) 61249 ns/iter (± 131) 1.00
es2015_destructuring 116234 ns/iter (± 795) 115586 ns/iter (± 501) 1.01
es2015_duplicate_keys 63729 ns/iter (± 80) 63812 ns/iter (± 104) 1.00
es2015_parameters 79609 ns/iter (± 130) 79481 ns/iter (± 205) 1.00
es2015_fn_name 66921 ns/iter (± 448) 66330 ns/iter (± 442) 1.01
es2015_for_of 64215 ns/iter (± 163) 63789 ns/iter (± 158) 1.01
es2015_instanceof 63376 ns/iter (± 135) 63006 ns/iter (± 155) 1.01
es2015_shorthand_property 61026 ns/iter (± 200) 60640 ns/iter (± 186) 1.01
es2015_spread 61113 ns/iter (± 125) 60779 ns/iter (± 236) 1.01
es2015_sticky_regex 62722 ns/iter (± 255) 61598 ns/iter (± 404) 1.02
es2015_typeof_symbol 62302 ns/iter (± 156) 61235 ns/iter (± 363) 1.02
es/transform/baseline/base 51825 ns/iter (± 126) 50836 ns/iter (± 337) 1.02
es/transform/baseline/common_reserved_word 62141 ns/iter (± 197) 61213 ns/iter (± 645) 1.02
es/transform/baseline/common_typescript 142944 ns/iter (± 165) 168027 ns/iter (± 9919) 0.85
es/target/es3 169271 ns/iter (± 416) 168926 ns/iter (± 317) 1.00
es/target/es2015 632907 ns/iter (± 1455) 628567 ns/iter (± 940) 1.01
es/target/es2016 65235 ns/iter (± 100) 64598 ns/iter (± 119) 1.01
es/target/es2017 61693 ns/iter (± 139) 61544 ns/iter (± 63) 1.00
es/target/es2018 81578 ns/iter (± 164) 81707 ns/iter (± 153) 1.00
es/target/es2020 132271 ns/iter (± 435) 132298 ns/iter (± 423) 1.00
babelify-only 671107 ns/iter (± 1558) 676449 ns/iter (± 5412) 0.99
parse_and_babelify_angular 45717147 ns/iter (± 894610) 43617700 ns/iter (± 1323660) 1.05
parse_and_babelify_backbone 5450147 ns/iter (± 52413) 5487939 ns/iter (± 46905) 0.99
parse_and_babelify_jquery 33290365 ns/iter (± 284656) 32504788 ns/iter (± 447983) 1.02
parse_and_babelify_jquery_mobile 57085374 ns/iter (± 525509) 55565622 ns/iter (± 1072970) 1.03
parse_and_babelify_mootools 34689749 ns/iter (± 223867) 33313681 ns/iter (± 432095) 1.04
parse_and_babelify_underscore 4368149 ns/iter (± 22565) 4370814 ns/iter (± 25748) 1.00
parse_and_babelify_yui 34397162 ns/iter (± 983371) 32557445 ns/iter (± 515317) 1.06
html/minify/document/css_spec 42316429 ns/iter (± 153518) 42067483 ns/iter (± 289318) 1.01
html/minify/document/github 17503163 ns/iter (± 56464) 17501483 ns/iter (± 46000) 1.00
html/minify/document/stackoverflow 15608511 ns/iter (± 50109) 15491201 ns/iter (± 48719) 1.01
html/minify/document_fragment/css_spec 40783326 ns/iter (± 133475) 39677040 ns/iter (± 257148) 1.03
html/minify/document_fragment/github 16794670 ns/iter (± 35438) 16734193 ns/iter (± 72746) 1.00
html/minify/document_fragment/stackoverflow 15219623 ns/iter (± 54089) 15151481 ns/iter (± 78267) 1.00
html/document/visitor/compare/clone 342927 ns/iter (± 2157) 337130 ns/iter (± 2597) 1.02
html/document/visitor/compare/visit_mut_span 363714 ns/iter (± 1807) 362307 ns/iter (± 1419) 1.00
html/document/visitor/compare/visit_mut_span_panic 374205 ns/iter (± 2336) 373646 ns/iter (± 1167) 1.00
html/document/visitor/compare/fold_span 403141 ns/iter (± 2523) 398408 ns/iter (± 1779) 1.01
html/document/visitor/compare/fold_span_panic 458588 ns/iter (± 2549) 465858 ns/iter (± 1782) 0.98
html/document_fragment/visitor/compare/clone 334030 ns/iter (± 1848) 337247 ns/iter (± 1851) 0.99
html/document_fragment/visitor/compare/visit_mut_span 363046 ns/iter (± 3489) 365285 ns/iter (± 2376) 0.99
html/document_fragment/visitor/compare/visit_mut_span_panic 372158 ns/iter (± 1811) 375328 ns/iter (± 3124) 0.99
html/document_fragment/visitor/compare/fold_span 402757 ns/iter (± 2100) 399443 ns/iter (± 1518) 1.01
html/document_fragment/visitor/compare/fold_span_panic 462885 ns/iter (± 2117) 457163 ns/iter (± 2796) 1.01
html/lexer/css_2021_spec 15551820 ns/iter (± 67920) 15536961 ns/iter (± 31091) 1.00
html/lexer/github_com_17_05_2022 6014614 ns/iter (± 5386) 6040970 ns/iter (± 14460) 1.00
html/lexer/stackoverflow_com_17_05_2022 5627358 ns/iter (± 7907) 5616909 ns/iter (± 1670) 1.00
html/parser/parser_document/css_2021_spec 25829958 ns/iter (± 137744) 26651772 ns/iter (± 392650) 0.97
html/parser/parser_document/github_com_17_05_2022 8793884 ns/iter (± 23491) 8797885 ns/iter (± 33020) 1.00
html/parser/parser_document/stackoverflow_com_17_05_2022 7713298 ns/iter (± 15061) 7710602 ns/iter (± 49959) 1.00
html/parser/parser_document_fragment/css_2021_spec 25804260 ns/iter (± 473366) 25755418 ns/iter (± 212978) 1.00
html/parser/parser_document_fragment/github_com_17_05_2022 8793308 ns/iter (± 19000) 8816610 ns/iter (± 15131) 1.00
html/parser/parser_document_fragment/stackoverflow_com_17_05_2022 7737262 ns/iter (± 60702) 7715076 ns/iter (± 11361) 1.00

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

Please sign in to comment.