Skip to content

Commit

Permalink
perf(html/codegen): Reduce allocations (#6622)
Browse files Browse the repository at this point in the history
  • Loading branch information
alexander-akait committed Dec 12, 2022
1 parent 2a4b4a3 commit bfdafdb
Showing 1 changed file with 89 additions and 39 deletions.
128 changes: 89 additions & 39 deletions crates/swc_html_codegen/src/lib.rs
Expand Up @@ -3,7 +3,7 @@
#![allow(clippy::match_like_matches_macro)]

pub use std::fmt::Result;
use std::{iter::Peekable, str::Chars};
use std::{borrow::Cow, iter::Peekable, str::Chars};

use swc_atoms::{js_word, JsWord};
use swc_common::Spanned;
Expand Down Expand Up @@ -804,13 +804,23 @@ where
attribute.push('=');

if self.config.minify {
let minifier = minify_attribute_value(value, self.quotes);
let (minifier, quote) = minify_attribute_value(value, self.quotes);

if let Some(quote) = quote {
attribute.push(quote);
}

attribute.push_str(&minifier);

if let Some(quote) = quote {
attribute.push(quote);
}
} else {
let normalized = normalize_attribute_value(value);
let normalized = escape_string(value, true);

attribute.push('"');
attribute.push_str(&normalized);
attribute.push('"');
}
}

Expand All @@ -820,15 +830,11 @@ where
#[emitter]
fn emit_text(&mut self, n: &Text) -> Result {
if self.ctx.need_escape_text {
let mut data = String::with_capacity(n.data.len());

if self.config.minify {
data.push_str(&minify_text(&n.data));
write_multiline_raw!(self, n.span, &minify_text(&n.data));
} else {
data.push_str(&escape_string(&n.data, false));
write_multiline_raw!(self, n.span, &escape_string(&n.data, false));
}

write_multiline_raw!(self, n.span, &data);
} else {
write_multiline_raw!(self, n.span, &n.data);
}
Expand Down Expand Up @@ -927,9 +933,20 @@ where
}

