Skip to content

Commit

Permalink
perf(es/lexer): Add a fast-path to template literal lexer (#9080)
Browse files Browse the repository at this point in the history
**Description:**

We don't need to allocate at all in the fast path.
  • Loading branch information
kdy1 committed Jun 19, 2024
1 parent 8915c62 commit 238f1c5
Showing 1 changed file with 16 additions and 2 deletions.
18 changes: 16 additions & 2 deletions crates/swc_ecma_parser/src/lexer/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1257,7 +1257,21 @@ impl<'a> Lexer<'a> {
}
}

consume_cooked!();
// If we don't have any escape
let cooked = if cooked_slice_start == raw_slice_start {
let last_pos = self.cur_pos();
let s = unsafe {
// Safety: Both of start and last_pos are valid position because we got them
// from `self.input`
self.input.slice(cooked_slice_start, last_pos)
};

Ok(self.atoms.atom(s))
} else {
consume_cooked!();

cooked.map(|s| self.atoms.atom(s))
};

// TODO: Handle error
let end = self.input.cur_pos();
Expand All @@ -1267,7 +1281,7 @@ impl<'a> Lexer<'a> {
self.input.slice(raw_slice_start, end)
};
return Ok(Token::Template {
cooked: cooked.map(Atom::from),
cooked,
raw: self.atoms.atom(raw),
});
}
Expand Down

1 comment on commit 238f1c5

