crates/oxc_minifier/docs/OPTIMIZATIONS.md
Complete list of optimizations for maximum size reduction.
Many optimizations rely on oxc_ecmascript for ECMAScript operations like constant evaluation, type conversion, and side effect analysis.
Module: fold_constants.rs
Size Impact: High
Description: Evaluates expressions at compile time using oxc_ecmascript::constant_evaluation
// Before
2 + 3;
"a" + "b";
// After
5;
"ab";
Module: remove_dead_code.rs
Size Impact: Very High
Description: Removes unreachable code
// Before
if (false) {
console.log("never runs");
}
// After
// (removed entirely)
Module: minimize_conditions.rs, minimize_if_statement.rs
Size Impact: Medium-High
Description: Simplifies conditional logic and if statements
// Before
if (x) return true;
else return false;
// After
return !!x;
// Before
if (a) b();
// After
a && b();
Module: minimize_logical_expression.rs, minimize_not_expression.rs
Size Impact: Medium
Description: Simplifies boolean, logical, and negation expressions
// Before
!(!x || !y);
// After
x && y;
// Before
!!true;
// After
true;
Module: substitute_alternate_syntax.rs
Size Impact: High
Description: Uses shorter equivalent syntax leveraging oxc_ecmascript type conversions
// Before
true;
false;
undefined;
// After
!0;
!1;
void 0;
Module: convert_to_dotted_properties.rs
Size Impact: Medium
Description: Converts bracket notation to dot notation when safe
// Before
obj["property"];
// After
obj.property;
Module: inline.rs
Size Impact: Medium
Description: Simplifies template literals
// Before
`hello ${"world"}`;
// After
"hello world";
Module: replace_known_methods.rs
Size Impact: High
Description: Optimizes known built-in method calls
// Before
"test".indexOf("e");
Math.pow(2, 3);
// After
"test".indexOf("e"); // or optimized form
2 ** 3;
Module: minimize_for_statement.rs
Size Impact: Low-Medium
Description: Optimizes for loops
// Before
for (;;) {}
// After
for (;;);
Module: minimize_statements.rs
Size Impact: Medium
Description: Combines and simplifies statements
// Before
a();
b();
// After (with sequences option)
a(), b();
Module: remove_unused_declaration.rs, remove_unused_expression.rs
Size Impact: High
Description: Removes unused variables and simplifies unused expressions
// Before
let unused = 5;
console.log("hello");
// After
console.log("hello");
// Before
[1, 2, fn()]; // unused array with side effects
// After
fn(); // keep only side effects
Module: normalize.rs
Size Impact: Enables other optimizations
Description: Converts code to canonical form
// Example: while -> for conversion
// Before
while (true) {}
// After
for (;;) {}
Module: minimize_conditional_expression.rs
Size Impact: Medium
Description: Optimizes ternary operators
// Before
x ? true : false;
// After
!!x;
Module: minimize_expression_in_boolean_context.rs
Size Impact: Low-Medium
Description: Simplifies expressions in boolean contexts
// Before
if (x === true) {
}
// After
if (x) {
}
Module: inline.rs
Size Impact: Medium
Description: Inlines single-use variables
// Before
const x = 5;
console.log(x);
// After
console.log(5);
Some optimizations enable others:
The fixed-point iteration ensures all optimization opportunities are found.