Skip to content

Commit

Permalink
perf(es): Use &dyn Comments to reduce binary size (#7489)
Browse files Browse the repository at this point in the history
**Related issue:**

 - vercel/next.js#50365
  • Loading branch information
kdy1 committed Jun 5, 2023
1 parent ddb5635 commit 2c3ac68
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 14 deletions.
18 changes: 7 additions & 11 deletions crates/swc/src/builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,8 @@ use either::Either;
use rustc_hash::FxHashMap;
use swc_atoms::JsWord;
use swc_common::{
chain,
comments::{Comments, SingleThreadedComments},
errors::Handler,
sync::Lrc,
util::take::Take,
FileName, Mark, SourceMap,
chain, comments::Comments, errors::Handler, sync::Lrc, util::take::Take, FileName, Mark,
SourceMap,
};
use swc_ecma_ast::{EsVersion, Module, Script};
use swc_ecma_minifier::option::{terser::TerserTopLevelOptions, MinifyOptions};
Expand Down Expand Up @@ -177,7 +173,7 @@ impl<'a, 'b, P: swc_ecma_visit::Fold> PassBuilder<'a, 'b, P> {
base: &FileName,
syntax: Syntax,
module: Option<ModuleConfig>,
comments: Option<&'cmt SingleThreadedComments>,
comments: Option<&'cmt dyn Comments>,
) -> impl 'cmt + swc_ecma_visit::Fold
where
P: 'cmt,
Expand Down Expand Up @@ -358,7 +354,7 @@ impl<'a, 'b, P: swc_ecma_visit::Fold> PassBuilder<'a, 'b, P> {
as_folder(MinifierPass {
options: self.minify,
cm: self.cm.clone(),
comments: comments.cloned(),
comments,
top_level_mark: self.top_level_mark,
}),
Optional::new(
Expand All @@ -373,14 +369,14 @@ impl<'a, 'b, P: swc_ecma_visit::Fold> PassBuilder<'a, 'b, P> {
}
}

struct MinifierPass {
struct MinifierPass<'a> {
options: Option<JsMinifyOptions>,
cm: Lrc<SourceMap>,
comments: Option<SingleThreadedComments>,
comments: Option<&'a dyn Comments>,
top_level_mark: Mark,
}

impl VisitMut for MinifierPass {
impl VisitMut for MinifierPass<'_> {
noop_visit_mut_type!();

fn visit_mut_module(&mut self, m: &mut Module) {
Expand Down
6 changes: 3 additions & 3 deletions crates/swc/src/config/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ use swc_cached::regex::CachedRegex;
use swc_common::{
chain,
collections::{AHashMap, AHashSet},
comments::SingleThreadedComments,
comments::{Comments, SingleThreadedComments},
errors::Handler,
plugin::metadata::TransformPluginMetadataContext,
FileName, Mark, SourceMap, SyntaxContext,
Expand Down Expand Up @@ -641,7 +641,7 @@ impl Options {
base,
syntax,
cfg.module,
comments,
comments.map(|v| v as _),
);

let keep_import_assertions = experimental.keep_import_assertions.into_bool();
Expand Down Expand Up @@ -1476,7 +1476,7 @@ pub enum ModuleConfig {
impl ModuleConfig {
pub fn build<'cmt>(
cm: Arc<SourceMap>,
comments: Option<&'cmt SingleThreadedComments>,
comments: Option<&'cmt dyn Comments>,
base_url: PathBuf,
paths: CompiledPaths,
base: &FileName,
Expand Down

1 comment on commit 2c3ac68

@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: 2c3ac68 Previous: 0e37c18 Ratio
es/full/bugs-1 364981 ns/iter (± 15018) 362603 ns/iter (± 7774) 1.01
es/full/minify/libraries/antd 1927043697 ns/iter (± 34587273) 1957976833 ns/iter (± 29927257) 0.98
es/full/minify/libraries/d3 376398559 ns/iter (± 5159631) 377993708 ns/iter (± 3825523) 1.00
es/full/minify/libraries/echarts 1536528154 ns/iter (± 15555770) 1539812212 ns/iter (± 11780965) 1.00
es/full/minify/libraries/jquery 112695037 ns/iter (± 1157036) 112621211 ns/iter (± 1072866) 1.00
es/full/minify/libraries/lodash 132864311 ns/iter (± 1397864) 133788560 ns/iter (± 1064948) 0.99
es/full/minify/libraries/moment 64340867 ns/iter (± 419707) 64866165 ns/iter (± 606829) 0.99
es/full/minify/libraries/react 23009712 ns/iter (± 196493) 23198347 ns/iter (± 154774) 0.99
es/full/minify/libraries/terser 303686124 ns/iter (± 3323378) 309714500 ns/iter (± 2603235) 0.98
es/full/minify/libraries/three 542628693 ns/iter (± 6319696) 545860410 ns/iter (± 6298937) 0.99
es/full/minify/libraries/typescript 3685984444 ns/iter (± 37025014) 3717381089 ns/iter (± 26182068) 0.99
es/full/minify/libraries/victory 837825709 ns/iter (± 11893399) 846714795 ns/iter (± 11308751) 0.99
es/full/minify/libraries/vue 163806273 ns/iter (± 1475238) 164059838 ns/iter (± 1552852) 1.00
es/full/codegen/es3 39166 ns/iter (± 100) 39833 ns/iter (± 98) 0.98
es/full/codegen/es5 39313 ns/iter (± 50) 39900 ns/iter (± 75) 0.99
es/full/codegen/es2015 39299 ns/iter (± 74) 39909 ns/iter (± 69) 0.98
es/full/codegen/es2016 39377 ns/iter (± 73) 40018 ns/iter (± 75) 0.98
es/full/codegen/es2017 39300 ns/iter (± 45) 39902 ns/iter (± 82) 0.98
es/full/codegen/es2018 39313 ns/iter (± 50) 39931 ns/iter (± 86) 0.98
es/full/codegen/es2019 39286 ns/iter (± 68) 39909 ns/iter (± 55) 0.98
es/full/codegen/es2020 39310 ns/iter (± 40) 39951 ns/iter (± 89) 0.98
es/full/all/es3 203762814 ns/iter (± 3165192) 208585614 ns/iter (± 2458270) 0.98
es/full/all/es5 198045136 ns/iter (± 3260018) 197998295 ns/iter (± 2100686) 1.00
es/full/all/es2015 154108321 ns/iter (± 2244056) 156275050 ns/iter (± 2349817) 0.99
es/full/all/es2016 154284378 ns/iter (± 2364210) 154959472 ns/iter (± 1676842) 1.00
es/full/all/es2017 154308955 ns/iter (± 2021716) 155378018 ns/iter (± 2512795) 0.99
es/full/all/es2018 151997468 ns/iter (± 2254596) 151657797 ns/iter (± 2496761) 1.00
es/full/all/es2019 150061473 ns/iter (± 2828837) 151002224 ns/iter (± 2740487) 0.99
es/full/all/es2020 144975666 ns/iter (± 1305340) 145654231 ns/iter (± 1478386) 1.00
es/full/parser 594087 ns/iter (± 12008) 592479 ns/iter (± 11733) 1.00
es/full/base/fixer 24295 ns/iter (± 79) 23714 ns/iter (± 44) 1.02
es/full/base/resolver_and_hygiene 104395 ns/iter (± 589) 103515 ns/iter (± 151) 1.01
serialization of serde 279 ns/iter (± 0) 279 ns/iter (± 0) 1
css/minify/libraries/bootstrap 35956579 ns/iter (± 178991) 36518421 ns/iter (± 263195) 0.98
css/visitor/compare/clone 2390355 ns/iter (± 8851) 2391781 ns/iter (± 14077) 1.00
css/visitor/compare/visit_mut_span 2592147 ns/iter (± 21480) 2570283 ns/iter (± 7103) 1.01
css/visitor/compare/visit_mut_span_panic 2635429 ns/iter (± 6533) 2621942 ns/iter (± 5426) 1.01
css/visitor/compare/fold_span 3331643 ns/iter (± 26456) 3375142 ns/iter (± 16504) 0.99
css/visitor/compare/fold_span_panic 3504519 ns/iter (± 17687) 3523932 ns/iter (± 10887) 0.99
css/lexer/bootstrap_5_1_3 5484839 ns/iter (± 88528) 5458520 ns/iter (± 4174) 1.00
css/lexer/foundation_6_7_4 4662177 ns/iter (± 9643) 4648836 ns/iter (± 1926) 1.00
css/lexer/tailwind_3_1_1 881352 ns/iter (± 430) 880126 ns/iter (± 708) 1.00
css/parser/bootstrap_5_1_3 23871940 ns/iter (± 141119) 24225570 ns/iter (± 196658) 0.99
css/parser/foundation_6_7_4 19025987 ns/iter (± 105976) 19225191 ns/iter (± 124888) 0.99
css/parser/tailwind_3_1_1 3639636 ns/iter (± 6596) 3653999 ns/iter (± 2385) 1.00
es/codegen/colors 732021 ns/iter (± 392439) 730502 ns/iter (± 392955) 1.00
es/codegen/large 3076021 ns/iter (± 1599632) 3070499 ns/iter (± 1606995) 1.00
es/codegen/with-parser/colors 56206 ns/iter (± 312) 56355 ns/iter (± 703) 1.00
es/codegen/with-parser/large 564473 ns/iter (± 1304) 564138 ns/iter (± 1428) 1.00
es/minify/libraries/antd 1755653659 ns/iter (± 11595490) 1706253235 ns/iter (± 21312594) 1.03
es/minify/libraries/d3 331513322 ns/iter (± 5623410) 324937798 ns/iter (± 1897559) 1.02
es/minify/libraries/echarts 1348262497 ns/iter (± 16821471) 1349376918 ns/iter (± 14367591) 1.00
es/minify/libraries/jquery 98721679 ns/iter (± 839408) 98215026 ns/iter (± 1653177) 1.01
es/minify/libraries/lodash 118619544 ns/iter (± 856748) 118972989 ns/iter (± 1668288) 1.00
es/minify/libraries/moment 56616370 ns/iter (± 274715) 56601357 ns/iter (± 255766) 1.00
es/minify/libraries/react 20698981 ns/iter (± 152936) 20474482 ns/iter (± 131780) 1.01
es/minify/libraries/terser 265454915 ns/iter (± 5033068) 262372727 ns/iter (± 3657658) 1.01
es/minify/libraries/three 479328927 ns/iter (± 6641703) 468107989 ns/iter (± 5207306) 1.02
es/minify/libraries/typescript 3209463612 ns/iter (± 15863456) 3163247256 ns/iter (± 14933600) 1.01
es/minify/libraries/victory 724018968 ns/iter (± 11244147) 743671674 ns/iter (± 8192897) 0.97
es/minify/libraries/vue 146715906 ns/iter (± 984482) 152230008 ns/iter (± 2369815) 0.96
es/visitor/compare/clone 2407782 ns/iter (± 9770) 2403443 ns/iter (± 15258) 1.00
es/visitor/compare/visit_mut_span 2782604 ns/iter (± 4908) 2768925 ns/iter (± 7348) 1.00
es/visitor/compare/visit_mut_span_panic 2820128 ns/iter (± 6203) 2826394 ns/iter (± 8093) 1.00
es/visitor/compare/fold_span 3909046 ns/iter (± 7894) 3907556 ns/iter (± 4547) 1.00
es/visitor/compare/fold_span_panic 4038768 ns/iter (± 11328) 4050267 ns/iter (± 41256) 1.00
es/lexer/colors 14108 ns/iter (± 23) 14396 ns/iter (± 39) 0.98
es/lexer/angular 6711748 ns/iter (± 2822) 6714735 ns/iter (± 2844) 1.00
es/lexer/backbone 828315 ns/iter (± 431) 830252 ns/iter (± 391) 1.00
es/lexer/jquery 4680801 ns/iter (± 2914) 4685342 ns/iter (± 4369) 1.00
es/lexer/jquery mobile 7191067 ns/iter (± 5393) 7230460 ns/iter (± 9431) 0.99
es/lexer/mootools 3664429 ns/iter (± 11018) 3671058 ns/iter (± 2621) 1.00
es/lexer/underscore 685881 ns/iter (± 442) 689846 ns/iter (± 689) 0.99
es/lexer/three 21991684 ns/iter (± 16371) 22093963 ns/iter (± 16989) 1.00
es/lexer/yui 4165510 ns/iter (± 1277) 4181197 ns/iter (± 2025) 1.00
es/parser/colors 32869 ns/iter (± 79) 32812 ns/iter (± 60) 1.00
es/parser/angular 16750293 ns/iter (± 172461) 16746338 ns/iter (± 121015) 1.00
es/parser/backbone 2384056 ns/iter (± 11241) 2398790 ns/iter (± 11871) 0.99
es/parser/jquery 13054140 ns/iter (± 148654) 13399578 ns/iter (± 123086) 0.97
es/parser/jquery mobile 20530559 ns/iter (± 480062) 20888695 ns/iter (± 312689) 0.98
es/parser/mootools 9861563 ns/iter (± 43644) 9908204 ns/iter (± 43956) 1.00
es/parser/underscore 2031540 ns/iter (± 11847) 2031170 ns/iter (± 12287) 1.00
es/parser/three 60904178 ns/iter (± 252420) 61171359 ns/iter (± 398231) 1.00
es/parser/yui 10027011 ns/iter (± 56912) 10069127 ns/iter (± 77758) 1.00
es/preset-env/usage/builtin_type 150717 ns/iter (± 33165) 151362 ns/iter (± 33772) 1.00
es/preset-env/usage/property 29034 ns/iter (± 84) 29044 ns/iter (± 113) 1.00
es/resolver/typescript 133824973 ns/iter (± 4657376) 128163327 ns/iter (± 2749187) 1.04
es/fixer/typescript 90637576 ns/iter (± 749811) 89852116 ns/iter (± 773157) 1.01
es/hygiene/typescript 209252749 ns/iter (± 1304501) 204640080 ns/iter (± 1546933) 1.02
es/resolver_with_hygiene/typescript 429729940 ns/iter (± 2219968) 421587249 ns/iter (± 1821658) 1.02
es/visitor/base-perf/module_clone 81503 ns/iter (± 747) 81490 ns/iter (± 701) 1.00
es/visitor/base-perf/fold_empty 91201 ns/iter (± 541) 90746 ns/iter (± 724) 1.01
es/visitor/base-perf/fold_noop_impl_all 91132 ns/iter (± 515) 91333 ns/iter (± 219) 1.00
es/visitor/base-perf/fold_noop_impl_vec 91373 ns/iter (± 431) 91565 ns/iter (± 940) 1.00
es/visitor/base-perf/boxing_boxed_clone 60 ns/iter (± 0) 60 ns/iter (± 0) 1
es/visitor/base-perf/boxing_unboxed_clone 44 ns/iter (± 0) 44 ns/iter (± 0) 1
es/visitor/base-perf/boxing_boxed 106 ns/iter (± 0) 104 ns/iter (± 0) 1.02
es/visitor/base-perf/boxing_unboxed 82 ns/iter (± 0) 81 ns/iter (± 0) 1.01
es/visitor/base-perf/visit_contains_this 3542 ns/iter (± 86) 3631 ns/iter (± 65) 0.98
es/base/parallel/resolver/typescript 7124374009 ns/iter (± 480659178) 7192802712 ns/iter (± 582157597) 0.99
es/base/parallel/hygiene/typescript 2406080737 ns/iter (± 20887156) 2403865689 ns/iter (± 18510760) 1.00
misc/visitors/time-complexity/time 5 104 ns/iter (± 0) 104 ns/iter (± 0) 1
misc/visitors/time-complexity/time 10 336 ns/iter (± 7) 319 ns/iter (± 1) 1.05
misc/visitors/time-complexity/time 15 664 ns/iter (± 20) 642 ns/iter (± 18) 1.03
misc/visitors/time-complexity/time 20 1271 ns/iter (± 38) 1204 ns/iter (± 8) 1.06
misc/visitors/time-complexity/time 40 6621 ns/iter (± 38) 6640 ns/iter (± 43) 1.00
misc/visitors/time-complexity/time 60 17144 ns/iter (± 136) 16961 ns/iter (± 52) 1.01
es/full-target/es2016 267627 ns/iter (± 580) 266011 ns/iter (± 328) 1.01
es/full-target/es2017 257724 ns/iter (± 394) 257018 ns/iter (± 259) 1.00
es/full-target/es2018 246707 ns/iter (± 439) 245808 ns/iter (± 480) 1.00
es2020_nullish_coalescing 95828 ns/iter (± 303) 94997 ns/iter (± 361) 1.01
es2020_optional_chaining 128425 ns/iter (± 320) 128545 ns/iter (± 178) 1.00
es2022_class_properties 154139 ns/iter (± 377) 152836 ns/iter (± 277) 1.01
es2018_object_rest_spread 97131 ns/iter (± 264) 97529 ns/iter (± 191) 1.00
es2019_optional_catch_binding 85453 ns/iter (± 198) 85372 ns/iter (± 147) 1.00
es2017_async_to_generator 86580 ns/iter (± 612) 86476 ns/iter (± 164) 1.00
es2016_exponentiation 92505 ns/iter (± 176) 92961 ns/iter (± 160) 1.00
es2015_arrow 95816 ns/iter (± 192) 95898 ns/iter (± 308) 1.00
es2015_block_scoped_fn 93545 ns/iter (± 196) 93631 ns/iter (± 179) 1.00
es2015_block_scoping 180913 ns/iter (± 160) 180490 ns/iter (± 184) 1.00

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

Please sign in to comment.