@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: 238f1c5 Previous: 69f00b8 Ratio
es/full/bugs-1 298985 ns/iter (± 5320) 278153 ns/iter (± 9089) 1.07
es/full/minify/libraries/antd 1808422595 ns/iter (± 43874955) 1819198281 ns/iter (± 57720988) 0.99
es/full/minify/libraries/d3 346699704 ns/iter (± 2875096) 345031970 ns/iter (± 4045546) 1.00
es/full/minify/libraries/echarts 1514509639 ns/iter (± 26996919) 1523908003 ns/iter (± 15617743) 0.99
es/full/minify/libraries/jquery 102755901 ns/iter (± 509861) 102081200 ns/iter (± 578867) 1.01
es/full/minify/libraries/lodash 114181866 ns/iter (± 528136) 113603995 ns/iter (± 154691) 1.01
es/full/minify/libraries/moment 59387176 ns/iter (± 178357) 59254132 ns/iter (± 198043) 1.00
es/full/minify/libraries/react 18290762 ns/iter (± 86415) 18326213 ns/iter (± 37822) 1.00
es/full/minify/libraries/terser 277185716 ns/iter (± 6225685) 274221608 ns/iter (± 1854787) 1.01
es/full/minify/libraries/three 480570409 ns/iter (± 10794108) 473906951 ns/iter (± 4937534) 1.01
es/full/minify/libraries/typescript 3245929736 ns/iter (± 33467231) 3253823797 ns/iter (± 49622131) 1.00
es/full/minify/libraries/victory 767594647 ns/iter (± 15816784) 768963122 ns/iter (± 11833889) 1.00
es/full/minify/libraries/vue 146755152 ns/iter (± 1534714) 145790166 ns/iter (± 779753) 1.01
es/full/codegen/es3 59154 ns/iter (± 388) 58904 ns/iter (± 128) 1.00
es/full/codegen/es5 58860 ns/iter (± 181) 59735 ns/iter (± 906) 0.99
es/full/codegen/es2015 58614 ns/iter (± 188) 59024 ns/iter (± 224) 0.99
es/full/codegen/es2016 58721 ns/iter (± 179) 59108 ns/iter (± 86) 0.99
es/full/codegen/es2017 58852 ns/iter (± 322) 59153 ns/iter (± 235) 0.99
es/full/codegen/es2018 58666 ns/iter (± 160) 59128 ns/iter (± 129) 0.99
es/full/codegen/es2019 58665 ns/iter (± 206) 59211 ns/iter (± 133) 0.99
es/full/codegen/es2020 58867 ns/iter (± 376) 59390 ns/iter (± 883) 0.99
es/full/all/es3 160535825 ns/iter (± 907105) 160882837 ns/iter (± 1055856) 1.00
es/full/all/es5 154686881 ns/iter (± 1438573) 156138775 ns/iter (± 978958) 0.99
es/full/all/es2015 115525617 ns/iter (± 568246) 116509608 ns/iter (± 558051) 0.99
es/full/all/es2016 113857841 ns/iter (± 820293) 114736971 ns/iter (± 1211669) 0.99
es/full/all/es2017 113685394 ns/iter (± 876687) 115036255 ns/iter (± 880117) 0.99
es/full/all/es2018 112116777 ns/iter (± 627956) 112525221 ns/iter (± 666768) 1.00
es/full/all/es2019 111164273 ns/iter (± 542461) 112457058 ns/iter (± 871171) 0.99
es/full/all/es2020 107209335 ns/iter (± 634197) 108333577 ns/iter (± 705811) 0.99
es/full/parser 460589 ns/iter (± 12538) 462823 ns/iter (± 2424) 1.00
es/full/base/fixer 15602 ns/iter (± 568) 16418 ns/iter (± 329) 0.95
es/full/base/resolver_and_hygiene 80288 ns/iter (± 202) 81722 ns/iter (± 709) 0.98
serialization of serde 266 ns/iter (± 0) 271 ns/iter (± 2) 0.98
css/minify/libraries/bootstrap 21954322 ns/iter (± 22713) 22277915 ns/iter (± 75848) 0.99
css/visitor/compare/clone 1402313 ns/iter (± 25417) 1398600 ns/iter (± 9071) 1.00
css/visitor/compare/visit_mut_span 1522948 ns/iter (± 17507) 1521644 ns/iter (± 7204) 1.00
css/visitor/compare/visit_mut_span_panic 1543067 ns/iter (± 6651) 1546027 ns/iter (± 34982) 1.00
css/visitor/compare/fold_span 2035171 ns/iter (± 4673) 2056693 ns/iter (± 32781) 0.99
css/visitor/compare/fold_span_panic 2155893 ns/iter (± 6795) 2165633 ns/iter (± 8747) 1.00
css/lexer/bootstrap_5_1_3 3468154 ns/iter (± 3079) 3441904 ns/iter (± 2695) 1.01
css/lexer/foundation_6_7_4 2797190 ns/iter (± 2697) 2786676 ns/iter (± 4038) 1.00
css/lexer/tailwind_3_1_1 532353 ns/iter (± 438) 535315 ns/iter (± 135) 0.99
css/parser/bootstrap_5_1_3 16077132 ns/iter (± 97141) 15964546 ns/iter (± 224885) 1.01
css/parser/foundation_6_7_4 12862872 ns/iter (± 6996) 12726858 ns/iter (± 19235) 1.01
css/parser/tailwind_3_1_1 2598600 ns/iter (± 5436) 2527643 ns/iter (± 4956) 1.03
es/codegen/colors 723416 ns/iter (± 395074) 729504 ns/iter (± 395515) 0.99
es/codegen/large 3009030 ns/iter (± 1580904) 3032653 ns/iter (± 1601838) 0.99
es/codegen/with-parser/colors 41336 ns/iter (± 328) 42375 ns/iter (± 800) 0.98
es/codegen/with-parser/large 452105 ns/iter (± 2514) 459716 ns/iter (± 4122) 0.98
es/minify/libraries/antd 1488841400 ns/iter (± 42663453) 1456080207 ns/iter (± 26856361) 1.02
es/minify/libraries/d3 286388751 ns/iter (± 13269912) 293672441 ns/iter (± 5058883) 0.98
es/minify/libraries/echarts 1230163006 ns/iter (± 44031395) 1220861891 ns/iter (± 24815249) 1.01
es/minify/libraries/jquery 82180169 ns/iter (± 244664) 82247533 ns/iter (± 301289) 1.00
es/minify/libraries/lodash 104282621 ns/iter (± 499186) 103991985 ns/iter (± 462906) 1.00
es/minify/libraries/moment 48046386 ns/iter (± 69162) 48306268 ns/iter (± 113007) 0.99
es/minify/libraries/react 16176741 ns/iter (± 49775) 16274126 ns/iter (± 60968) 0.99
es/minify/libraries/terser 217600314 ns/iter (± 6639948) 219614293 ns/iter (± 2830842) 0.99
es/minify/libraries/three 402859037 ns/iter (± 7000081) 370923728 ns/iter (± 4127582) 1.09
es/minify/libraries/typescript 2765086514 ns/iter (± 20700614) 2807390861 ns/iter (± 16398799) 0.98
es/minify/libraries/victory 666407649 ns/iter (± 34415598) 591629433 ns/iter (± 13037282) 1.13
es/minify/libraries/vue 121463971 ns/iter (± 1053447) 121517015 ns/iter (± 421651) 1.00
es/visitor/compare/clone 1695845 ns/iter (± 4921) 1685016 ns/iter (± 7173) 1.01
es/visitor/compare/visit_mut_span 2034621 ns/iter (± 8842) 2030665 ns/iter (± 17658) 1.00
es/visitor/compare/visit_mut_span_panic 2029761 ns/iter (± 28467) 2023440 ns/iter (± 35945) 1.00
es/visitor/compare/fold_span 2721509 ns/iter (± 15621) 2770661 ns/iter (± 21714) 0.98
es/visitor/compare/fold_span_panic 2759792 ns/iter (± 8911) 2796537 ns/iter (± 18626) 0.99
es/lexer/colors 9241 ns/iter (± 88) 9111 ns/iter (± 69) 1.01
es/lexer/angular 4777904 ns/iter (± 29978) 4740428 ns/iter (± 29379) 1.01
es/lexer/backbone 623864 ns/iter (± 2128) 634441 ns/iter (± 1614) 0.98
es/lexer/jquery 3479065 ns/iter (± 23955) 3485495 ns/iter (± 7102) 1.00
es/lexer/jquery mobile 5174955 ns/iter (± 23269) 5248554 ns/iter (± 35276) 0.99
es/lexer/mootools 2738883 ns/iter (± 14198) 2730502 ns/iter (± 17706) 1.00
es/lexer/underscore 519330 ns/iter (± 1276) 510412 ns/iter (± 1440) 1.02
es/lexer/three 15519923 ns/iter (± 55207) 15429692 ns/iter (± 87241) 1.01
es/lexer/yui 2860513 ns/iter (± 29469) 2807780 ns/iter (± 6560) 1.02
es/lexer/cal-com 12538765 ns/iter (± 41313) 12498953 ns/iter (± 65691) 1.00
es/lexer/typescript 87492115 ns/iter (± 351823) 87439926 ns/iter (± 180063) 1.00
es/parser/colors 23913 ns/iter (± 109) 23688 ns/iter (± 75) 1.01
es/parser/angular 12440877 ns/iter (± 85379) 12474519 ns/iter (± 89962) 1.00
es/parser/backbone 1798124 ns/iter (± 7552) 1788087 ns/iter (± 7356) 1.01
es/parser/jquery 9921538 ns/iter (± 67001) 9944892 ns/iter (± 84324) 1.00
es/parser/jquery mobile 14956843 ns/iter (± 96517) 15037262 ns/iter (± 175004) 0.99
es/parser/mootools 7703949 ns/iter (± 55902) 7703896 ns/iter (± 62622) 1.00
es/parser/underscore 1565627 ns/iter (± 6208) 1570045 ns/iter (± 5931) 1.00
es/parser/three 43720351 ns/iter (± 497499) 45075102 ns/iter (± 930870) 0.97
es/parser/yui 7365400 ns/iter (± 39731) 7377172 ns/iter (± 31375) 1.00
es/parser/cal-com 42441813 ns/iter (± 472703) 42191728 ns/iter (± 1221076) 1.01
es/parser/typescript 264785378 ns/iter (± 785945) 268219669 ns/iter (± 3380804) 0.99
es/preset-env/usage/builtin_type 135972 ns/iter (± 33909) 140153 ns/iter (± 34435) 0.97
es/preset-env/usage/property 16427 ns/iter (± 147) 16165 ns/iter (± 74) 1.02
es/resolver/typescript 103886193 ns/iter (± 2033631) 106125080 ns/iter (± 3003335) 0.98
es/fixer/typescript 81255809 ns/iter (± 2203838) 85720375 ns/iter (± 3249375) 0.95
es/hygiene/typescript 188950922 ns/iter (± 2189172) 181387749 ns/iter (± 2998280) 1.04
es/resolver_with_hygiene/typescript 308658017 ns/iter (± 2242011) 297306926 ns/iter (± 3777129) 1.04
es/visitor/base-perf/module_clone 57882 ns/iter (± 781) 57379 ns/iter (± 1449) 1.01
es/visitor/base-perf/fold_empty 60051 ns/iter (± 880) 60324 ns/iter (± 542) 1.00
es/visitor/base-perf/fold_noop_impl_all 60374 ns/iter (± 206) 60005 ns/iter (± 533) 1.01
es/visitor/base-perf/fold_noop_impl_vec 60851 ns/iter (± 383) 60415 ns/iter (± 727) 1.01
es/visitor/base-perf/boxing_boxed_clone 60 ns/iter (± 0) 59 ns/iter (± 0) 1.02
es/visitor/base-perf/boxing_unboxed_clone 46 ns/iter (± 0) 47 ns/iter (± 0) 0.98
es/visitor/base-perf/boxing_boxed 106 ns/iter (± 0) 105 ns/iter (± 0) 1.01
es/visitor/base-perf/boxing_unboxed 81 ns/iter (± 0) 81 ns/iter (± 0) 1
es/visitor/base-perf/visit_contains_this 2482 ns/iter (± 8) 2468 ns/iter (± 9) 1.01
es/base/parallel/resolver/typescript 2512810991 ns/iter (± 133198971) 2425209465 ns/iter (± 110957191) 1.04
es/base/parallel/hygiene/typescript 3272860671 ns/iter (± 57878659) 3276197503 ns/iter (± 86818197) 1.00
babelify-only 477833 ns/iter (± 3723) 479110 ns/iter (± 4389) 1.00
parse_and_babelify_angular 41060600 ns/iter (± 2062419) 42403348 ns/iter (± 1914563) 0.97
parse_and_babelify_backbone 4426043 ns/iter (± 127265) 4259849 ns/iter (± 61517) 1.04
parse_and_babelify_jquery 28342652 ns/iter (± 254300) 29416897 ns/iter (± 679298) 0.96
parse_and_babelify_jquery_mobile 48690745 ns/iter (± 577105) 51258248 ns/iter (± 988172) 0.95
parse_and_babelify_mootools 25478708 ns/iter (± 1672446) 25937939 ns/iter (± 257035) 0.98
parse_and_babelify_underscore 3601076 ns/iter (± 20758) 3607959 ns/iter (± 34402) 1.00
parse_and_babelify_yui 27665419 ns/iter (± 2077720) 25995895 ns/iter (± 1675827) 1.06
html/minify/document/css_spec 47007161 ns/iter (± 245664) 46850633 ns/iter (± 467019) 1.00
html/minify/document/github 18446566 ns/iter (± 244942) 18687386 ns/iter (± 112722) 0.99
html/minify/document/stackoverflow 17609647 ns/iter (± 793089) 16840126 ns/iter (± 333626) 1.05
html/minify/document_fragment/css_spec 46571856 ns/iter (± 486683) 45318798 ns/iter (± 266835) 1.03
html/minify/document_fragment/github 18534172 ns/iter (± 173064) 18198479 ns/iter (± 42169) 1.02
html/minify/document_fragment/stackoverflow 16981590 ns/iter (± 290978) 16466728 ns/iter (± 101771) 1.03
html/document/visitor/compare/clone 166929 ns/iter (± 1336) 165604 ns/iter (± 1318) 1.01
html/document/visitor/compare/visit_mut_span 184117 ns/iter (± 1437) 184068 ns/iter (± 3443) 1.00
html/document/visitor/compare/visit_mut_span_panic 188669 ns/iter (± 2802) 187603 ns/iter (± 2257) 1.01
html/document/visitor/compare/fold_span 233118 ns/iter (± 2398) 229585 ns/iter (± 1512) 1.02
html/document/visitor/compare/fold_span_panic 280933 ns/iter (± 1034) 281709 ns/iter (± 1657) 1.00
html/document_fragment/visitor/compare/clone 168007 ns/iter (± 535) 167717 ns/iter (± 1655) 1.00
html/document_fragment/visitor/compare/visit_mut_span 184072 ns/iter (± 1804) 182067 ns/iter (± 1306) 1.01
html/document_fragment/visitor/compare/visit_mut_span_panic 188160 ns/iter (± 3580) 190272 ns/iter (± 2010) 0.99
html/document_fragment/visitor/compare/fold_span 228205 ns/iter (± 1874) 228697 ns/iter (± 699) 1.00
html/document_fragment/visitor/compare/fold_span_panic 280155 ns/iter (± 1009) 280150 ns/iter (± 1532) 1.00
html/lexer/css_2021_spec 12990434 ns/iter (± 49990) 12906440 ns/iter (± 32882) 1.01
html/lexer/github_com_17_05_2022 4957775 ns/iter (± 10231) 4958124 ns/iter (± 10902) 1.00
html/lexer/stackoverflow_com_17_05_2022 4709916 ns/iter (± 16871) 4689983 ns/iter (± 6467) 1.00
html/parser/parser_document/css_2021_spec 25264856 ns/iter (± 141878) 25675345 ns/iter (± 251245) 0.98
html/parser/parser_document/github_com_17_05_2022 8439937 ns/iter (± 33535) 8544762 ns/iter (± 29953) 0.99
html/parser/parser_document/stackoverflow_com_17_05_2022 7382028 ns/iter (± 8249) 7480302 ns/iter (± 19136) 0.99
html/parser/parser_document_fragment/css_2021_spec 25091556 ns/iter (± 133286) 25330683 ns/iter (± 109620) 0.99
html/parser/parser_document_fragment/github_com_17_05_2022 8455505 ns/iter (± 73908) 8456146 ns/iter (± 12883) 1.00
html/parser/parser_document_fragment/stackoverflow_com_17_05_2022 7283319 ns/iter (± 20625) 7427630 ns/iter (± 29160) 0.98

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

Please sign in to comment.