From 26872310f60d4de40e717cd30e7bf856bad3edba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Mon, 20 Jan 2025 07:58:42 +0900 Subject: [PATCH] perf(es/minifier): Do heavy operation only if required (#9902) **Description:** In `store_var_for_inlining`, we had called `inline_with_multi_replacer` needlessly. This PR fixes it. --- .changeset/old-foxes-train.md | 6 ++++++ .../src/compress/optimize/inline.rs | 14 +++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 .changeset/old-foxes-train.md diff --git a/.changeset/old-foxes-train.md b/.changeset/old-foxes-train.md new file mode 100644 index 000000000000..198fd65d24d5 --- /dev/null +++ b/.changeset/old-foxes-train.md @@ -0,0 +1,6 @@ +--- +swc_ecma_minifier: minor +swc_core: minor +--- + +perf(es/minifier): Do heavy operation only if required diff --git a/crates/swc_ecma_minifier/src/compress/optimize/inline.rs b/crates/swc_ecma_minifier/src/compress/optimize/inline.rs index 8d976d002b3c..c541affbf9d2 100644 --- a/crates/swc_ecma_minifier/src/compress/optimize/inline.rs +++ b/crates/swc_ecma_minifier/src/compress/optimize/inline.rs @@ -89,7 +89,7 @@ impl Optimizer<'_> { let is_inline_enabled = self.options.reduce_vars || self.options.collapse_vars || self.options.inline != 0; - self.vars.inline_with_multi_replacer(init); + let mut inlined_into_init = false; let id = ident.to_id(); @@ -107,6 +107,9 @@ impl Optimizer<'_> { && !usage.used_as_ref { if let Expr::Array(arr) = init { + self.vars.inline_with_multi_replacer(arr); + inlined_into_init = true; + if arr.elems.len() < 32 && arr.elems.iter().all(|e| match e { Some(ExprOrSpread { spread: None, expr }) => match &**expr { @@ -257,6 +260,11 @@ impl Optimizer<'_> { _ => false, } { + if !inlined_into_init { + inlined_into_init = true; + self.vars.inline_with_multi_replacer(init); + } + self.mode.store(id.clone(), &*init); let VarUsageInfo { @@ -498,6 +506,10 @@ impl Optimizer<'_> { return; } + if !inlined_into_init { + self.vars.inline_with_multi_replacer(init); + } + report_change!( "inline: Decided to inline var '{}' because it's used only once", ident