Skip to content

Commit

Permalink
perf(common): Use Chars in StringInput (#9073)
Browse files Browse the repository at this point in the history
**Description:**

Now it's possible
  • Loading branch information
kdy1 committed Jun 18, 2024
1 parent e383961 commit 7698eaa
Showing 1 changed file with 10 additions and 10 deletions.
20 changes: 10 additions & 10 deletions crates/swc_common/src/input.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ pub type SourceFileInput<'a> = StringInput<'a>;
pub struct StringInput<'a> {
last_pos: BytePos,
/// Current cursor
iter: str::CharIndices<'a>,
iter: str::Chars<'a>,
orig: &'a str,
/// Original start position.
orig_start: BytePos,
Expand All @@ -32,7 +32,7 @@ impl<'a> StringInput<'a> {
StringInput {
last_pos: start,
orig: src,
iter: src.char_indices(),
iter: src.chars(),
orig_start: start,
}
}
Expand Down Expand Up @@ -65,22 +65,22 @@ impl<'a> From<&'a SourceFile> for StringInput<'a> {
impl<'a> Input for StringInput<'a> {
#[inline]
fn cur(&mut self) -> Option<char> {
self.iter.clone().next().map(|i| i.1)
self.iter.clone().next()
}

#[inline]
fn peek(&mut self) -> Option<char> {
self.iter.clone().nth(1).map(|i| i.1)
self.iter.clone().nth(1)
}

#[inline]
fn peek_ahead(&mut self) -> Option<char> {
self.iter.clone().nth(2).map(|i| i.1)
self.iter.clone().nth(2)
}

#[inline]
unsafe fn bump(&mut self) {
if let Some((_, c)) = self.iter.next() {
if let Some(c) = self.iter.next() {
self.last_pos = self.last_pos + BytePos((c.len_utf8()) as u32);
} else {
unsafe {
Expand Down Expand Up @@ -127,7 +127,7 @@ impl<'a> Input for StringInput<'a> {

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

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

ret
Expand All @@ -152,7 +152,7 @@ impl<'a> Input for StringInput<'a> {
let ret = unsafe { s.get_unchecked(..last) };

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

ret
}
Expand All @@ -177,7 +177,7 @@ impl<'a> Input for StringInput<'a> {
debug_assert!(last <= s.len());

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

Some(self.last_pos)
}
Expand All @@ -189,7 +189,7 @@ impl<'a> Input for StringInput<'a> {

debug_assert!(idx <= orig.len());
let s = unsafe { orig.get_unchecked(idx..) };
self.iter = s.char_indices();
self.iter = s.chars();
self.last_pos = to;
}

Expand Down

1 comment on commit 7698eaa

@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: 7698eaa Previous: 8d37dae Ratio
es/full/bugs-1 275430 ns/iter (± 3120) 277035 ns/iter (± 9745) 0.99
es/full/minify/libraries/antd 1887017536 ns/iter (± 103885813) 1804690285 ns/iter (± 82243333) 1.05
es/full/minify/libraries/d3 343452650 ns/iter (± 4053372) 344737502 ns/iter (± 9070701) 1.00
es/full/minify/libraries/echarts 1556670205 ns/iter (± 49263716) 1521118312 ns/iter (± 66540902) 1.02
es/full/minify/libraries/jquery 103179105 ns/iter (± 653604) 102428483 ns/iter (± 312032) 1.01
es/full/minify/libraries/lodash 114239358 ns/iter (± 525732) 113806455 ns/iter (± 267875) 1.00
es/full/minify/libraries/moment 59416180 ns/iter (± 239091) 59350212 ns/iter (± 71166) 1.00
es/full/minify/libraries/react 18261830 ns/iter (± 50041) 18401577 ns/iter (± 47146) 0.99
es/full/minify/libraries/terser 273414255 ns/iter (± 1383838) 270510899 ns/iter (± 1244541) 1.01
es/full/minify/libraries/three 474545202 ns/iter (± 10395100) 481796701 ns/iter (± 17971792) 0.98
es/full/minify/libraries/typescript 3236297429 ns/iter (± 39001397) 3399090723 ns/iter (± 53757027) 0.95
es/full/minify/libraries/victory 767220320 ns/iter (± 21248888) 783112330 ns/iter (± 16890649) 0.98
es/full/minify/libraries/vue 145448623 ns/iter (± 1276972) 147680937 ns/iter (± 1418083) 0.98
es/full/codegen/es3 60229 ns/iter (± 260) 60763 ns/iter (± 1089) 0.99
es/full/codegen/es5 59678 ns/iter (± 138) 61385 ns/iter (± 390) 0.97
es/full/codegen/es2015 59683 ns/iter (± 120) 60837 ns/iter (± 304) 0.98
es/full/codegen/es2016 59603 ns/iter (± 196) 60838 ns/iter (± 245) 0.98
es/full/codegen/es2017 59802 ns/iter (± 282) 60582 ns/iter (± 174) 0.99
es/full/codegen/es2018 59919 ns/iter (± 78) 60492 ns/iter (± 174) 0.99
es/full/codegen/es2019 59818 ns/iter (± 210) 60474 ns/iter (± 174) 0.99
es/full/codegen/es2020 59651 ns/iter (± 115) 60667 ns/iter (± 250) 0.98
es/full/all/es3 162683094 ns/iter (± 1449471) 164199198 ns/iter (± 815136) 0.99
es/full/all/es5 157249346 ns/iter (± 1243844) 158540261 ns/iter (± 937376) 0.99
es/full/all/es2015 116821769 ns/iter (± 914444) 117812222 ns/iter (± 571769) 0.99
es/full/all/es2016 115896189 ns/iter (± 862863) 117501845 ns/iter (± 850302) 0.99
es/full/all/es2017 115496592 ns/iter (± 692719) 117833220 ns/iter (± 979558) 0.98
es/full/all/es2018 113515500 ns/iter (± 808869) 114774323 ns/iter (± 1048761) 0.99
es/full/all/es2019 112602873 ns/iter (± 1090450) 113662279 ns/iter (± 802152) 0.99
es/full/all/es2020 109004340 ns/iter (± 901058) 109349246 ns/iter (± 1689164) 1.00
es/full/parser 467717 ns/iter (± 1648) 478507 ns/iter (± 2107) 0.98
es/full/base/fixer 15856 ns/iter (± 89) 15529 ns/iter (± 65) 1.02
es/full/base/resolver_and_hygiene 80823 ns/iter (± 186) 78810 ns/iter (± 147) 1.03
serialization of serde 268 ns/iter (± 12) 271 ns/iter (± 0) 0.99
css/minify/libraries/bootstrap 23044999 ns/iter (± 755764) 21799879 ns/iter (± 44977) 1.06
css/visitor/compare/clone 1401474 ns/iter (± 12895) 1399582 ns/iter (± 9733) 1.00
css/visitor/compare/visit_mut_span 1515316 ns/iter (± 6560) 1524233 ns/iter (± 7072) 0.99
css/visitor/compare/visit_mut_span_panic 1539233 ns/iter (± 49316) 1546686 ns/iter (± 37397) 1.00
css/visitor/compare/fold_span 2060533 ns/iter (± 7734) 2047249 ns/iter (± 20276) 1.01
css/visitor/compare/fold_span_panic 2159570 ns/iter (± 4142) 2170515 ns/iter (± 4677) 0.99
css/lexer/bootstrap_5_1_3 3433493 ns/iter (± 5389) 3450234 ns/iter (± 5488) 1.00
css/lexer/foundation_6_7_4 2779232 ns/iter (± 2391) 2794727 ns/iter (± 1520) 0.99
css/lexer/tailwind_3_1_1 531803 ns/iter (± 11931) 536658 ns/iter (± 2578) 0.99
css/parser/bootstrap_5_1_3 16038549 ns/iter (± 101657) 16255982 ns/iter (± 153549) 0.99
css/parser/foundation_6_7_4 12813130 ns/iter (± 85877) 12935355 ns/iter (± 24652) 0.99
css/parser/tailwind_3_1_1 2544448 ns/iter (± 15641) 2565061 ns/iter (± 8484) 0.99
es/codegen/colors 729701 ns/iter (± 397069) 736477 ns/iter (± 404546) 0.99
es/codegen/large 3040635 ns/iter (± 1596012) 3025568 ns/iter (± 1587788) 1.00
es/codegen/with-parser/colors 42877 ns/iter (± 479) 43233 ns/iter (± 292) 0.99
es/codegen/with-parser/large 457070 ns/iter (± 2112) 462204 ns/iter (± 61624) 0.99
es/minify/libraries/antd 1588622576 ns/iter (± 24878227) 1370765257 ns/iter (± 15795786) 1.16
es/minify/libraries/d3 300902492 ns/iter (± 9446718) 275719132 ns/iter (± 5503562) 1.09
es/minify/libraries/echarts 1297809895 ns/iter (± 8882147) 1108821151 ns/iter (± 11860711) 1.17
es/minify/libraries/jquery 83216862 ns/iter (± 640934) 82021144 ns/iter (± 853444) 1.01
es/minify/libraries/lodash 105444398 ns/iter (± 1189285) 103336731 ns/iter (± 1344519) 1.02
es/minify/libraries/moment 48303421 ns/iter (± 540638) 47431118 ns/iter (± 579074) 1.02
es/minify/libraries/react 16153857 ns/iter (± 21526) 15976878 ns/iter (± 157213) 1.01
es/minify/libraries/terser 222742183 ns/iter (± 2079585) 216035688 ns/iter (± 2453830) 1.03
es/minify/libraries/three 389857458 ns/iter (± 7185487) 354490600 ns/iter (± 2658228) 1.10
es/minify/libraries/typescript 2882727141 ns/iter (± 26501621) 2633829248 ns/iter (± 19594187) 1.09
es/minify/libraries/victory 663160442 ns/iter (± 22571736) 556557331 ns/iter (± 6561665) 1.19
es/minify/libraries/vue 122344183 ns/iter (± 991422) 119782951 ns/iter (± 879775) 1.02
es/visitor/compare/clone 1725292 ns/iter (± 9754) 1714598 ns/iter (± 9302) 1.01
es/visitor/compare/visit_mut_span 2066533 ns/iter (± 6019) 2064260 ns/iter (± 13014) 1.00
es/visitor/compare/visit_mut_span_panic 2078108 ns/iter (± 52751) 2067993 ns/iter (± 50917) 1.00
es/visitor/compare/fold_span 2784879 ns/iter (± 21347) 2782852 ns/iter (± 6447) 1.00
es/visitor/compare/fold_span_panic 2825287 ns/iter (± 4731) 2807009 ns/iter (± 4153) 1.01
es/lexer/colors 9979 ns/iter (± 236) 10525 ns/iter (± 100) 0.95
es/lexer/angular 5277630 ns/iter (± 92041) 5203174 ns/iter (± 18272) 1.01
es/lexer/backbone 632385 ns/iter (± 683) 635834 ns/iter (± 6798) 0.99
es/lexer/jquery 3650850 ns/iter (± 6123) 3645453 ns/iter (± 5430) 1.00
es/lexer/jquery mobile 5330844 ns/iter (± 9617) 5436796 ns/iter (± 25951) 0.98
es/lexer/mootools 2817543 ns/iter (± 33802) 2874676 ns/iter (± 5542) 0.98
es/lexer/underscore 524123 ns/iter (± 1958) 528023 ns/iter (± 897) 0.99
es/lexer/three 16284435 ns/iter (± 63454) 16431791 ns/iter (± 25597) 0.99
es/lexer/yui 2976648 ns/iter (± 10476) 2960107 ns/iter (± 45250) 1.01
es/lexer/cal-com 13540788 ns/iter (± 119572) 13774546 ns/iter (± 34933) 0.98
es/lexer/typescript 92049026 ns/iter (± 835896) 92063742 ns/iter (± 353648) 1.00
es/parser/colors 25310 ns/iter (± 230) 25619 ns/iter (± 390) 0.99
es/parser/angular 12989662 ns/iter (± 122307) 13057905 ns/iter (± 71423) 0.99
es/parser/backbone 1869882 ns/iter (± 7551) 1883258 ns/iter (± 5608) 0.99
es/parser/jquery 10321886 ns/iter (± 61098) 10397346 ns/iter (± 56802) 0.99
es/parser/jquery mobile 15561263 ns/iter (± 96405) 15591656 ns/iter (± 155626) 1.00
es/parser/mootools 8109960 ns/iter (± 21194) 8104549 ns/iter (± 18293) 1.00
es/parser/underscore 1638666 ns/iter (± 6725) 1645569 ns/iter (± 5974) 1.00
es/parser/three 44874009 ns/iter (± 406285) 45139357 ns/iter (± 179561) 0.99
es/parser/yui 7690749 ns/iter (± 45055) 7719495 ns/iter (± 120135) 1.00
es/parser/cal-com 42518817 ns/iter (± 365470) 42047951 ns/iter (± 548082) 1.01
es/parser/typescript 277428619 ns/iter (± 2820019) 277886832 ns/iter (± 1058621) 1.00
es/preset-env/usage/builtin_type 135760 ns/iter (± 33551) 136803 ns/iter (± 34061) 0.99
es/preset-env/usage/property 16421 ns/iter (± 68) 16062 ns/iter (± 61) 1.02
es/resolver/typescript 101184926 ns/iter (± 1779208) 102543741 ns/iter (± 2714845) 0.99
es/fixer/typescript 83730572 ns/iter (± 3004627) 82748494 ns/iter (± 5129072) 1.01
es/hygiene/typescript 180201712 ns/iter (± 3473273) 181395358 ns/iter (± 2821564) 0.99
es/resolver_with_hygiene/typescript 310051904 ns/iter (± 4735259) 308797414 ns/iter (± 10299784) 1.00
es/visitor/base-perf/module_clone 56968 ns/iter (± 536) 54880 ns/iter (± 895) 1.04
es/visitor/base-perf/fold_empty 60391 ns/iter (± 599) 58689 ns/iter (± 1701) 1.03
es/visitor/base-perf/fold_noop_impl_all 60377 ns/iter (± 815) 58721 ns/iter (± 931) 1.03
es/visitor/base-perf/fold_noop_impl_vec 60322 ns/iter (± 451) 58802 ns/iter (± 397) 1.03
es/visitor/base-perf/boxing_boxed_clone 61 ns/iter (± 0) 59 ns/iter (± 0) 1.03
es/visitor/base-perf/boxing_unboxed_clone 49 ns/iter (± 1) 47 ns/iter (± 0) 1.04
es/visitor/base-perf/boxing_boxed 106 ns/iter (± 0) 105 ns/iter (± 0) 1.01
es/visitor/base-perf/boxing_unboxed 85 ns/iter (± 0) 81 ns/iter (± 1) 1.05
es/visitor/base-perf/visit_contains_this 2485 ns/iter (± 12) 2629 ns/iter (± 8) 0.95
es/base/parallel/resolver/typescript 2456401746 ns/iter (± 136219302) 2496079973 ns/iter (± 163165691) 0.98
es/base/parallel/hygiene/typescript 3220299378 ns/iter (± 32074356) 3270888790 ns/iter (± 56325188) 0.98
babelify-only 475329 ns/iter (± 3812) 474807 ns/iter (± 2491) 1.00
parse_and_babelify_angular 43183478 ns/iter (± 1195811) 44084664 ns/iter (± 2872176) 0.98
parse_and_babelify_backbone 4418608 ns/iter (± 279942) 4374860 ns/iter (± 40841) 1.01
parse_and_babelify_jquery 28938290 ns/iter (± 1016986) 28012504 ns/iter (± 241713) 1.03
parse_and_babelify_jquery_mobile 54860153 ns/iter (± 1277388) 49529735 ns/iter (± 492575) 1.11
parse_and_babelify_mootools 26383435 ns/iter (± 1933827) 25278496 ns/iter (± 223889) 1.04
parse_and_babelify_underscore 3738474 ns/iter (± 157335) 3702084 ns/iter (± 24659) 1.01
parse_and_babelify_yui 31066976 ns/iter (± 3082601) 24709393 ns/iter (± 410820) 1.26
html/minify/document/css_spec 46494117 ns/iter (± 484233) 47865716 ns/iter (± 753030) 0.97
html/minify/document/github 18420202 ns/iter (± 61953) 19357256 ns/iter (± 201163) 0.95
html/minify/document/stackoverflow 16801589 ns/iter (± 783718) 17752589 ns/iter (± 440772) 0.95
html/minify/document_fragment/css_spec 45710907 ns/iter (± 312680) 46633632 ns/iter (± 956129) 0.98
html/minify/document_fragment/github 18116309 ns/iter (± 27492) 18836341 ns/iter (± 134581) 0.96
html/minify/document_fragment/stackoverflow 16522902 ns/iter (± 55126) 17362952 ns/iter (± 255607) 0.95
html/document/visitor/compare/clone 165584 ns/iter (± 2601) 163133 ns/iter (± 1138) 1.02
html/document/visitor/compare/visit_mut_span 181065 ns/iter (± 1479) 178565 ns/iter (± 873) 1.01
html/document/visitor/compare/visit_mut_span_panic 186121 ns/iter (± 2714) 186317 ns/iter (± 3766) 1.00
html/document/visitor/compare/fold_span 228567 ns/iter (± 976) 229132 ns/iter (± 815) 1.00
html/document/visitor/compare/fold_span_panic 281048 ns/iter (± 1283) 276867 ns/iter (± 832) 1.02
html/document_fragment/visitor/compare/clone 166340 ns/iter (± 911) 166072 ns/iter (± 1064) 1.00
html/document_fragment/visitor/compare/visit_mut_span 178063 ns/iter (± 888) 180606 ns/iter (± 881) 0.99
html/document_fragment/visitor/compare/visit_mut_span_panic 184154 ns/iter (± 1266) 185593 ns/iter (± 757) 0.99
html/document_fragment/visitor/compare/fold_span 228998 ns/iter (± 930) 229658 ns/iter (± 872) 1.00
html/document_fragment/visitor/compare/fold_span_panic 278326 ns/iter (± 1089) 279630 ns/iter (± 796) 1.00
html/lexer/css_2021_spec 12915945 ns/iter (± 94765) 12944455 ns/iter (± 489875) 1.00
html/lexer/github_com_17_05_2022 4941286 ns/iter (± 22916) 4969135 ns/iter (± 7662) 0.99
html/lexer/stackoverflow_com_17_05_2022 4645095 ns/iter (± 13695) 4674088 ns/iter (± 6629) 0.99
html/parser/parser_document/css_2021_spec 25416129 ns/iter (± 57171) 25095240 ns/iter (± 136707) 1.01
html/parser/parser_document/github_com_17_05_2022 8544722 ns/iter (± 12356) 8474088 ns/iter (± 7406) 1.01
html/parser/parser_document/stackoverflow_com_17_05_2022 7428371 ns/iter (± 8909) 7440349 ns/iter (± 14671) 1.00
html/parser/parser_document_fragment/css_2021_spec 25063023 ns/iter (± 92822) 24713607 ns/iter (± 111936) 1.01
html/parser/parser_document_fragment/github_com_17_05_2022 8413379 ns/iter (± 41618) 8373709 ns/iter (± 61956) 1.00
html/parser/parser_document_fragment/stackoverflow_com_17_05_2022 7384744 ns/iter (± 29965) 7266244 ns/iter (± 14730) 1.02

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

Please sign in to comment.