Skip to content

Commit 398e922

Browse files
authoredJun 27, 2023
feat(es/minifier): Inline constants even if they are exported (#7583)
**Related issue:** - Closes #7575.
1 parent b4ae28b commit 398e922

File tree

8 files changed

+32
-4
lines changed

8 files changed

+32
-4
lines changed
 

‎crates/swc/tests/tsc-references/taggedTemplatesWithTypeArguments1.2.minified.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,6 @@ export const b = g`
1818
export let c = obj.prop`${(input)=>({
1919
...input
2020
})}`;
21-
c.returnedObjProp.x, c.returnedObjProp.y, c.returnedObjProp.z, c = obj.prop`${(input)=>({
21+
c.returnedObjProp.x, c.returnedObjProp.y, c.returnedObjProp.z, (c = obj.prop`${(input)=>({
2222
...input
23-
})}`, c.returnedObjProp.x, c.returnedObjProp.y, c.returnedObjProp.z;
23+
})}`).returnedObjProp.x, c.returnedObjProp.y, c.returnedObjProp.z;

‎crates/swc_ecma_minifier/src/compress/optimize/inline.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,8 @@ impl Optimizer<'_> {
281281
}
282282

283283
// Single use => inlined
284-
if is_inline_enabled
284+
if !self.ctx.is_exported
285+
&& is_inline_enabled
285286
&& usage.declared
286287
&& !should_preserve
287288
&& !usage.reassigned()

‎crates/swc_ecma_minifier/src/compress/optimize/unused.rs

+1
Original file line numberDiff line numberDiff line change
@@ -707,6 +707,7 @@ impl Optimizer<'_> {
707707
if let Some(var) = self.data.vars.get(&i.to_id()) {
708708
// technically this is inline
709709
if !var.inline_prevented
710+
&& !var.exported
710711
&& var.usage_count == 0
711712
&& var.declared
712713
&& (!var.declared_as_fn_param || !used_arguments || self.ctx.in_strict)

‎crates/swc_ecma_minifier/src/program_data.rs

+4
Original file line numberDiff line numberDiff line change
@@ -509,6 +509,10 @@ impl VarDataLike for VarUsageInfo {
509509
self.inline_prevented = true;
510510
}
511511

512+
fn mark_as_exported(&mut self) {
513+
self.exported = true;
514+
}
515+
512516
fn mark_initialized_with_safe_value(&mut self) {
513517
self.no_side_effect_for_member_access = true;
514518
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
export const envKey = "staging" || "production"
2+
3+
const environmentResolver = () => {
4+
if (envKey === "production") {
5+
return "production"
6+
}
7+
if (envKey === "staging") {
8+
return "staging"
9+
}
10+
if (envKey === "test") {
11+
return "test"
12+
}
13+
if (envKey === "development") {
14+
return "development"
15+
}
16+
throw new Error(`Unknown environment: ${envKey}`)
17+
}
18+
export const environment = environmentResolver()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
export const envKey = "staging";
2+
export const environment = "staging";

‎crates/swc_ecma_usage_analyzer/src/analyzer/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -523,7 +523,7 @@ where
523523
let ids = find_pat_ids(v);
524524

525525
for id in ids {
526-
self.data.var_or_default(id).prevent_inline();
526+
self.data.var_or_default(id).mark_as_exported();
527527
}
528528
}
529529
_ => {}

‎crates/swc_ecma_usage_analyzer/src/analyzer/storage.rs

+2
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,8 @@ pub trait VarDataLike: Sized {
7272

7373
fn prevent_inline(&mut self);
7474

75+
fn mark_as_exported(&mut self);
76+
7577
fn mark_initialized_with_safe_value(&mut self);
7678

7779
fn mark_as_pure_fn(&mut self);

1 commit comments

Comments
 (1)

github-actions[bot] commented on Jun 27, 2023

@github-actions[bot]

Benchmark

Benchmark suite Current: 398e922 Previous: 9d5dda1 Ratio
es/full/bugs-1 342181 ns/iter (± 12538) 308863 ns/iter (± 6912) 1.11
es/full/minify/libraries/antd 1568860213 ns/iter (± 25283682) 1475692302 ns/iter (± 25623340) 1.06
es/full/minify/libraries/d3 347934218 ns/iter (± 3699113) 319296450 ns/iter (± 4521675) 1.09
es/full/minify/libraries/echarts 1294358358 ns/iter (± 9780678) 1193296347 ns/iter (± 17382712) 1.08
es/full/minify/libraries/jquery 99490414 ns/iter (± 1227285) 95289533 ns/iter (± 299445) 1.04
es/full/minify/libraries/lodash 121385873 ns/iter (± 2289228) 113436439 ns/iter (± 493861) 1.07
es/full/minify/libraries/moment 57990339 ns/iter (± 545015) 56061465 ns/iter (± 147943) 1.03
es/full/minify/libraries/react 20806760 ns/iter (± 398812) 20111498 ns/iter (± 22224) 1.03
es/full/minify/libraries/terser 263647943 ns/iter (± 4073529) 247201297 ns/iter (± 2327112) 1.07
es/full/minify/libraries/three 481036155 ns/iter (± 4970690) 438426730 ns/iter (± 11259811) 1.10
es/full/minify/libraries/typescript 3143431911 ns/iter (± 22980204) 3019284460 ns/iter (± 37988819) 1.04
es/full/minify/libraries/victory 685320475 ns/iter (± 7009844) 656060774 ns/iter (± 7739494) 1.04
es/full/minify/libraries/vue 144539584 ns/iter (± 1536966) 138583621 ns/iter (± 1431198) 1.04
es/full/codegen/es3 38043 ns/iter (± 123) 37341 ns/iter (± 52) 1.02
es/full/codegen/es5 38122 ns/iter (± 78) 37305 ns/iter (± 61) 1.02
es/full/codegen/es2015 37962 ns/iter (± 53) 37203 ns/iter (± 63) 1.02
es/full/codegen/es2016 38099 ns/iter (± 89) 37315 ns/iter (± 73) 1.02
es/full/codegen/es2017 38057 ns/iter (± 121) 37263 ns/iter (± 73) 1.02
es/full/codegen/es2018 38059 ns/iter (± 96) 37293 ns/iter (± 84) 1.02
es/full/codegen/es2019 38070 ns/iter (± 93) 37299 ns/iter (± 109) 1.02
es/full/codegen/es2020 38098 ns/iter (± 82) 37284 ns/iter (± 46) 1.02
es/full/all/es3 182884886 ns/iter (± 2173442) 179792081 ns/iter (± 869664) 1.02
es/full/all/es5 175702250 ns/iter (± 1008771) 171806579 ns/iter (± 1554046) 1.02
es/full/all/es2015 130575482 ns/iter (± 928144) 127488757 ns/iter (± 538459) 1.02
es/full/all/es2016 130340267 ns/iter (± 940715) 127102643 ns/iter (± 780297) 1.03
es/full/all/es2017 130092513 ns/iter (± 1607717) 126259163 ns/iter (± 562203) 1.03
es/full/all/es2018 126987731 ns/iter (± 1000324) 124088892 ns/iter (± 506029) 1.02
es/full/all/es2019 125931606 ns/iter (± 670340) 123634339 ns/iter (± 506801) 1.02
es/full/all/es2020 120688458 ns/iter (± 860236) 118539342 ns/iter (± 635187) 1.02
es/full/parser 517668 ns/iter (± 6491) 514549 ns/iter (± 5411) 1.01
es/full/base/fixer 19331 ns/iter (± 59) 18784 ns/iter (± 205) 1.03
es/full/base/resolver_and_hygiene 94501 ns/iter (± 419) 94927 ns/iter (± 311) 1.00
serialization of serde 293 ns/iter (± 2) 301 ns/iter (± 0) 0.97
css/minify/libraries/bootstrap 31101053 ns/iter (± 196339) 31297145 ns/iter (± 282495) 0.99
css/visitor/compare/clone 2035480 ns/iter (± 20469) 1942842 ns/iter (± 11500) 1.05
css/visitor/compare/visit_mut_span 2202897 ns/iter (± 46133) 2060082 ns/iter (± 14753) 1.07
css/visitor/compare/visit_mut_span_panic 2272456 ns/iter (± 41559) 2138687 ns/iter (± 13331) 1.06
css/visitor/compare/fold_span 2976886 ns/iter (± 33379) 2826169 ns/iter (± 11621) 1.05
css/visitor/compare/fold_span_panic 3194115 ns/iter (± 18366) 3022190 ns/iter (± 13011) 1.06
css/lexer/bootstrap_5_1_3 4662239 ns/iter (± 4173) 4809602 ns/iter (± 4169) 0.97
css/lexer/foundation_6_7_4 3968451 ns/iter (± 3159) 4047562 ns/iter (± 1865) 0.98
css/lexer/tailwind_3_1_1 755095 ns/iter (± 8777) 772953 ns/iter (± 470) 0.98
css/parser/bootstrap_5_1_3 20539831 ns/iter (± 62339) 20435096 ns/iter (± 98043) 1.01
css/parser/foundation_6_7_4 16444345 ns/iter (± 35486) 16474452 ns/iter (± 33905) 1.00
css/parser/tailwind_3_1_1 3173816 ns/iter (± 2403) 3198893 ns/iter (± 5870) 0.99
es/codegen/colors 727542 ns/iter (± 395069) 743051 ns/iter (± 403325) 0.98
es/codegen/large 2997369 ns/iter (± 1591163) 2978990 ns/iter (± 1570143) 1.01
es/codegen/with-parser/colors 48157 ns/iter (± 356) 48512 ns/iter (± 271) 0.99
es/codegen/with-parser/large 516372 ns/iter (± 1386) 516151 ns/iter (± 669) 1.00
es/minify/libraries/antd 1380919131 ns/iter (± 13508545) 1314259791 ns/iter (± 18132869) 1.05
es/minify/libraries/d3 295621109 ns/iter (± 2517514) 285889358 ns/iter (± 4391454) 1.03
es/minify/libraries/echarts 1112565494 ns/iter (± 8279095) 1051602666 ns/iter (± 9309362) 1.06
es/minify/libraries/jquery 86088975 ns/iter (± 378744) 84761849 ns/iter (± 726229) 1.02
es/minify/libraries/lodash 105989021 ns/iter (± 3260205) 103265103 ns/iter (± 290834) 1.03
es/minify/libraries/moment 50833168 ns/iter (± 420227) 49701799 ns/iter (± 102602) 1.02
es/minify/libraries/react 18389549 ns/iter (± 258736) 18179800 ns/iter (± 63918) 1.01
es/minify/libraries/terser 225906165 ns/iter (± 2439907) 214756123 ns/iter (± 710463) 1.05
es/minify/libraries/three 399272082 ns/iter (± 4491660) 376778806 ns/iter (± 8319557) 1.06
es/minify/libraries/typescript 2715776477 ns/iter (± 12807737) 2612213225 ns/iter (± 27797137) 1.04
es/minify/libraries/victory 590525594 ns/iter (± 10027605) 555253989 ns/iter (± 4618649) 1.06
es/minify/libraries/vue 128844487 ns/iter (± 824271) 124545213 ns/iter (± 632055) 1.03
es/visitor/compare/clone 2061442 ns/iter (± 5720) 2070451 ns/iter (± 9381) 1.00
es/visitor/compare/visit_mut_span 2395122 ns/iter (± 7031) 2393444 ns/iter (± 2312) 1.00
es/visitor/compare/visit_mut_span_panic 2449914 ns/iter (± 12521) 2457445 ns/iter (± 6411) 1.00
es/visitor/compare/fold_span 3498463 ns/iter (± 15607) 3480824 ns/iter (± 3972) 1.01
es/visitor/compare/fold_span_panic 3626572 ns/iter (± 15650) 3622180 ns/iter (± 6197) 1.00
es/lexer/colors 13160 ns/iter (± 12) 13085 ns/iter (± 31) 1.01
es/lexer/angular 6212503 ns/iter (± 32491) 6239744 ns/iter (± 20677) 1.00
es/lexer/backbone 819862 ns/iter (± 473) 821309 ns/iter (± 2791) 1.00
es/lexer/jquery 4607945 ns/iter (± 2876) 4619996 ns/iter (± 2955) 1.00
es/lexer/jquery mobile 7086925 ns/iter (± 4699) 7057622 ns/iter (± 23248) 1.00
es/lexer/mootools 3647653 ns/iter (± 6121) 3619671 ns/iter (± 1434) 1.01
es/lexer/underscore 691277 ns/iter (± 620) 677725 ns/iter (± 2810) 1.02
es/lexer/three 21713747 ns/iter (± 16284) 21535632 ns/iter (± 39165) 1.01
es/lexer/yui 4089341 ns/iter (± 6292) 4060189 ns/iter (± 2262) 1.01
es/parser/colors 29001 ns/iter (± 65) 29102 ns/iter (± 58) 1.00
es/parser/angular 14713634 ns/iter (± 104395) 14242200 ns/iter (± 138516) 1.03
es/parser/backbone 2168995 ns/iter (± 9836) 2116541 ns/iter (± 10068) 1.02
es/parser/jquery 11933316 ns/iter (± 124953) 11551697 ns/iter (± 51433) 1.03
es/parser/jquery mobile 18445736 ns/iter (± 201189) 17708029 ns/iter (± 61183) 1.04
es/parser/mootools 9027711 ns/iter (± 32416) 8813210 ns/iter (± 19632) 1.02
es/parser/underscore 1862541 ns/iter (± 7989) 1822634 ns/iter (± 21173) 1.02
es/parser/three 52833353 ns/iter (± 316895) 49195553 ns/iter (± 294981) 1.07
es/parser/yui 9138731 ns/iter (± 48155) 8906517 ns/iter (± 26843) 1.03
es/preset-env/usage/builtin_type 143147 ns/iter (± 32620) 144577 ns/iter (± 33219) 0.99
es/preset-env/usage/property 18792 ns/iter (± 63) 18515 ns/iter (± 63) 1.01
es/resolver/typescript 97512454 ns/iter (± 1061053) 97049789 ns/iter (± 1226009) 1.00
es/fixer/typescript 68025664 ns/iter (± 484242) 67564417 ns/iter (± 1275464) 1.01
es/hygiene/typescript 150288177 ns/iter (± 2696572) 144208687 ns/iter (± 2376305) 1.04
es/resolver_with_hygiene/typescript 309702089 ns/iter (± 2901177) 306531284 ns/iter (± 3063980) 1.01
es/visitor/base-perf/module_clone 61172 ns/iter (± 273) 61235 ns/iter (± 387) 1.00
es/visitor/base-perf/fold_empty 64984 ns/iter (± 167) 64609 ns/iter (± 250) 1.01
es/visitor/base-perf/fold_noop_impl_all 64461 ns/iter (± 619) 65016 ns/iter (± 451) 0.99
es/visitor/base-perf/fold_noop_impl_vec 64576 ns/iter (± 281) 65132 ns/iter (± 223) 0.99
es/visitor/base-perf/boxing_boxed_clone 56 ns/iter (± 0) 58 ns/iter (± 0) 0.97
es/visitor/base-perf/boxing_unboxed_clone 41 ns/iter (± 0) 40 ns/iter (± 0) 1.02
es/visitor/base-perf/boxing_boxed 110 ns/iter (± 0) 113 ns/iter (± 0) 0.97
es/visitor/base-perf/boxing_unboxed 78 ns/iter (± 0) 80 ns/iter (± 0) 0.97
es/visitor/base-perf/visit_empty 0 ns/iter (± 0) 0 ns/iter (± 0) NaN
es/visitor/base-perf/visit_contains_this 2605 ns/iter (± 3) 2691 ns/iter (± 20) 0.97
es/base/parallel/resolver/typescript 4580761072 ns/iter (± 319418922) 4644273250 ns/iter (± 314003879) 0.99
es/base/parallel/hygiene/typescript 1602867781 ns/iter (± 13472983) 1589372015 ns/iter (± 11462369) 1.01
misc/visitors/time-complexity/time 5 105 ns/iter (± 0) 104 ns/iter (± 2) 1.01
misc/visitors/time-complexity/time 10 278 ns/iter (± 0) 267 ns/iter (± 0) 1.04
misc/visitors/time-complexity/time 15 541 ns/iter (± 3) 594 ns/iter (± 31) 0.91
misc/visitors/time-complexity/time 20 949 ns/iter (± 5) 900 ns/iter (± 3) 1.05
misc/visitors/time-complexity/time 40 3737 ns/iter (± 7) 3564 ns/iter (± 13) 1.05
misc/visitors/time-complexity/time 60 7779 ns/iter (± 8) 7394 ns/iter (± 11) 1.05
es/full-target/es2016 247022 ns/iter (± 1254) 242561 ns/iter (± 823) 1.02
es/full-target/es2017 233794 ns/iter (± 481) 227147 ns/iter (± 1609) 1.03
es/full-target/es2018 219864 ns/iter (± 1005) 216543 ns/iter (± 642) 1.02
es2020_nullish_coalescing 73774 ns/iter (± 421) 71953 ns/iter (± 423) 1.03
es2020_optional_chaining 85022 ns/iter (± 394) 83812 ns/iter (± 184) 1.01
es2022_class_properties 122880 ns/iter (± 545) 122755 ns/iter (± 307) 1.00
es2018_object_rest_spread 77993 ns/iter (± 411) 75007 ns/iter (± 307) 1.04
es2019_optional_catch_binding 67554 ns/iter (± 226) 64961 ns/iter (± 205) 1.04
es2017_async_to_generator 65437 ns/iter (± 198) 65398 ns/iter (± 161) 1.00
es2016_exponentiation 71713 ns/iter (± 388) 69894 ns/iter (± 333) 1.03
es2015_arrow 75179 ns/iter (± 335) 72880 ns/iter (± 251) 1.03
es2015_block_scoped_fn 71301 ns/iter (± 289) 70706 ns/iter (± 215) 1.01
es2015_block_scoping 135189 ns/iter (± 654) 132295 ns/iter (± 449) 1.02

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

Please sign in to comment.