#[allow(clippy::unused_peekable)]
fn minify_attribute_value(value: &str, quotes: bool) -> String {
fn minify_attribute_value(value: &str, quotes: bool) -> (Cow<'_, str>, Option<char>) {
if value.is_empty() {
return "\"\"".to_string();
return (Cow::Borrowed(value), Some('"'));
}

// Fast-path
if !quotes
&& value.chars().all(|c| match c {
'&' | '`' | '=' | '<' | '>' | '"' | '\'' => false,
c if c.is_ascii_whitespace() => false,
_ => true,
})
{
return (Cow::Borrowed(value), None);
}

let mut minified = String::with_capacity(value.len());
Expand All @@ -943,7 +960,18 @@ fn minify_attribute_value(value: &str, quotes: bool) -> String {
while let Some(c) = chars.next() {
match c {
'&' => {
minified.push_str(&minify_amp(&mut chars));
let next = chars.next();

if let Some(next) = next {
if matches!(next, '#' | 'a'..='z' | 'A'..='Z') {
minified.push_str(&minify_amp(next, &mut chars));
} else {
minified.push('&');
minified.push(next);
}
} else {
minified.push('&');
}

continue;
}
Expand All @@ -969,39 +997,49 @@ fn minify_attribute_value(value: &str, quotes: bool) -> String {
}

if !quotes && unquoted {
return minified;
return (Cow::Owned(minified), None);
}

if dq > sq {
format!("'{}'", minified.replace('\'', "&apos;"))
return (Cow::Owned(minified.replace('\'', "&apos;")), Some('\''));
} else {
format!("\"{}\"", minified.replace('"', "&quot;"))
return (Cow::Owned(minified.replace('"', "&quot;")), Some('"'));
}
}

fn normalize_attribute_value(value: &str) -> String {
#[allow(clippy::unused_peekable)]
fn minify_text(value: &str) -> Cow<'_, str> {
// Fast-path
if value.is_empty() {
return "\"\"".to_string();
return Cow::Borrowed(value);
}

let mut normalized = String::with_capacity(value.len() + 2);

normalized.push('"');
normalized.push_str(&escape_string(value, true));
normalized.push('"');

normalized
}
// Fast-path
if value.chars().all(|c| match c {
'&' | '<' => false,
_ => true,
}) {
return Cow::Borrowed(value);
}

#[allow(clippy::unused_peekable)]
fn minify_text(value: &str) -> String {
let mut result = String::with_capacity(value.len());
let mut chars = value.chars().peekable();

while let Some(c) = chars.next() {
match c {
'&' => {
result.push_str(&minify_amp(&mut chars));
let next = chars.next();

if let Some(next) = next {
if matches!(next, '#' | 'a'..='z' | 'A'..='Z') {
result.push_str(&minify_amp(next, &mut chars));
} else {
result.push('&');
result.push(next);
}
} else {
result.push('&');
}
}
'<' => {
result.push_str("&lt;");
Expand All @@ -1010,14 +1048,14 @@ fn minify_text(value: &str) -> String {
}
}

result
Cow::Owned(result)
}

fn minify_amp(chars: &mut Peekable<Chars>) -> String {
fn minify_amp(next: char, chars: &mut Peekable<Chars>) -> String {
let mut result = String::with_capacity(7);

match chars.next() {
Some(hash @ '#') => {
match next {
hash @ '#' => {
match chars.next() {
// HTML CODE
// Prevent `&amp;#38;` -> `&#38`
Expand Down Expand Up @@ -1054,7 +1092,7 @@ fn minify_amp(chars: &mut Peekable<Chars>) -> String {
}
// Named entity
// Prevent `&amp;current` -> `&current`
Some(c @ 'a'..='z') | Some(c @ 'A'..='Z') => {
c @ 'a'..='z' | c @ 'A'..='Z' => {
let mut entity_temporary_buffer = String::with_capacity(33);

entity_temporary_buffer.push('&');
Expand Down Expand Up @@ -1091,10 +1129,7 @@ fn minify_amp(chars: &mut Peekable<Chars>) -> String {
}
any => {
result.push('&');

if let Some(any) = any {
result.push(any);
}
result.push(any);
}
}

Expand All @@ -1115,7 +1150,22 @@ fn minify_amp(chars: &mut Peekable<Chars>) -> String {
// 4. If the algorithm was not invoked in the attribute mode, replace any
// occurrences of the "<" character by the string "&lt;", and any occurrences of
// the ">" character by the string "&gt;".
fn escape_string(value: &str, is_attribute_mode: bool) -> String {
fn escape_string(value: &str, is_attribute_mode: bool) -> Cow<'_, str> {
// Fast-path
if value.is_empty() {
return Cow::Borrowed(value);
}

if value.chars().all(|c| match c {
'&' | '\u{00A0}' => false,
'"' if is_attribute_mode => false,
'<' if !is_attribute_mode => false,
'>' if !is_attribute_mode => false,
_ => true,
}) {
return Cow::Borrowed(value);
}

let mut result = String::with_capacity(value.len());

for c in value.chars() {
Expand All @@ -1135,7 +1185,7 @@ fn escape_string(value: &str, is_attribute_mode: bool) -> String {
}
}

result
Cow::Owned(result)
}

fn is_html_tag_name(namespace: Namespace, tag_name: &JsWord) -> bool {
Expand Down

1 comment on commit bfdafdb

@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: bfdafdb Previous: 19c2ee5 Ratio
es/full/bugs-1 296685 ns/iter (± 5865) 295341 ns/iter (± 14112) 1.00
es/full/minify/libraries/antd 1668612733 ns/iter (± 16330412) 1781424470 ns/iter (± 13778411) 0.94
es/full/minify/libraries/d3 346073590 ns/iter (± 2829400) 352704115 ns/iter (± 5248892) 0.98
es/full/minify/libraries/echarts 1432114688 ns/iter (± 9216658) 1493309403 ns/iter (± 8025708) 0.96
es/full/minify/libraries/jquery 94020670 ns/iter (± 902366) 93526459 ns/iter (± 1127989) 1.01
es/full/minify/libraries/lodash 111407488 ns/iter (± 541717) 112080785 ns/iter (± 1947568) 0.99
es/full/minify/libraries/moment 54946161 ns/iter (± 313020) 54491005 ns/iter (± 437386) 1.01
es/full/minify/libraries/react 20023902 ns/iter (± 110720) 19935275 ns/iter (± 277051) 1.00
es/full/minify/libraries/terser 273702238 ns/iter (± 2027721) 275730174 ns/iter (± 5470924) 0.99
es/full/minify/libraries/three 498033086 ns/iter (± 3558852) 512272730 ns/iter (± 9725393) 0.97
es/full/minify/libraries/typescript 3195941230 ns/iter (± 19103537) 3350315132 ns/iter (± 23375614) 0.95
es/full/minify/libraries/victory 722749412 ns/iter (± 12656051) 738505873 ns/iter (± 14648240) 0.98
es/full/minify/libraries/vue 140260622 ns/iter (± 1263341) 138344290 ns/iter (± 2116424) 1.01
es/full/codegen/es3 27595 ns/iter (± 67) 27667 ns/iter (± 75) 1.00
es/full/codegen/es5 27628 ns/iter (± 85) 27706 ns/iter (± 45) 1.00
es/full/codegen/es2015 27534 ns/iter (± 51) 27757 ns/iter (± 46) 0.99
es/full/codegen/es2016 27552 ns/iter (± 67) 27739 ns/iter (± 33) 0.99
es/full/codegen/es2017 27541 ns/iter (± 21) 27695 ns/iter (± 46) 0.99
es/full/codegen/es2018 27591 ns/iter (± 73) 27692 ns/iter (± 30) 1.00
es/full/codegen/es2019 27576 ns/iter (± 45) 27700 ns/iter (± 97) 1.00
es/full/codegen/es2020 27542 ns/iter (± 78) 27704 ns/iter (± 35) 0.99
es/full/all/es3 168265749 ns/iter (± 2487126) 166520337 ns/iter (± 2415908) 1.01
es/full/all/es5 159587418 ns/iter (± 2393697) 159127703 ns/iter (± 2987023) 1.00
es/full/all/es2015 121125379 ns/iter (± 668699) 120064343 ns/iter (± 988475) 1.01
es/full/all/es2016 120519082 ns/iter (± 1059031) 119217787 ns/iter (± 1463850) 1.01
es/full/all/es2017 119585106 ns/iter (± 799626) 118403356 ns/iter (± 910211) 1.01
es/full/all/es2018 118131364 ns/iter (± 968313) 117412631 ns/iter (± 737604) 1.01
es/full/all/es2019 116958316 ns/iter (± 1080592) 116099688 ns/iter (± 822081) 1.01
es/full/all/es2020 112758959 ns/iter (± 784313) 111355760 ns/iter (± 683460) 1.01
es/full/parser 523597 ns/iter (± 6128) 520359 ns/iter (± 9108) 1.01
es/full/base/fixer 21949 ns/iter (± 28) 21864 ns/iter (± 23) 1.00
es/full/base/resolver_and_hygiene 77767 ns/iter (± 83) 78035 ns/iter (± 74) 1.00
serialization of ast node 143 ns/iter (± 0) 143 ns/iter (± 0) 1
serialization of serde 124 ns/iter (± 0) 123 ns/iter (± 0) 1.01
css/minify/libraries/bootstrap 27385798 ns/iter (± 108932) 27311905 ns/iter (± 228530) 1.00
css/visitor/compare/clone 2118261 ns/iter (± 16029) 2091366 ns/iter (± 13662) 1.01
css/visitor/compare/visit_mut_span 2327866 ns/iter (± 9079) 2304881 ns/iter (± 11213) 1.01
css/visitor/compare/visit_mut_span_panic 2340281 ns/iter (± 5848) 2328352 ns/iter (± 14061) 1.01
css/visitor/compare/fold_span 2991499 ns/iter (± 11225) 3014168 ns/iter (± 16322) 0.99
css/visitor/compare/fold_span_panic 3180056 ns/iter (± 20067) 3170656 ns/iter (± 23753) 1.00
css/lexer/bootstrap_5_1_3 5230952 ns/iter (± 1212) 5179025 ns/iter (± 6843) 1.01
css/lexer/foundation_6_7_4 4440891 ns/iter (± 2479) 4417731 ns/iter (± 1929) 1.01
css/lexer/tailwind_3_1_1 831402 ns/iter (± 324) 826537 ns/iter (± 645) 1.01
css/parser/bootstrap_5_1_3 20883898 ns/iter (± 116906) 21086265 ns/iter (± 261018) 0.99
css/parser/foundation_6_7_4 16706908 ns/iter (± 53899) 16688249 ns/iter (± 78100) 1.00
css/parser/tailwind_3_1_1 3177487 ns/iter (± 2541) 3168873 ns/iter (± 3747) 1.00
es/codegen/colors 330521 ns/iter (± 184982) 329236 ns/iter (± 184402) 1.00
es/codegen/large 1201394 ns/iter (± 607547) 1202060 ns/iter (± 607260) 1.00
es/codegen/with-parser/colors 46263 ns/iter (± 310) 46436 ns/iter (± 257) 1.00
es/codegen/with-parser/large 510920 ns/iter (± 1306) 509784 ns/iter (± 830) 1.00
es/minify/libraries/antd 1477701976 ns/iter (± 16192131) 1567922386 ns/iter (± 14032396) 0.94
es/minify/libraries/d3 300881794 ns/iter (± 2889391) 311462507 ns/iter (± 5302890) 0.97
es/minify/libraries/echarts 1258695679 ns/iter (± 9627760) 1327235818 ns/iter (± 6628354) 0.95
es/minify/libraries/jquery 80224897 ns/iter (± 643864) 81748113 ns/iter (± 518323) 0.98
es/minify/libraries/lodash 99179216 ns/iter (± 328181) 100702017 ns/iter (± 890022) 0.98
es/minify/libraries/moment 46684449 ns/iter (± 262995) 47194495 ns/iter (± 246258) 0.99
es/minify/libraries/react 17614274 ns/iter (± 67801) 17782930 ns/iter (± 83108) 0.99
es/minify/libraries/terser 228557681 ns/iter (± 1764152) 238132180 ns/iter (± 3716134) 0.96
es/minify/libraries/three 427375721 ns/iter (± 3477264) 432685113 ns/iter (± 3081711) 0.99
es/minify/libraries/typescript 2730471583 ns/iter (± 11207767) 2873735592 ns/iter (± 15582415) 0.95
es/minify/libraries/victory 634012547 ns/iter (± 7256763) 654440302 ns/iter (± 10802063) 0.97
es/minify/libraries/vue 121879137 ns/iter (± 550210) 123277795 ns/iter (± 1652069) 0.99
es/visitor/compare/clone 2443773 ns/iter (± 21202) 2451322 ns/iter (± 28521) 1.00
es/visitor/compare/visit_mut_span 2840846 ns/iter (± 6124) 2836410 ns/iter (± 10061) 1.00
es/visitor/compare/visit_mut_span_panic 2831952 ns/iter (± 5411) 2902161 ns/iter (± 42035) 0.98
es/visitor/compare/fold_span 3915824 ns/iter (± 21586) 4041827 ns/iter (± 38112) 0.97
es/visitor/compare/fold_span_panic 4082152 ns/iter (± 8479) 4224149 ns/iter (± 20967) 0.97
es/lexer/colors 17531 ns/iter (± 4) 17463 ns/iter (± 76) 1.00
es/lexer/angular 8243052 ns/iter (± 3852) 8226345 ns/iter (± 3652) 1.00
es/lexer/backbone 1077064 ns/iter (± 690) 1070762 ns/iter (± 465) 1.01
es/lexer/jquery 5973860 ns/iter (± 3932) 5946121 ns/iter (± 3623) 1.00
es/lexer/jquery mobile 9204201 ns/iter (± 6894) 9195402 ns/iter (± 3541) 1.00
es/lexer/mootools 4689115 ns/iter (± 3717) 4663561 ns/iter (± 4055) 1.01
es/lexer/underscore 899953 ns/iter (± 854) 891664 ns/iter (± 810) 1.01
es/lexer/three 28044651 ns/iter (± 15303) 27979228 ns/iter (± 19518) 1.00
es/lexer/yui 5071463 ns/iter (± 2113) 5061515 ns/iter (± 1668) 1.00
es/parser/colors 31570 ns/iter (± 157) 31594 ns/iter (± 134) 1.00
es/parser/angular 16439983 ns/iter (± 212046) 17258352 ns/iter (± 276881) 0.95
es/parser/backbone 2348859 ns/iter (± 11431) 2358813 ns/iter (± 12954) 1.00
es/parser/jquery 12999317 ns/iter (± 110736) 13057095 ns/iter (± 98679) 1.00
es/parser/jquery mobile 21292711 ns/iter (± 246042) 21491696 ns/iter (± 505816) 0.99
es/parser/mootools 9794680 ns/iter (± 44198) 9941641 ns/iter (± 109996) 0.99
es/parser/underscore 1974540 ns/iter (± 9545) 1983612 ns/iter (± 10504) 1.00
es/parser/three 60295486 ns/iter (± 149941) 61650257 ns/iter (± 252866) 0.98
es/parser/yui 9858804 ns/iter (± 40760) 10025617 ns/iter (± 121472) 0.98
es/preset-env/usage/builtin_type 144701 ns/iter (± 33230) 139719 ns/iter (± 31631) 1.04
es/preset-env/usage/property 21228 ns/iter (± 62) 21146 ns/iter (± 75) 1.00
es/resolver/typescript 113717294 ns/iter (± 2670410) 120540836 ns/iter (± 2127541) 0.94
es/fixer/typescript 87314430 ns/iter (± 577508) 94594164 ns/iter (± 1374232) 0.92
es/hygiene/typescript 171044100 ns/iter (± 550732) 190553478 ns/iter (± 826613) 0.90
es/resolver_with_hygiene/typescript 308152869 ns/iter (± 2403761) 330572889 ns/iter (± 2101345) 0.93
es/visitor/base-perf/module_clone 74258 ns/iter (± 1714) 74674 ns/iter (± 1261) 0.99
es/visitor/base-perf/fold_empty 86681 ns/iter (± 1298) 85787 ns/iter (± 1182) 1.01
es/visitor/base-perf/fold_noop_impl_all 86486 ns/iter (± 549) 86767 ns/iter (± 1363) 1.00
es/visitor/base-perf/fold_noop_impl_vec 86695 ns/iter (± 784) 86772 ns/iter (± 1707) 1.00
es/visitor/base-perf/boxing_boxed_clone 54 ns/iter (± 0) 54 ns/iter (± 0) 1
es/visitor/base-perf/boxing_unboxed_clone 58 ns/iter (± 0) 58 ns/iter (± 0) 1
es/visitor/base-perf/boxing_boxed 105 ns/iter (± 0) 100 ns/iter (± 0) 1.05
es/visitor/base-perf/boxing_unboxed 106 ns/iter (± 0) 101 ns/iter (± 0) 1.05
es/visitor/base-perf/visit_contains_this 3455 ns/iter (± 70) 3370 ns/iter (± 67) 1.03
es/base/parallel/resolver/typescript 4854986935 ns/iter (± 140822662) 5228508445 ns/iter (± 390203927) 0.93
es/base/parallel/hygiene/typescript 2015592858 ns/iter (± 39321767) 2236805415 ns/iter (± 38654919) 0.90
misc/visitors/time-complexity/time 5 94 ns/iter (± 0) 94 ns/iter (± 0) 1
misc/visitors/time-complexity/time 10 307 ns/iter (± 0) 309 ns/iter (± 4) 0.99
misc/visitors/time-complexity/time 15 663 ns/iter (± 31) 682 ns/iter (± 37) 0.97
misc/visitors/time-complexity/time 20 1196 ns/iter (± 6) 1237 ns/iter (± 52) 0.97
misc/visitors/time-complexity/time 40 6228 ns/iter (± 34) 6178 ns/iter (± 21) 1.01
misc/visitors/time-complexity/time 60 15524 ns/iter (± 35) 15495 ns/iter (± 11) 1.00
es/full-target/es2016 185980 ns/iter (± 564) 187058 ns/iter (± 431) 0.99
es/full-target/es2017 179137 ns/iter (± 438) 179580 ns/iter (± 538) 1.00
es/full-target/es2018 169039 ns/iter (± 595) 169703 ns/iter (± 326) 1.00
es2020_nullish_coalescing 65388 ns/iter (± 84) 65811 ns/iter (± 156) 0.99
es2020_optional_chaining 93229 ns/iter (± 321) 93578 ns/iter (± 240) 1.00
es2022_class_properties 91670 ns/iter (± 187) 92035 ns/iter (± 140) 1.00
es2018_object_rest_spread 69381 ns/iter (± 110) 70102 ns/iter (± 135) 0.99
es2019_optional_catch_binding 59256 ns/iter (± 120) 59626 ns/iter (± 116) 0.99
es2017_async_to_generator 59543 ns/iter (± 127) 60210 ns/iter (± 74) 0.99
es2016_exponentiation 63151 ns/iter (± 85) 63807 ns/iter (± 105) 0.99
es2015_arrow 68259 ns/iter (± 238) 68932 ns/iter (± 204) 0.99
es2015_block_scoped_fn 64026 ns/iter (± 90) 65107 ns/iter (± 170) 0.98
es2015_block_scoping 154314 ns/iter (± 10575) 146794 ns/iter (± 10254) 1.05
es2015_classes 114651 ns/iter (± 368) 115504 ns/iter (± 472) 0.99
es2015_computed_props 59263 ns/iter (± 165) 59815 ns/iter (± 542) 0.99
es2015_destructuring 114289 ns/iter (± 127) 114869 ns/iter (± 284) 0.99
es2015_duplicate_keys 62113 ns/iter (± 86) 62736 ns/iter (± 104) 0.99
es2015_parameters 77404 ns/iter (± 149) 77812 ns/iter (± 204) 0.99
es2015_fn_name 65128 ns/iter (± 432) 65600 ns/iter (± 738) 0.99
es2015_for_of 62210 ns/iter (± 120) 62873 ns/iter (± 86) 0.99
es2015_instanceof 61357 ns/iter (± 122) 61984 ns/iter (± 140) 0.99
es2015_shorthand_property 59219 ns/iter (± 118) 59732 ns/iter (± 107) 0.99
es2015_spread 59358 ns/iter (± 83) 59720 ns/iter (± 107) 0.99
es2015_sticky_regex 60376 ns/iter (± 91) 61333 ns/iter (± 97) 0.98
es2015_typeof_symbol 61035 ns/iter (± 133) 61021 ns/iter (± 129) 1.00
es/transform/baseline/base 50144 ns/iter (± 83) 50577 ns/iter (± 74) 0.99
es/transform/baseline/common_reserved_word 60876 ns/iter (± 74) 61378 ns/iter (± 139) 0.99
es/transform/baseline/common_typescript 141966 ns/iter (± 7021) 155885 ns/iter (± 11393) 0.91
es/target/es3 170643 ns/iter (± 179) 168831 ns/iter (± 319) 1.01
es/target/es2015 633789 ns/iter (± 1518) 628944 ns/iter (± 1314) 1.01
es/target/es2016 63266 ns/iter (± 78) 63621 ns/iter (± 145) 0.99
es/target/es2017 59784 ns/iter (± 83) 60410 ns/iter (± 91) 0.99
es/target/es2018 79374 ns/iter (± 67) 80110 ns/iter (± 174) 0.99
es/target/es2020 130920 ns/iter (± 230) 131575 ns/iter (± 741) 1.00
babelify-only 673748 ns/iter (± 802) 670174 ns/iter (± 2060) 1.01
parse_and_babelify_angular 42365938 ns/iter (± 434713) 43268893 ns/iter (± 688473) 0.98
parse_and_babelify_backbone 5468835 ns/iter (± 40415) 5520119 ns/iter (± 53253) 0.99
parse_and_babelify_jquery 32710161 ns/iter (± 370462) 33863708 ns/iter (± 497128) 0.97
parse_and_babelify_jquery_mobile 55945687 ns/iter (± 672183) 58562538 ns/iter (± 811434) 0.96
parse_and_babelify_mootools 33952802 ns/iter (± 403674) 35319647 ns/iter (± 315793) 0.96
parse_and_babelify_underscore 4378873 ns/iter (± 32337) 4355592 ns/iter (± 44361) 1.01
parse_and_babelify_yui 33091480 ns/iter (± 350873) 33989896 ns/iter (± 438258) 0.97
html/minify/document/css_spec 43934344 ns/iter (± 545825) 44776715 ns/iter (± 321297) 0.98
html/minify/document/github 18538161 ns/iter (± 33313) 18798311 ns/iter (± 102757) 0.99
html/minify/document/stackoverflow 16181366 ns/iter (± 34296) 16457237 ns/iter (± 89763) 0.98
html/minify/document_fragment/css_spec 42169907 ns/iter (± 178668) 43089736 ns/iter (± 419872) 0.98
html/minify/document_fragment/github 17619788 ns/iter (± 26183) 18069816 ns/iter (± 55216) 0.98
html/minify/document_fragment/stackoverflow 15737090 ns/iter (± 25448) 15996266 ns/iter (± 88711) 0.98
html/document/visitor/compare/clone 346537 ns/iter (± 1962) 343671 ns/iter (± 2156) 1.01
html/document/visitor/compare/visit_mut_span 376062 ns/iter (± 2875) 367974 ns/iter (± 1722) 1.02
html/document/visitor/compare/visit_mut_span_panic 380634 ns/iter (± 1758) 374988 ns/iter (± 3062) 1.02
html/document/visitor/compare/fold_span 404241 ns/iter (± 1559) 404174 ns/iter (± 2315) 1.00
html/document/visitor/compare/fold_span_panic 464326 ns/iter (± 2795) 459666 ns/iter (± 1529) 1.01
html/document_fragment/visitor/compare/clone 337424 ns/iter (± 2032) 342654 ns/iter (± 2595) 0.98
html/document_fragment/visitor/compare/visit_mut_span 364046 ns/iter (± 1488) 372332 ns/iter (± 2149) 0.98
html/document_fragment/visitor/compare/visit_mut_span_panic 371367 ns/iter (± 1827) 378972 ns/iter (± 2400) 0.98
html/document_fragment/visitor/compare/fold_span 402011 ns/iter (± 2455) 406950 ns/iter (± 1010) 0.99
html/document_fragment/visitor/compare/fold_span_panic 457742 ns/iter (± 1779) 457199 ns/iter (± 1630) 1.00
html/lexer/css_2021_spec 15458132 ns/iter (± 10145) 17347801 ns/iter (± 15457) 0.89
html/lexer/github_com_17_05_2022 5995017 ns/iter (± 3722) 6457140 ns/iter (± 2637) 0.93
html/lexer/stackoverflow_com_17_05_2022 5619216 ns/iter (± 4786) 6265217 ns/iter (± 2039) 0.90
html/parser/parser_document/css_2021_spec 27001928 ns/iter (± 73338) 26354326 ns/iter (± 238673) 1.02
html/parser/parser_document/github_com_17_05_2022 8788646 ns/iter (± 6722) 8766716 ns/iter (± 5240) 1.00
html/parser/parser_document/stackoverflow_com_17_05_2022 7747989 ns/iter (± 6692) 7729520 ns/iter (± 5140) 1.00
html/parser/parser_document_fragment/css_2021_spec 26745028 ns/iter (± 216463) 26410743 ns/iter (± 348710) 1.01
html/parser/parser_document_fragment/github_com_17_05_2022 8789976 ns/iter (± 14095) 8783127 ns/iter (± 18869) 1.00
html/parser/parser_document_fragment/stackoverflow_com_17_05_2022 7752926 ns/iter (± 16046) 7730750 ns/iter (± 3786) 1.00

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

Please sign in to comment.