Skip to content

Commit 2625bdf

Browse files
authored
perf(minifier): no need to collect references if AST is not changed (#13078)
1 parent 4f2cc96 commit 2625bdf

File tree

1 file changed

+20
-16
lines changed
  • crates/oxc_minifier/src/peephole

1 file changed

+20
-16
lines changed

crates/oxc_minifier/src/peephole/mod.rs

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -107,15 +107,17 @@ impl<'a> Traverse<'a, MinifierState<'a>> for PeepholeOptimizations {
107107
}
108108

109109
fn exit_program(&mut self, program: &mut Program<'a>, ctx: &mut TraverseCtx<'a>) {
110-
// Remove unused references by visiting the AST again and diff the collected references.
111-
let refs_before =
112-
ctx.scoping().resolved_references().flatten().copied().collect::<FxHashSet<_>>();
113-
let mut counter = ReferencesCounter::default();
114-
counter.visit_program(program);
115-
for reference_id_to_remove in refs_before.difference(&counter.refs) {
116-
ctx.scoping_mut().delete_reference(*reference_id_to_remove);
117-
}
118110
self.changed = ctx.state.changed;
111+
if self.changed {
112+
// Remove unused references by visiting the AST again and diff the collected references.
113+
let refs_before =
114+
ctx.scoping().resolved_references().flatten().copied().collect::<FxHashSet<_>>();
115+
let mut counter = ReferencesCounter::default();
116+
counter.visit_program(program);
117+
for reference_id_to_remove in refs_before.difference(&counter.refs) {
118+
ctx.scoping_mut().delete_reference(*reference_id_to_remove);
119+
}
120+
}
119121
}
120122

121123
fn exit_statements(&mut self, stmts: &mut Vec<'a, Statement<'a>>, ctx: &mut TraverseCtx<'a>) {
@@ -416,15 +418,17 @@ impl<'a> Traverse<'a, MinifierState<'a>> for DeadCodeElimination {
416418
}
417419

418420
fn exit_program(&mut self, program: &mut Program<'a>, ctx: &mut TraverseCtx<'a>) {
419-
// Remove unused references by visiting the AST again and diff the collected references.
420-
let refs_before =
421-
ctx.scoping().resolved_references().flatten().copied().collect::<FxHashSet<_>>();
422-
let mut counter = ReferencesCounter::default();
423-
counter.visit_program(program);
424-
for reference_id_to_remove in refs_before.difference(&counter.refs) {
425-
ctx.scoping_mut().delete_reference(*reference_id_to_remove);
426-
}
427421
self.changed = ctx.state.changed;
422+
if self.changed {
423+
// Remove unused references by visiting the AST again and diff the collected references.
424+
let refs_before =
425+
ctx.scoping().resolved_references().flatten().copied().collect::<FxHashSet<_>>();
426+
let mut counter = ReferencesCounter::default();
427+
counter.visit_program(program);
428+
for reference_id_to_remove in refs_before.difference(&counter.refs) {
429+
ctx.scoping_mut().delete_reference(*reference_id_to_remove);
430+
}
431+
}
428432
}
429433

430434
fn exit_variable_declarator(

0 commit comments

Comments
 (0)