Skip to content

Commit

Permalink
perf(es/lexer): Make lexer faster (#7052)
Browse files Browse the repository at this point in the history
  • Loading branch information
kdy1 committed Mar 11, 2023
1 parent d868434 commit d1d0607
Show file tree
Hide file tree
Showing 5 changed files with 44 additions and 32 deletions.
49 changes: 28 additions & 21 deletions crates/swc_common/src/input.rs
Expand Up @@ -77,20 +77,6 @@ impl<'a> Input for StringInput<'a> {
self.iter.clone().nth(2).map(|i| i.1)
}

#[inline]
fn is_str(&self, s: &str) -> bool {
let mut s_iter = s.as_bytes().iter();
let mut p_iter = self.iter.clone().map(|i| i.1);

while let (Some(expected), Some(actual)) = (s_iter.next(), p_iter.next()) {
if *expected as char != actual {
return false;
}
}

s_iter.next().is_none()
}

#[inline]
fn bump(&mut self) {
if let Some((i, c)) = self.iter.next() {
Expand All @@ -102,6 +88,16 @@ impl<'a> Input for StringInput<'a> {
}
}

#[inline]
fn cur_as_ascii(&mut self) -> Option<u8> {
let first_byte = *self.as_str().as_bytes().first()?;
if first_byte <= 0x7f {
Some(first_byte)
} else {
None
}
}

#[inline]
fn is_at_start(&self) -> bool {
self.orig_start == self.last_pos
Expand All @@ -120,15 +116,17 @@ impl<'a> Input for StringInput<'a> {

#[inline]
fn slice(&mut self, start: BytePos, end: BytePos) -> &str {
assert!(start <= end, "Cannot slice {:?}..{:?}", start, end);
debug_assert!(start <= end, "Cannot slice {:?}..{:?}", start, end);
let s = self.orig;

let start_idx = (start - self.orig_start).0 as usize;
let end_idx = (end - self.orig_start).0 as usize;

let ret = &s[start_idx..end_idx];
debug_assert!(end_idx <= s.len());

let ret = unsafe { s.get_unchecked(start_idx..end_idx) };

self.iter = s[end_idx..].char_indices();
self.iter = unsafe { s.get_unchecked(end_idx..) }.char_indices();
self.last_pos = end;
self.start_pos_of_iter = end;

Expand All @@ -149,11 +147,12 @@ impl<'a> Input for StringInput<'a> {
break;
}
}
let ret = &s[..last];
debug_assert!(last <= s.len());
let ret = unsafe { s.get_unchecked(..last) };

self.last_pos = self.last_pos + BytePos(last as _);
self.start_pos_of_iter = self.last_pos;
self.iter = s[last..].char_indices();
self.iter = unsafe { s.get_unchecked(last..) }.char_indices();

ret
}
Expand All @@ -175,9 +174,11 @@ impl<'a> Input for StringInput<'a> {
return None;
}

debug_assert!(last <= s.len());

self.last_pos = self.last_pos + BytePos(last as _);
self.start_pos_of_iter = self.last_pos;
self.iter = s[last..].char_indices();
self.iter = unsafe { s.get_unchecked(last..) }.char_indices();

Some(self.last_pos)
}
Expand All @@ -187,7 +188,8 @@ impl<'a> Input for StringInput<'a> {
let orig = self.orig;
let idx = (to - self.orig_start).0 as usize;

let s = &orig[idx..];
debug_assert!(idx <= orig.len());
let s = unsafe { orig.get_unchecked(idx..) };
self.iter = s.char_indices();
self.start_pos_of_iter = to;
self.last_pos = to;
Expand All @@ -203,6 +205,11 @@ impl<'a> Input for StringInput<'a> {
}
}

#[inline]
fn is_str(&self, s: &str) -> bool {
self.as_str().starts_with(s)
}

#[inline]
fn eat_byte(&mut self, c: u8) -> bool {
if self.is_byte(c) {
Expand Down
2 changes: 1 addition & 1 deletion crates/swc_ecma_parser/src/lexer/jsx.rs
Expand Up @@ -26,7 +26,7 @@ impl<'a> Lexer<'a> {

self.emit_error_span(span, SyntaxError::TS1185);
self.skip_line_comment(6);
self.skip_space(true)?;
self.skip_space::<true>()?;
return self.read_token();
}
'<' | '{' => {
Expand Down
15 changes: 10 additions & 5 deletions crates/swc_ecma_parser/src/lexer/mod.rs
Expand Up @@ -243,7 +243,7 @@ impl<'a> Lexer<'a> {
SyntaxError::LegacyCommentInModule,
);
self.skip_line_comment(0);
self.skip_space(true)?;
self.skip_space::<true>()?;
return self.read_token();
}

Expand Down Expand Up @@ -282,7 +282,7 @@ impl<'a> Lexer<'a> {
SyntaxError::TS1185,
);
self.skip_line_comment(4);
self.skip_space(true)?;
self.skip_space::<true>()?;
return self.read_token();
}

Expand All @@ -303,6 +303,11 @@ impl<'a> Lexer<'a> {
AssignOp(Assign)
}));
}

