Skip to content

Commit

Permalink
perf(es/lexer): Use jump table for read_token (#7058)
Browse files Browse the repository at this point in the history
  • Loading branch information
kdy1 committed Mar 11, 2023
1 parent fa627e1 commit 9beefaa
Show file tree
Hide file tree
Showing 2 changed files with 265 additions and 169 deletions.
259 changes: 90 additions & 169 deletions crates/swc_ecma_parser/src/lexer/mod.rs
Expand Up @@ -9,7 +9,12 @@ use swc_atoms::{Atom, AtomGenerator};
use swc_common::{comments::Comments, input::StringInput, BytePos, Span};
use swc_ecma_ast::{op, EsVersion};

use self::{comments_buffer::CommentsBuffer, state::State, util::*};
use self::{
comments_buffer::CommentsBuffer,
state::State,
table::{ByteHandler, BYTE_HANDLERS},
util::*,
};
pub use self::{
input::Input,
state::{TokenContext, TokenContexts},
Expand All @@ -25,6 +30,7 @@ pub mod input;
mod jsx;
mod number;
mod state;
mod table;
#[cfg(test)]
mod tests;
pub mod util;
Expand Down Expand Up @@ -161,178 +167,24 @@ impl<'a> Lexer<'a> {

/// babel: `getTokenFromCode`
fn read_token(&mut self) -> LexResult<Option<Token>> {
let c = self.input.cur_as_ascii();

match c {
None => {}
Some(c) => {
match c {
b'#' => return self.read_token_number_sign(),

//
b'.' => return self.read_token_dot().map(Some),

b'(' | b')' | b';' | b',' | b'[' | b']' | b'{' | b'}' | b'@' | b'`' | b'~' => {
// These tokens are emitted directly.
self.input.bump();
return Ok(Some(match c {
b'(' => LParen,
b')' => RParen,
b';' => Semi,
b',' => Comma,
b'[' => LBracket,
b']' => RBracket,
b'{' => LBrace,
b'}' => RBrace,
b'@' => At,
b'`' => tok!('`'),
b'~' => tok!('~'),

_ => unreachable!(),
}));
}

b'?' => return self.read_token_question_mark().map(Some),

b':' => return self.read_token_colon().map(Some),

b'0' => return self.read_token_zero().map(Some),

b'1'..=b'9' => {
return self
.read_number(false)
.map(|v| match v {
Left((value, raw)) => Num { value, raw },
Right((value, raw)) => BigInt { value, raw },
})
.map(Some);
}

b'"' | b'\'' => return self.read_str_lit().map(Some),

b'/' => return self.read_slash(),

b'%' | b'*' => return self.read_token_mul_mod(c).map(Some),

// Logical operators
b'|' | b'&' => return self.read_token_logical(c).map(Some),
b'^' => {
// Bitwise xor
self.input.bump();
return Ok(Some(if self.input.cur() == Some('=') {
self.input.bump();
AssignOp(BitXorAssign)
} else {
BinOp(BitXor)
}));
}

b'+' | b'-' => {
let start = self.cur_pos();

self.input.bump();

// '++', '--'
return Ok(Some(if self.input.cur() == Some(c as char) {
self.input.bump();

// Handle -->
if self.state.had_line_break && c == b'-' && self.eat(b'>') {
self.emit_module_mode_error(
start,
SyntaxError::LegacyCommentInModule,
);
self.skip_line_comment(0);
self.skip_space::<true>()?;
return self.read_token();
}

if c == b'+' {
PlusPlus
} else {
MinusMinus
}
} else if self.input.eat_byte(b'=') {
AssignOp(if c == b'+' { AddAssign } else { SubAssign })
} else {
BinOp(if c == b'+' { Add } else { Sub })
}));
}

b'<' | b'>' => return self.read_token_lt_gt(),

b'!' | b'=' => {
let start = self.cur_pos();
let had_line_break_before_last = self.had_line_break_before_last();

self.input.bump();

return Ok(Some(if self.input.eat_byte(b'=') {
// "=="

if self.input.eat_byte(b'=') {
if c == b'!' {
BinOp(NotEqEq)
} else {
// =======
// ^
if had_line_break_before_last && self.is_str("====") {
self.emit_error_span(
fixed_len_span(start, 7),
SyntaxError::TS1185,
);
self.skip_line_comment(4);
self.skip_space::<true>()?;
return self.read_token();
}

BinOp(EqEqEq)
}
} else if c == b'!' {
BinOp(NotEq)
} else {
BinOp(EqEq)
}
} else if c == b'=' && self.input.eat_byte(b'>') {
// "=>"

Arrow
} else if c == b'!' {
Bang
} else {
AssignOp(Assign)
}));
}
let byte = match self.input.as_str().as_bytes().first() {
Some(&v) => v,
None => return Ok(None),
};

b'a'..=b'z' | b'A'..=b'Z' | b'$' | b'_' | b'\\' => {
// Fast path for ascii identifiers.
return self.read_ident_or_keyword().map(Some);
}
_ => {}
}
}
}
let handler = unsafe { *(&BYTE_HANDLERS as *const ByteHandler).offset(byte as isize) };

let c = match self.input.cur() {
Some(c) => c,
match handler {
Some(handler) => handler(self),
None => {
return Ok(None);
}
};

let token = {
// Identifier or keyword. '\uXXXX' sequences are allowed in
// identifiers, so '\' also dispatches to that.
if c == '\\' || c.is_ident_start() {
return self.read_ident_or_keyword().map(Some);
let start = self.cur_pos();
self.input.bump_bytes(1);
self.error_span(
pos_span(start),
SyntaxError::UnexpectedChar { c: byte as _ },
)
}

let start = self.cur_pos();
self.input.bump();
self.error_span(pos_span(start), SyntaxError::UnexpectedChar { c })?
};

Ok(Some(token))
}
}

/// `#`
Expand Down Expand Up @@ -695,6 +547,75 @@ impl<'a> Lexer<'a> {

Ok(Some(vec![c.into()]))
}

fn read_token_plus_minus(&mut self, c: u8) -> LexResult<Option<Token>> {
let start = self.cur_pos();

self.input.bump();

// '++', '--'
Ok(Some(if self.input.cur() == Some(c as char) {
self.input.bump();

// Handle -->
if self.state.had_line_break && c == b'-' && self.eat(b'>') {
self.emit_module_mode_error(start, SyntaxError::LegacyCommentInModule);
self.skip_line_comment(0);
self.skip_space::<true>()?;
return self.read_token();
}

if c == b'+' {
PlusPlus
} else {
MinusMinus
}
} else if self.input.eat_byte(b'=') {
AssignOp(if c == b'+' { AddAssign } else { SubAssign })
} else {
BinOp(if c == b'+' { Add } else { Sub })
}))
}

fn read_token_bang_or_eq(&mut self, c: u8) -> LexResult<Option<Token>> {
let start = self.cur_pos();
let had_line_break_before_last = self.had_line_break_before_last();

self.input.bump();

Ok(Some(if self.input.eat_byte(b'=') {
// "=="

if self.input.eat_byte(b'=') {
if c == b'!' {
BinOp(NotEqEq)
} else {
// =======
// ^
if had_line_break_before_last && self.is_str("====") {
self.emit_error_span(fixed_len_span(start, 7), SyntaxError::TS1185);
self.skip_line_comment(4);
self.skip_space::<true>()?;
return self.read_token();
}

BinOp(EqEqEq)
}
} else if c == b'!' {
BinOp(NotEq)
} else {
BinOp(EqEq)
}
} else if c == b'=' && self.input.eat_byte(b'>') {
// "=>"

Arrow
} else if c == b'!' {
Bang
} else {
AssignOp(Assign)
}))
}
}

impl<'a> Lexer<'a> {
Expand Down

1 comment on commit 9beefaa

@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: 9beefaa Previous: fbb3016 Ratio
es/full/bugs-1 316228 ns/iter (± 8679) 301755 ns/iter (± 7533) 1.05
es/full/minify/libraries/antd 1589467448 ns/iter (± 21828492) 1439697968 ns/iter (± 30162675) 1.10
es/full/minify/libraries/d3 303569507 ns/iter (± 8096583) 283195212 ns/iter (± 5600633) 1.07
es/full/minify/libraries/echarts 1232522903 ns/iter (± 13889498) 1116629304 ns/iter (± 25024911) 1.10
es/full/minify/libraries/jquery 91945402 ns/iter (± 640136) 86571867 ns/iter (± 1150905) 1.06
es/full/minify/libraries/lodash 106431008 ns/iter (± 1089162) 100583171 ns/iter (± 1316174) 1.06
es/full/minify/libraries/moment 52847404 ns/iter (± 548584) 49933985 ns/iter (± 593495) 1.06
es/full/minify/libraries/react 19420114 ns/iter (± 256531) 18501213 ns/iter (± 88764) 1.05
es/full/minify/libraries/terser 250062904 ns/iter (± 4420099) 229445993 ns/iter (± 4158921) 1.09
es/full/minify/libraries/three 442376180 ns/iter (± 13549322) 402659824 ns/iter (± 8750555) 1.10
es/full/minify/libraries/typescript 2988207883 ns/iter (± 21239955) 2763199193 ns/iter (± 16208770) 1.08
es/full/minify/libraries/victory 669356674 ns/iter (± 8720596) 584791192 ns/iter (± 5894515) 1.14
es/full/minify/libraries/vue 132808567 ns/iter (± 949060) 122080456 ns/iter (± 765656) 1.09
es/full/codegen/es3 26178 ns/iter (± 64) 25206 ns/iter (± 171) 1.04
es/full/codegen/es5 26292 ns/iter (± 51) 25518 ns/iter (± 127) 1.03
es/full/codegen/es2015 26259 ns/iter (± 59) 25089 ns/iter (± 134) 1.05
es/full/codegen/es2016 26272 ns/iter (± 67) 25179 ns/iter (± 241) 1.04
es/full/codegen/es2017 26243 ns/iter (± 31) 25450 ns/iter (± 373) 1.03
es/full/codegen/es2018 26286 ns/iter (± 58) 25319 ns/iter (± 93) 1.04
es/full/codegen/es2019 26224 ns/iter (± 64) 25863 ns/iter (± 513) 1.01
es/full/codegen/es2020 26261 ns/iter (± 63) 25107 ns/iter (± 284) 1.05
es/full/all/es3 174990710 ns/iter (± 2833298) 171971839 ns/iter (± 2680310) 1.02
es/full/all/es5 162172676 ns/iter (± 2623244) 165102512 ns/iter (± 3839537) 0.98
es/full/all/es2015 128334540 ns/iter (± 1987942) 125162076 ns/iter (± 2283377) 1.03
es/full/all/es2016 126678101 ns/iter (± 3093983) 123676380 ns/iter (± 1167597) 1.02
es/full/all/es2017 125185410 ns/iter (± 1206712) 122823662 ns/iter (± 1900584) 1.02
es/full/all/es2018 121617412 ns/iter (± 1232328) 120727024 ns/iter (± 1032090) 1.01
es/full/all/es2019 121599783 ns/iter (± 1140294) 120284375 ns/iter (± 1492429) 1.01
es/full/all/es2020 115930081 ns/iter (± 584043) 115529217 ns/iter (± 1798364) 1.00
es/full/parser 534538 ns/iter (± 8419) 522469 ns/iter (± 9554) 1.02
es/full/base/fixer 23614 ns/iter (± 45) 21363 ns/iter (± 164) 1.11
es/full/base/resolver_and_hygiene 82260 ns/iter (± 91) 78622 ns/iter (± 749) 1.05
serialization of ast node 124 ns/iter (± 0) 119 ns/iter (± 0) 1.04
serialization of serde 126 ns/iter (± 0) 123 ns/iter (± 0) 1.02
css/minify/libraries/bootstrap 28599230 ns/iter (± 151909) 27695250 ns/iter (± 322663) 1.03
css/visitor/compare/clone 2107060 ns/iter (± 18885) 2110859 ns/iter (± 21857) 1.00
css/visitor/compare/visit_mut_span 2291270 ns/iter (± 10869) 2249743 ns/iter (± 12837) 1.02
css/visitor/compare/visit_mut_span_panic 2374367 ns/iter (± 5203) 2322964 ns/iter (± 23638) 1.02
css/visitor/compare/fold_span 3080608 ns/iter (± 16478) 3063436 ns/iter (± 16103) 1.01
css/visitor/compare/fold_span_panic 3213037 ns/iter (± 19028) 3169562 ns/iter (± 47112) 1.01
css/lexer/bootstrap_5_1_3 5135469 ns/iter (± 1255) 5165683 ns/iter (± 43708) 0.99
css/lexer/foundation_6_7_4 4331026 ns/iter (± 1100) 4233098 ns/iter (± 21344) 1.02
css/lexer/tailwind_3_1_1 821897 ns/iter (± 531) 823517 ns/iter (± 4364) 1.00
css/parser/bootstrap_5_1_3 21850933 ns/iter (± 111987) 21614102 ns/iter (± 183708) 1.01
css/parser/foundation_6_7_4 17418079 ns/iter (± 59395) 17354493 ns/iter (± 81720) 1.00
css/parser/tailwind_3_1_1 3301752 ns/iter (± 2145) 3292173 ns/iter (± 20875) 1.00
es/codegen/colors 328906 ns/iter (± 183818) 334876 ns/iter (± 187466) 0.98
es/codegen/large 1182128 ns/iter (± 606884) 1260923 ns/iter (± 649697) 0.94
es/codegen/with-parser/colors 46063 ns/iter (± 140) 47338 ns/iter (± 550) 0.97
es/codegen/with-parser/large 510543 ns/iter (± 1324) 506480 ns/iter (± 7444) 1.01
es/minify/libraries/antd 1407877136 ns/iter (± 18223088) 1308346788 ns/iter (± 37056659) 1.08
es/minify/libraries/d3 267531585 ns/iter (± 4594788) 253544270 ns/iter (± 7167016) 1.06
es/minify/libraries/echarts 1062463529 ns/iter (± 11283751) 975686658 ns/iter (± 19471774) 1.09
es/minify/libraries/jquery 79279509 ns/iter (± 560489) 78095048 ns/iter (± 1342854) 1.02
es/minify/libraries/lodash 95332236 ns/iter (± 1925771) 92175044 ns/iter (± 1473067) 1.03
es/minify/libraries/moment 45949792 ns/iter (± 547707) 45025337 ns/iter (± 503998) 1.02
es/minify/libraries/react 17331041 ns/iter (± 172540) 16723110 ns/iter (± 149500) 1.04
es/minify/libraries/terser 214215014 ns/iter (± 4203195) 202347090 ns/iter (± 6722573) 1.06
es/minify/libraries/three 372614304 ns/iter (± 5314341) 337958233 ns/iter (± 8756811) 1.10
es/minify/libraries/typescript 2537385870 ns/iter (± 13659169) 2390063095 ns/iter (± 27458678) 1.06
es/minify/libraries/victory 589826174 ns/iter (± 9282944) 497346367 ns/iter (± 7076740) 1.19
es/minify/libraries/vue 117657732 ns/iter (± 1371028) 112739356 ns/iter (± 1680631) 1.04
es/visitor/compare/clone 2361780 ns/iter (± 13175) 2328368 ns/iter (± 15785) 1.01
es/visitor/compare/visit_mut_span 2754217 ns/iter (± 13258) 2634718 ns/iter (± 30114) 1.05
es/visitor/compare/visit_mut_span_panic 2792585 ns/iter (± 10967) 2699391 ns/iter (± 54090) 1.03
es/visitor/compare/fold_span 3843113 ns/iter (± 15907) 3728847 ns/iter (± 51797) 1.03
es/visitor/compare/fold_span_panic 4035049 ns/iter (± 27840) 3960995 ns/iter (± 21178) 1.02
es/lexer/colors 15429 ns/iter (± 13) 14977 ns/iter (± 118) 1.03
es/lexer/angular 7643427 ns/iter (± 3834) 7407273 ns/iter (± 70148) 1.03
es/lexer/backbone 982072 ns/iter (± 589) 974806 ns/iter (± 4205) 1.01
es/lexer/jquery 5485861 ns/iter (± 4034) 5410234 ns/iter (± 61918) 1.01
es/lexer/jquery mobile 8469190 ns/iter (± 5569) 8284175 ns/iter (± 56548) 1.02
es/lexer/mootools 4333424 ns/iter (± 2523) 4311684 ns/iter (± 52276) 1.01
es/lexer/underscore 824414 ns/iter (± 354) 805008 ns/iter (± 4782) 1.02
es/lexer/three 25647840 ns/iter (± 48152) 25082903 ns/iter (± 124981) 1.02
es/lexer/yui 4666269 ns/iter (± 1074) 4485420 ns/iter (± 29126) 1.04
es/parser/colors 29634 ns/iter (± 54) 29414 ns/iter (± 331) 1.01
es/parser/angular 15783425 ns/iter (± 118111) 14632438 ns/iter (± 154745) 1.08
es/parser/backbone 2250593 ns/iter (± 13205) 2188248 ns/iter (± 22795) 1.03
es/parser/jquery 12359690 ns/iter (± 99401) 11873945 ns/iter (± 89400) 1.04
es/parser/jquery mobile 19733513 ns/iter (± 253806) 18917672 ns/iter (± 248849) 1.04
es/parser/mootools 9414575 ns/iter (± 55518) 9285180 ns/iter (± 52602) 1.01
es/parser/underscore 1907420 ns/iter (± 10022) 1900956 ns/iter (± 9577) 1.00
es/parser/three 56711521 ns/iter (± 427598) 51258673 ns/iter (± 1278805) 1.11
es/parser/yui 9373301 ns/iter (± 76081) 8986198 ns/iter (± 91181) 1.04
es/preset-env/usage/builtin_type 141203 ns/iter (± 32803) 139824 ns/iter (± 32816) 1.01
es/preset-env/usage/property 21639 ns/iter (± 30) 20031 ns/iter (± 119) 1.08
es/resolver/typescript 107183732 ns/iter (± 1737405) 101347449 ns/iter (± 4068104) 1.06
es/fixer/typescript 78433217 ns/iter (± 241401) 76697188 ns/iter (± 2443291) 1.02
es/hygiene/typescript 169307006 ns/iter (± 2691387) 163268032 ns/iter (± 906797) 1.04
es/resolver_with_hygiene/typescript 306203131 ns/iter (± 2350724) 295353438 ns/iter (± 3697021) 1.04
es/visitor/base-perf/module_clone 77763 ns/iter (± 1796) 75376 ns/iter (± 1905) 1.03
es/visitor/base-perf/fold_empty 86861 ns/iter (± 1523) 85143 ns/iter (± 1684) 1.02
es/visitor/base-perf/fold_noop_impl_all 87699 ns/iter (± 1710) 84882 ns/iter (± 1332) 1.03
es/visitor/base-perf/fold_noop_impl_vec 88077 ns/iter (± 1833) 86988 ns/iter (± 1757) 1.01
es/visitor/base-perf/boxing_boxed_clone 57 ns/iter (± 0) 56 ns/iter (± 0) 1.02
es/visitor/base-perf/boxing_unboxed_clone 54 ns/iter (± 0) 54 ns/iter (± 0) 1
es/visitor/base-perf/boxing_boxed 103 ns/iter (± 0) 98 ns/iter (± 0) 1.05
es/visitor/base-perf/boxing_unboxed 97 ns/iter (± 0) 96 ns/iter (± 0) 1.01
es/visitor/base-perf/visit_contains_this 3477 ns/iter (± 90) 3493 ns/iter (± 37) 1.00
es/base/parallel/resolver/typescript 4864635544 ns/iter (± 375078788) 5285036182 ns/iter (± 495612630) 0.92
es/base/parallel/hygiene/typescript 1981060742 ns/iter (± 27958056) 1951284413 ns/iter (± 11682399) 1.02
misc/visitors/time-complexity/time 5 97 ns/iter (± 0) 102 ns/iter (± 0) 0.95
misc/visitors/time-complexity/time 10 329 ns/iter (± 0) 335 ns/iter (± 11) 0.98
misc/visitors/time-complexity/time 15 657 ns/iter (± 0) 692 ns/iter (± 22) 0.95
misc/visitors/time-complexity/time 20 1229 ns/iter (± 13) 1267 ns/iter (± 6) 0.97
misc/visitors/time-complexity/time 40 6192 ns/iter (± 2) 6749 ns/iter (± 30) 0.92
misc/visitors/time-complexity/time 60 15569 ns/iter (± 7) 17205 ns/iter (± 150) 0.90
es/full-target/es2016 189258 ns/iter (± 314) 188035 ns/iter (± 560) 1.01
es/full-target/es2017 184628 ns/iter (± 592) 182187 ns/iter (± 603) 1.01
es/full-target/es2018 173668 ns/iter (± 652) 171780 ns/iter (± 840) 1.01
es2020_nullish_coalescing 67593 ns/iter (± 127) 67021 ns/iter (± 169) 1.01
es2020_optional_chaining 96624 ns/iter (± 333) 96386 ns/iter (± 8451) 1.00
es2022_class_properties 94474 ns/iter (± 246) 93230 ns/iter (± 305) 1.01
es2018_object_rest_spread 71958 ns/iter (± 135) 71516 ns/iter (± 141) 1.01
es2019_optional_catch_binding 62357 ns/iter (± 134) 61114 ns/iter (± 208) 1.02
es2017_async_to_generator 62369 ns/iter (± 107) 61594 ns/iter (± 198) 1.01
es2016_exponentiation 66283 ns/iter (± 105) 65317 ns/iter (± 267) 1.01
es2015_arrow 70101 ns/iter (± 78) 69635 ns/iter (± 238) 1.01
es2015_block_scoped_fn 67288 ns/iter (± 156) 66181 ns/iter (± 315) 1.02
es2015_block_scoping 139444 ns/iter (± 6583) 137303 ns/iter (± 685) 1.02
es2015_classes 118229 ns/iter (± 466) 116872 ns/iter (± 301) 1.01
es2015_computed_props 62214 ns/iter (± 90) 61288 ns/iter (± 171) 1.02
es2015_destructuring 117163 ns/iter (± 389) 117451 ns/iter (± 555) 1.00
es2015_duplicate_keys 64661 ns/iter (± 124) 63499 ns/iter (± 235) 1.02
es2015_parameters 80902 ns/iter (± 122) 79652 ns/iter (± 330) 1.02
es2015_fn_name 67422 ns/iter (± 399) 66404 ns/iter (± 647) 1.02
es2015_for_of 65266 ns/iter (± 117) 64039 ns/iter (± 449) 1.02
es2015_instanceof 64445 ns/iter (± 86) 63256 ns/iter (± 221) 1.02
es2015_shorthand_property 61761 ns/iter (± 91) 60917 ns/iter (± 365) 1.01
es2015_spread 61917 ns/iter (± 77) 60938 ns/iter (± 137) 1.02
es2015_sticky_regex 63461 ns/iter (± 96) 62374 ns/iter (± 191) 1.02
es2015_typeof_symbol 63173 ns/iter (± 95) 62364 ns/iter (± 84) 1.01
es/transform/baseline/base 52620 ns/iter (± 56) 51490 ns/iter (± 227) 1.02
es/transform/baseline/common_reserved_word 63636 ns/iter (± 110) 63052 ns/iter (± 131) 1.01
es/transform/baseline/common_typescript 142833 ns/iter (± 354) 167511 ns/iter (± 397) 0.85
es/target/es3 170781 ns/iter (± 170) 169466 ns/iter (± 285) 1.01
es/target/es2015 632274 ns/iter (± 1191) 627546 ns/iter (± 2234) 1.01
es/target/es2016 66253 ns/iter (± 109) 65400 ns/iter (± 163) 1.01
es/target/es2017 62444 ns/iter (± 147) 61785 ns/iter (± 367) 1.01
es/target/es2018 82170 ns/iter (± 141) 81636 ns/iter (± 217) 1.01
es/target/es2020 133675 ns/iter (± 210) 133294 ns/iter (± 417) 1.00
babelify-only 679401 ns/iter (± 9207) 668885 ns/iter (± 4490) 1.02
parse_and_babelify_angular 45672767 ns/iter (± 1243075) 44735247 ns/iter (± 738614) 1.02
parse_and_babelify_backbone 5511518 ns/iter (± 60785) 5399517 ns/iter (± 66577) 1.02
parse_and_babelify_jquery 32518643 ns/iter (± 919592) 31077300 ns/iter (± 382571) 1.05
parse_and_babelify_jquery_mobile 56371754 ns/iter (± 956671) 52337561 ns/iter (± 717690) 1.08
parse_and_babelify_mootools 33829593 ns/iter (± 518571) 32392512 ns/iter (± 495018) 1.04
parse_and_babelify_underscore 4360509 ns/iter (± 46527) 4265521 ns/iter (± 29769) 1.02
parse_and_babelify_yui 33886593 ns/iter (± 737284) 31785304 ns/iter (± 525010) 1.07
html/minify/document/css_spec 43791040 ns/iter (± 483221) 42045594 ns/iter (± 416011) 1.04
html/minify/document/github 17835001 ns/iter (± 101535) 17478857 ns/iter (± 56266) 1.02
html/minify/document/stackoverflow 15951789 ns/iter (± 104233) 15692889 ns/iter (± 52735) 1.02
html/minify/document_fragment/css_spec 41867335 ns/iter (± 333076) 39733949 ns/iter (± 223939) 1.05
html/minify/document_fragment/github 17003483 ns/iter (± 51360) 16688373 ns/iter (± 54698) 1.02
html/minify/document_fragment/stackoverflow 15387097 ns/iter (± 77696) 15255229 ns/iter (± 60271) 1.01
html/document/visitor/compare/clone 343577 ns/iter (± 1781) 341115 ns/iter (± 2009) 1.01
html/document/visitor/compare/visit_mut_span 370500 ns/iter (± 1826) 366030 ns/iter (± 2195) 1.01
html/document/visitor/compare/visit_mut_span_panic 379342 ns/iter (± 2273) 376164 ns/iter (± 1699) 1.01
html/document/visitor/compare/fold_span 408078 ns/iter (± 1686) 402728 ns/iter (± 2135) 1.01
html/document/visitor/compare/fold_span_panic 465350 ns/iter (± 1205) 459246 ns/iter (± 1837) 1.01
html/document_fragment/visitor/compare/clone 342910 ns/iter (± 2287) 337988 ns/iter (± 1682) 1.01
html/document_fragment/visitor/compare/visit_mut_span 367800 ns/iter (± 1863) 366475 ns/iter (± 7125) 1.00
html/document_fragment/visitor/compare/visit_mut_span_panic 381867 ns/iter (± 2771) 372245 ns/iter (± 2255) 1.03
html/document_fragment/visitor/compare/fold_span 411443 ns/iter (± 1939) 404601 ns/iter (± 2331) 1.02
html/document_fragment/visitor/compare/fold_span_panic 462120 ns/iter (± 2466) 460167 ns/iter (± 2630) 1.00
html/lexer/css_2021_spec 15490740 ns/iter (± 6781) 15433036 ns/iter (± 54800) 1.00
html/lexer/github_com_17_05_2022 5973797 ns/iter (± 2137) 5921030 ns/iter (± 9670) 1.01
html/lexer/stackoverflow_com_17_05_2022 5576863 ns/iter (± 1092) 5553368 ns/iter (± 9251) 1.00
html/parser/parser_document/css_2021_spec 26620179 ns/iter (± 398884) 26118689 ns/iter (± 409858) 1.02
html/parser/parser_document/github_com_17_05_2022 8794393 ns/iter (± 16904) 8756527 ns/iter (± 16702) 1.00
html/parser/parser_document/stackoverflow_com_17_05_2022 7690204 ns/iter (± 7991) 7671563 ns/iter (± 15954) 1.00
html/parser/parser_document_fragment/css_2021_spec 26831307 ns/iter (± 225186) 25949001 ns/iter (± 134062) 1.03
html/parser/parser_document_fragment/github_com_17_05_2022 8819990 ns/iter (± 60170) 8769966 ns/iter (± 79058) 1.01
html/parser/parser_document_fragment/stackoverflow_com_17_05_2022 7759943 ns/iter (± 12279) 7670221 ns/iter (± 18335) 1.01

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

Please sign in to comment.