b'a'..=b'z' | b'A'..=b'Z' | b'$' | b'_' | b'\\' => {
// Fast path for ascii identifiers.
return self.read_ident_or_keyword().map(Some);
}
_ => {}
}
}
Expand Down Expand Up @@ -504,7 +509,7 @@ impl<'a> Lexer<'a> {
let span = fixed_len_span(start, 7);
self.emit_error_span(span, SyntaxError::TS1185);
self.skip_line_comment(5);
self.skip_space(true)?;
self.skip_space::<true>()?;
return self.error_span(span, SyntaxError::TS1185);
}

Expand Down Expand Up @@ -719,7 +724,7 @@ impl<'a> Lexer<'a> {
// XML style comment. `<!--`
if c == '<' && self.is(b'!') && self.peek() == Some('-') && self.peek_ahead() == Some('-') {
self.skip_line_comment(3);
self.skip_space(true)?;
self.skip_space::<true>()?;
self.emit_module_mode_error(start, SyntaxError::LegacyCommentInModule);

return self.read_token();
Expand Down Expand Up @@ -767,7 +772,7 @@ impl<'a> Lexer<'a> {
{
self.emit_error_span(fixed_len_span(start, 7), SyntaxError::TS1185);
self.skip_line_comment(5);
self.skip_space(true)?;
self.skip_space::<true>()?;
return self.read_token();
}

Expand Down
4 changes: 2 additions & 2 deletions crates/swc_ecma_parser/src/lexer/state.rs
Expand Up @@ -214,7 +214,7 @@ impl<'a> Iterator for Lexer<'a> {

// skip spaces before getting next character, if we are allowed to.
if self.state.can_skip_space() {
self.skip_space(true)?;
self.skip_space::<true>()?;
start = self.input.cur_pos();
};

Expand Down Expand Up @@ -309,7 +309,7 @@ impl<'a> Iterator for Lexer<'a> {

self.emit_error_span(span, SyntaxError::TS1185);
self.skip_line_comment(6);
self.skip_space(true)?;
self.skip_space::<true>()?;
return self.read_token();
}

Expand Down
6 changes: 3 additions & 3 deletions crates/swc_ecma_parser/src/lexer/util.rs
Expand Up @@ -182,7 +182,7 @@ impl<'a> Lexer<'a> {
/// Skip comments or whitespaces.
///
/// See https://tc39.github.io/ecma262/#sec-white-space
pub(super) fn skip_space(&mut self, lex_comments: bool) -> LexResult<()> {
pub(super) fn skip_space<const LEX_COMMENTS: bool>(&mut self) -> LexResult<()> {
loop {
let cur_b = self.input.cur_as_ascii();

Expand All @@ -197,7 +197,7 @@ impl<'a> Lexer<'a> {
continue;
}

if lex_comments && self.input.is_byte(b'/') {
if LEX_COMMENTS && self.input.is_byte(b'/') {
if self.peek() == Some('/') {
self.skip_line_comment(2);
continue;
Expand Down Expand Up @@ -308,7 +308,7 @@ impl<'a> Lexer<'a> {

let end = self.cur_pos();

self.skip_space(false)?;
self.skip_space::<false>()?;

if self.input.is_byte(b';') {
is_for_next = false;
Expand Down

1 comment on commit d1d0607

@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: d1d0607 Previous: 3730463 Ratio
es/full/bugs-1 303570 ns/iter (± 4221) 302247 ns/iter (± 4165) 1.00
es/full/minify/libraries/antd 1528390384 ns/iter (± 21207897) 1675944773 ns/iter (± 26443839) 0.91
es/full/minify/libraries/d3 293399345 ns/iter (± 4460407) 306235617 ns/iter (± 6948163) 0.96
es/full/minify/libraries/echarts 1180605201 ns/iter (± 8394167) 1289144969 ns/iter (± 12675977) 0.92
es/full/minify/libraries/jquery 90322566 ns/iter (± 494140) 92168251 ns/iter (± 877921) 0.98
es/full/minify/libraries/lodash 104485776 ns/iter (± 907990) 107819589 ns/iter (± 1087051) 0.97
es/full/minify/libraries/moment 51878084 ns/iter (± 403467) 53113998 ns/iter (± 435567) 0.98
es/full/minify/libraries/react 18929741 ns/iter (± 112830) 19253277 ns/iter (± 216999) 0.98
es/full/minify/libraries/terser 239407236 ns/iter (± 2345685) 253497336 ns/iter (± 2028841) 0.94
es/full/minify/libraries/three 420757315 ns/iter (± 4123932) 455219110 ns/iter (± 3486951) 0.92
es/full/minify/libraries/typescript 2921583690 ns/iter (± 16431581) 3150634297 ns/iter (± 27470649) 0.93
es/full/minify/libraries/victory 645045260 ns/iter (± 8360843) 697611672 ns/iter (± 9277887) 0.92
es/full/minify/libraries/vue 128708267 ns/iter (± 773589) 135335730 ns/iter (± 1666325) 0.95
es/full/codegen/es3 26117 ns/iter (± 55) 26097 ns/iter (± 53) 1.00
es/full/codegen/es5 26145 ns/iter (± 44) 26108 ns/iter (± 47) 1.00
es/full/codegen/es2015 26154 ns/iter (± 51) 26079 ns/iter (± 39) 1.00
es/full/codegen/es2016 26144 ns/iter (± 61) 26096 ns/iter (± 52) 1.00
es/full/codegen/es2017 26114 ns/iter (± 46) 26132 ns/iter (± 69) 1.00
es/full/codegen/es2018 26170 ns/iter (± 70) 26105 ns/iter (± 52) 1.00
es/full/codegen/es2019 26228 ns/iter (± 72) 26134 ns/iter (± 51) 1.00
es/full/codegen/es2020 26143 ns/iter (± 77) 26139 ns/iter (± 36) 1.00
es/full/all/es3 171117386 ns/iter (± 3480011) 176446227 ns/iter (± 1494365) 0.97
es/full/all/es5 164468442 ns/iter (± 2084823) 166962751 ns/iter (± 2622794) 0.99
es/full/all/es2015 125725181 ns/iter (± 732342) 130397342 ns/iter (± 1423648) 0.96
es/full/all/es2016 124562940 ns/iter (± 747598) 129346180 ns/iter (± 1543540) 0.96
es/full/all/es2017 124004072 ns/iter (± 1799448) 127283176 ns/iter (± 1808526) 0.97
es/full/all/es2018 120995583 ns/iter (± 868384) 123741928 ns/iter (± 1090418) 0.98
es/full/all/es2019 119837523 ns/iter (± 709717) 123283178 ns/iter (± 1112594) 0.97
es/full/all/es2020 115716637 ns/iter (± 747124) 117367688 ns/iter (± 1269289) 0.99
es/full/parser 543626 ns/iter (± 7260) 551627 ns/iter (± 10374) 0.99
es/full/base/fixer 22718 ns/iter (± 168) 24480 ns/iter (± 187) 0.93
es/full/base/resolver_and_hygiene 83386 ns/iter (± 89) 84075 ns/iter (± 484) 0.99
serialization of ast node 145 ns/iter (± 0) 145 ns/iter (± 0) 1
serialization of serde 130 ns/iter (± 0) 129 ns/iter (± 0) 1.01
css/minify/libraries/bootstrap 27947360 ns/iter (± 88766) 28207148 ns/iter (± 83981) 0.99
css/visitor/compare/clone 2074807 ns/iter (± 14407) 2078707 ns/iter (± 8078) 1.00
css/visitor/compare/visit_mut_span 2276210 ns/iter (± 4939) 2272204 ns/iter (± 8109) 1.00
css/visitor/compare/visit_mut_span_panic 2337443 ns/iter (± 3938) 2341264 ns/iter (± 3443) 1.00
css/visitor/compare/fold_span 3048013 ns/iter (± 17480) 3064676 ns/iter (± 11951) 0.99
css/visitor/compare/fold_span_panic 3174584 ns/iter (± 19603) 3201329 ns/iter (± 22681) 0.99
css/lexer/bootstrap_5_1_3 5174853 ns/iter (± 3322) 5212484 ns/iter (± 3820) 0.99
css/lexer/foundation_6_7_4 4349482 ns/iter (± 3028) 4394026 ns/iter (± 2635) 0.99
css/lexer/tailwind_3_1_1 828024 ns/iter (± 864) 831796 ns/iter (± 1101) 1.00
css/parser/bootstrap_5_1_3 21651860 ns/iter (± 23056) 22027154 ns/iter (± 61491) 0.98
css/parser/foundation_6_7_4 17294421 ns/iter (± 30515) 17560859 ns/iter (± 57520) 0.98
css/parser/tailwind_3_1_1 3319591 ns/iter (± 3372) 3363354 ns/iter (± 5418) 0.99
es/codegen/colors 330948 ns/iter (± 186758) 326920 ns/iter (± 184601) 1.01
es/codegen/large 1228303 ns/iter (± 630903) 1193621 ns/iter (± 615405) 1.03
es/codegen/with-parser/colors 46773 ns/iter (± 263) 48534 ns/iter (± 122) 0.96
es/codegen/with-parser/large 519035 ns/iter (± 2061) 522692 ns/iter (± 966) 0.99
es/minify/libraries/antd 1318193012 ns/iter (± 13539145) 1453148666 ns/iter (± 23088570) 0.91
es/minify/libraries/d3 246957550 ns/iter (± 1224024) 258717419 ns/iter (± 3000984) 0.95
es/minify/libraries/echarts 1010161312 ns/iter (± 7241867) 1099571728 ns/iter (± 8912178) 0.92
es/minify/libraries/jquery 77998191 ns/iter (± 406033) 79421625 ns/iter (± 709378) 0.98
es/minify/libraries/lodash 93565337 ns/iter (± 815656) 95524244 ns/iter (± 1077030) 0.98
es/minify/libraries/moment 45333254 ns/iter (± 202974) 46264185 ns/iter (± 627819) 0.98
es/minify/libraries/react 16840153 ns/iter (± 147773) 17267938 ns/iter (± 109311) 0.98
es/minify/libraries/terser 202746264 ns/iter (± 1543236) 213481566 ns/iter (± 3098327) 0.95
es/minify/libraries/three 344416604 ns/iter (± 2544277) 373112317 ns/iter (± 4919587) 0.92
es/minify/libraries/typescript 2456113649 ns/iter (± 12506549) 2647228549 ns/iter (± 11993951) 0.93
es/minify/libraries/victory 538921663 ns/iter (± 5467010) 577141571 ns/iter (± 15027667) 0.93
es/minify/libraries/vue 114893286 ns/iter (± 886418) 117808165 ns/iter (± 2302882) 0.98
es/visitor/compare/clone 2305130 ns/iter (± 7235) 2299558 ns/iter (± 11822) 1.00
es/visitor/compare/visit_mut_span 2680703 ns/iter (± 21495) 2673825 ns/iter (± 4111) 1.00
es/visitor/compare/visit_mut_span_panic 2701650 ns/iter (± 20948) 2729224 ns/iter (± 7749) 0.99
es/visitor/compare/fold_span 3756619 ns/iter (± 13339) 3775575 ns/iter (± 9587) 0.99
es/visitor/compare/fold_span_panic 3914006 ns/iter (± 12952) 3968660 ns/iter (± 18999) 0.99
es/lexer/colors 15566 ns/iter (± 15) 16575 ns/iter (± 19) 0.94
es/lexer/angular 7727194 ns/iter (± 3738) 8155002 ns/iter (± 8107) 0.95
es/lexer/backbone 1001352 ns/iter (± 608) 1015438 ns/iter (± 646) 0.99
es/lexer/jquery 5577146 ns/iter (± 3556) 5714234 ns/iter (± 2405) 0.98
es/lexer/jquery mobile 8593082 ns/iter (± 5198) 8788367 ns/iter (± 6346) 0.98
es/lexer/mootools 4405240 ns/iter (± 8672) 4496694 ns/iter (± 3929) 0.98
es/lexer/underscore 833141 ns/iter (± 642) 849238 ns/iter (± 1286) 0.98
es/lexer/three 26016949 ns/iter (± 14813) 26557876 ns/iter (± 28284) 0.98
es/lexer/yui 4733569 ns/iter (± 8061) 4938061 ns/iter (± 3986) 0.96
es/parser/colors 30002 ns/iter (± 75) 30500 ns/iter (± 134) 0.98
es/parser/angular 15533474 ns/iter (± 133681) 15821532 ns/iter (± 104381) 0.98
es/parser/backbone 2244443 ns/iter (± 10707) 2276344 ns/iter (± 12901) 0.99
es/parser/jquery 12215784 ns/iter (± 77606) 12350068 ns/iter (± 85668) 0.99
es/parser/jquery mobile 18942899 ns/iter (± 198732) 19468476 ns/iter (± 402394) 0.97
es/parser/mootools 9344819 ns/iter (± 27081) 9419493 ns/iter (± 23880) 0.99
es/parser/underscore 1907189 ns/iter (± 10243) 1926613 ns/iter (± 11444) 0.99
es/parser/three 54297186 ns/iter (± 475476) 57699306 ns/iter (± 380893) 0.94
es/parser/yui 9397280 ns/iter (± 48272) 9576844 ns/iter (± 61832) 0.98
es/preset-env/usage/builtin_type 141469 ns/iter (± 33111) 141063 ns/iter (± 32716) 1.00
es/preset-env/usage/property 21724 ns/iter (± 116) 21013 ns/iter (± 83) 1.03
es/resolver/typescript 106413068 ns/iter (± 2415127) 113832645 ns/iter (± 1737902) 0.93
es/fixer/typescript 76925493 ns/iter (± 605608) 82508044 ns/iter (± 513308) 0.93
es/hygiene/typescript 162697352 ns/iter (± 1367100) 180308139 ns/iter (± 1167495) 0.90
es/resolver_with_hygiene/typescript 287771661 ns/iter (± 2797680) 312336544 ns/iter (± 2955298) 0.92
es/visitor/base-perf/module_clone 76316 ns/iter (± 1291) 81263 ns/iter (± 2010) 0.94
es/visitor/base-perf/fold_empty 87604 ns/iter (± 1398) 90752 ns/iter (± 1840) 0.97
es/visitor/base-perf/fold_noop_impl_all 88082 ns/iter (± 1464) 92340 ns/iter (± 1903) 0.95
es/visitor/base-perf/fold_noop_impl_vec 89835 ns/iter (± 2521) 91843 ns/iter (± 898) 0.98
es/visitor/base-perf/boxing_boxed_clone 56 ns/iter (± 0) 56 ns/iter (± 0) 1
es/visitor/base-perf/boxing_unboxed_clone 54 ns/iter (± 0) 54 ns/iter (± 0) 1
es/visitor/base-perf/boxing_boxed 102 ns/iter (± 0) 101 ns/iter (± 0) 1.01
es/visitor/base-perf/boxing_unboxed 95 ns/iter (± 0) 96 ns/iter (± 0) 0.99
es/visitor/base-perf/visit_contains_this 3455 ns/iter (± 59) 3549 ns/iter (± 64) 0.97
es/base/parallel/resolver/typescript 5125697138 ns/iter (± 327801498) 5436935148 ns/iter (± 517238431) 0.94
es/base/parallel/hygiene/typescript 1949807160 ns/iter (± 26114563) 2118307390 ns/iter (± 36435393) 0.92
misc/visitors/time-complexity/time 5 101 ns/iter (± 0) 101 ns/iter (± 0) 1
misc/visitors/time-complexity/time 10 342 ns/iter (± 0) 343 ns/iter (± 1) 1.00
misc/visitors/time-complexity/time 15 666 ns/iter (± 0) 666 ns/iter (± 2) 1
misc/visitors/time-complexity/time 20 1241 ns/iter (± 2) 1241 ns/iter (± 1) 1
misc/visitors/time-complexity/time 40 6695 ns/iter (± 32) 6749 ns/iter (± 18) 0.99
misc/visitors/time-complexity/time 60 17135 ns/iter (± 38) 17258 ns/iter (± 52) 0.99
es/full-target/es2016 188356 ns/iter (± 441) 188036 ns/iter (± 562) 1.00
es/full-target/es2017 183606 ns/iter (± 630) 182840 ns/iter (± 599) 1.00
es/full-target/es2018 172289 ns/iter (± 471) 171992 ns/iter (± 353) 1.00
es2020_nullish_coalescing 66819 ns/iter (± 110) 66854 ns/iter (± 166) 1.00
es2020_optional_chaining 95209 ns/iter (± 265) 95676 ns/iter (± 309) 1.00
es2022_class_properties 93185 ns/iter (± 249) 93528 ns/iter (± 222) 1.00
es2018_object_rest_spread 71945 ns/iter (± 435) 72084 ns/iter (± 157) 1.00
es2019_optional_catch_binding 61176 ns/iter (± 212) 61487 ns/iter (± 188) 0.99
es2017_async_to_generator 61655 ns/iter (± 130) 61715 ns/iter (± 96) 1.00
es2016_exponentiation 65656 ns/iter (± 59) 65328 ns/iter (± 187) 1.01
es2015_arrow 70241 ns/iter (± 102) 69991 ns/iter (± 107) 1.00
es2015_block_scoped_fn 66611 ns/iter (± 132) 66804 ns/iter (± 152) 1.00
es2015_block_scoping 137674 ns/iter (± 5174) 153476 ns/iter (± 11257) 0.90
es2015_classes 117046 ns/iter (± 216) 117826 ns/iter (± 466) 0.99
es2015_computed_props 61162 ns/iter (± 127) 61634 ns/iter (± 616) 0.99
es2015_destructuring 118460 ns/iter (± 385) 118343 ns/iter (± 351) 1.00
es2015_duplicate_keys 63569 ns/iter (± 100) 63949 ns/iter (± 181) 0.99
es2015_parameters 79977 ns/iter (± 195) 80732 ns/iter (± 332) 0.99
es2015_fn_name 66118 ns/iter (± 407) 66110 ns/iter (± 570) 1.00
es2015_for_of 64321 ns/iter (± 74) 64616 ns/iter (± 128) 1.00
es2015_instanceof 63488 ns/iter (± 73) 63441 ns/iter (± 178) 1.00
es2015_shorthand_property 61420 ns/iter (± 117) 61464 ns/iter (± 137) 1.00
es2015_spread 60777 ns/iter (± 112) 61348 ns/iter (± 212) 0.99
es2015_sticky_regex 62310 ns/iter (± 100) 62525 ns/iter (± 228) 1.00
es2015_typeof_symbol 62142 ns/iter (± 207) 62799 ns/iter (± 144) 0.99
es/transform/baseline/base 51850 ns/iter (± 69) 51871 ns/iter (± 154) 1.00
es/transform/baseline/common_reserved_word 62928 ns/iter (± 111) 63048 ns/iter (± 129) 1.00
es/transform/baseline/common_typescript 143908 ns/iter (± 3597) 167378 ns/iter (± 180) 0.86
es/target/es3 168098 ns/iter (± 201) 169147 ns/iter (± 362) 0.99
es/target/es2015 628811 ns/iter (± 1239) 628729 ns/iter (± 941) 1.00
es/target/es2016 65439 ns/iter (± 130) 65233 ns/iter (± 154) 1.00
es/target/es2017 61725 ns/iter (± 119) 61558 ns/iter (± 116) 1.00
es/target/es2018 82054 ns/iter (± 152) 81826 ns/iter (± 103) 1.00
es/target/es2020 132210 ns/iter (± 200) 132258 ns/iter (± 267) 1.00
babelify-only 669948 ns/iter (± 951) 653968 ns/iter (± 12483) 1.02
parse_and_babelify_angular 43409641 ns/iter (± 790701) 46229152 ns/iter (± 822351) 0.94
parse_and_babelify_backbone 5372651 ns/iter (± 28143) 5487889 ns/iter (± 72054) 0.98
parse_and_babelify_jquery 31280916 ns/iter (± 307513) 32956410 ns/iter (± 492715) 0.95
parse_and_babelify_jquery_mobile 53763538 ns/iter (± 752000) 55880119 ns/iter (± 655076) 0.96
parse_and_babelify_mootools 31916647 ns/iter (± 248662) 34565506 ns/iter (± 266315) 0.92
parse_and_babelify_underscore 4278751 ns/iter (± 13811) 4363284 ns/iter (± 20922) 0.98
parse_and_babelify_yui 31569194 ns/iter (± 603101) 34347159 ns/iter (± 314135) 0.92
html/minify/document/css_spec 42217732 ns/iter (± 530803) 43392608 ns/iter (± 337886) 0.97
html/minify/document/github 17591357 ns/iter (± 52645) 17818256 ns/iter (± 55853) 0.99
html/minify/document/stackoverflow 15852824 ns/iter (± 31695) 15838051 ns/iter (± 40071) 1.00
html/minify/document_fragment/css_spec 40266079 ns/iter (± 237094) 41336068 ns/iter (± 203540) 0.97
html/minify/document_fragment/github 16937404 ns/iter (± 164180) 17064234 ns/iter (± 41058) 0.99
html/minify/document_fragment/stackoverflow 15375535 ns/iter (± 34145) 15436453 ns/iter (± 36043) 1.00
html/document/visitor/compare/clone 340532 ns/iter (± 1506) 347181 ns/iter (± 2548) 0.98
html/document/visitor/compare/visit_mut_span 365853 ns/iter (± 2603) 370598 ns/iter (± 2463) 0.99
html/document/visitor/compare/visit_mut_span_panic 376911 ns/iter (± 2155) 380180 ns/iter (± 1141) 0.99
html/document/visitor/compare/fold_span 404938 ns/iter (± 1646) 411505 ns/iter (± 1885) 0.98
html/document/visitor/compare/fold_span_panic 467533 ns/iter (± 2729) 465539 ns/iter (± 1788) 1.00
html/document_fragment/visitor/compare/clone 342732 ns/iter (± 3690) 346981 ns/iter (± 1993) 0.99
html/document_fragment/visitor/compare/visit_mut_span 370175 ns/iter (± 1957) 369035 ns/iter (± 5709) 1.00
html/document_fragment/visitor/compare/visit_mut_span_panic 374226 ns/iter (± 1437) 378722 ns/iter (± 2528) 0.99
html/document_fragment/visitor/compare/fold_span 405515 ns/iter (± 2112) 411989 ns/iter (± 1900) 0.98
html/document_fragment/visitor/compare/fold_span_panic 464577 ns/iter (± 1857) 465383 ns/iter (± 2701) 1.00
html/lexer/css_2021_spec 16038967 ns/iter (± 13071) 15568019 ns/iter (± 23475) 1.03
html/lexer/github_com_17_05_2022 6163567 ns/iter (± 2898) 6051432 ns/iter (± 9776) 1.02
html/lexer/stackoverflow_com_17_05_2022 5840405 ns/iter (± 2368) 5656894 ns/iter (± 6363) 1.03
html/parser/parser_document/css_2021_spec 25568994 ns/iter (± 155119) 26392395 ns/iter (± 128382) 0.97
html/parser/parser_document/github_com_17_05_2022 8804943 ns/iter (± 25235) 8911438 ns/iter (± 15175) 0.99
html/parser/parser_document/stackoverflow_com_17_05_2022 7676744 ns/iter (± 4522) 7787855 ns/iter (± 13919) 0.99
html/parser/parser_document_fragment/css_2021_spec 25786069 ns/iter (± 199829) 26399313 ns/iter (± 195696) 0.98
html/parser/parser_document_fragment/github_com_17_05_2022 8804156 ns/iter (± 7993) 8897385 ns/iter (± 15630) 0.99
html/parser/parser_document_fragment/stackoverflow_com_17_05_2022 7691753 ns/iter (± 8235) 7837725 ns/iter (± 13006) 0.98

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

Please sign in to comment.