oxc-project
oxc
BlogDocsChangelog

refactor(minifier): ast passes infrastructure

#4625Merged
Comparing
minifier-ast-passes
(
e78cba6
) with
main
(
3a6e4d9
)
CodSpeed Performance Gauge
-17%
Improvements
1
Regressions
5
Untouched
26

Benchmarks

Failed

minifier[react.development.js]
tasks/benchmark/benches/minifier.rs::minifier::bench_minifier
Regression
CodSpeed Performance Gauge
-10%
3.2 ms3.6 ms
prepass[antd.js]
tasks/benchmark/benches/minifier.rs::minifier::bench_passes
Regression
CodSpeed Performance Gauge
-13%
17.8 ms20.5 ms
prepass[typescript.js]
tasks/benchmark/benches/minifier.rs::minifier::bench_passes
Regression
CodSpeed Performance Gauge
-15%
32.4 ms38 ms
prepass[react.development.js]
tasks/benchmark/benches/minifier.rs::minifier::bench_passes
Regression
CodSpeed Performance Gauge
-12%
236.3 µs269.6 µs
minifier[antd.js]
tasks/benchmark/benches/minifier.rs::minifier::bench_minifier
Regression
CodSpeed Performance Gauge
-17%
286.8 ms344.3 ms

Improved

minifier[typescript.js]
tasks/benchmark/benches/minifier.rs::minifier::bench_minifier
CodSpeed Performance Gauge
+16%
517.8 ms447.3 ms

Passed

semantic[RadixUIAdoptionSection.jsx]
tasks/benchmark/benches/semantic.rs::semantic::bench_semantic
CodSpeed Performance Gauge
0%
99.8 µs99.4 µs
lexer[RadixUIAdoptionSection.jsx]
tasks/benchmark/benches/lexer.rs::lexer::bench_lexer
CodSpeed Performance Gauge
0%
22.4 µs22.4 µs
transformer[RadixUIAdoptionSection.jsx]
tasks/benchmark/benches/transformer.rs::transformer::bench_transformer
CodSpeed Performance Gauge
0%
222.7 µs222.6 µs
linter[checker.ts]
tasks/benchmark/benches/linter.rs::linter::bench_linter
CodSpeed Performance Gauge
0%
1.4 s1.4 s
semantic[checker.ts]
tasks/benchmark/benches/semantic.rs::semantic::bench_semantic
CodSpeed Performance Gauge
0%
75.9 ms75.9 ms
lexer[antd.js]
tasks/benchmark/benches/lexer.rs::lexer::bench_lexer
CodSpeed Performance Gauge
0%
19.9 ms19.9 ms
lexer[pdf.mjs]
tasks/benchmark/benches/lexer.rs::lexer::bench_lexer
CodSpeed Performance Gauge
0%
3.2 ms3.2 ms
semantic[antd.js]
tasks/benchmark/benches/semantic.rs::semantic::bench_semantic
CodSpeed Performance Gauge
0%
126.6 ms126.6 ms
lexer[cal.com.tsx]
tasks/benchmark/benches/lexer.rs::lexer::bench_lexer
CodSpeed Performance Gauge
0%
4.9 ms4.9 ms
parser[antd.js]
tasks/benchmark/benches/parser.rs::parser::bench_parser
CodSpeed Performance Gauge
0%
104.2 ms104.2 ms
parser[checker.ts]
tasks/benchmark/benches/parser.rs::parser::bench_parser
CodSpeed Performance Gauge
0%
52.5 ms52.5 ms
parser[pdf.mjs]
tasks/benchmark/benches/parser.rs::parser::bench_parser
CodSpeed Performance Gauge
0%
17.1 ms17.1 ms
parser[cal.com.tsx]
tasks/benchmark/benches/parser.rs::parser::bench_parser
CodSpeed Performance Gauge
0%
24.2 ms24.2 ms
codegen_sourcemap[checker.ts]
tasks/benchmark/benches/codegen.rs::codegen::bench_codegen
CodSpeed Performance Gauge
0%
76.7 ms76.7 ms
transformer[antd.js]
tasks/benchmark/benches/transformer.rs::transformer::bench_transformer
CodSpeed Performance Gauge
0%
245.1 ms245.1 ms
lexer[checker.ts]
tasks/benchmark/benches/lexer.rs::lexer::bench_lexer
CodSpeed Performance Gauge
0%
12 ms12 ms
isolated-declarations[vue-id.ts]
tasks/benchmark/benches/isolated_declarations.rs::transformer::bench_isolated_declarations
CodSpeed Performance Gauge
0%
380.2 ms380.2 ms
parser[RadixUIAdoptionSection.jsx]
tasks/benchmark/benches/parser.rs::parser::bench_parser
CodSpeed Performance Gauge
0%
76.8 µs76.8 µs
codegen[checker.ts]
tasks/benchmark/benches/codegen.rs::codegen::bench_codegen
CodSpeed Performance Gauge
0%
20.1 ms20.1 ms
transformer[checker.ts]
tasks/benchmark/benches/transformer.rs::transformer::bench_transformer
CodSpeed Performance Gauge
0%
139 ms139 ms
transformer[cal.com.tsx]
tasks/benchmark/benches/transformer.rs::transformer::bench_transformer
CodSpeed Performance Gauge
0%
63 ms63 ms
transformer[pdf.mjs]
tasks/benchmark/benches/transformer.rs::transformer::bench_transformer
CodSpeed Performance Gauge
0%
37.8 ms37.8 ms
semantic[pdf.mjs]
tasks/benchmark/benches/semantic.rs::semantic::bench_semantic
CodSpeed Performance Gauge
0%
20.8 ms20.8 ms
linter[cal.com.tsx]
tasks/benchmark/benches/linter.rs::linter::bench_linter
CodSpeed Performance Gauge
0%
782.2 ms783.2 ms
sourcemap[cal.com.tsx]
tasks/benchmark/benches/sourcemap.rs::sourcemap::bench_sourcemap
CodSpeed Performance Gauge
0%
71.3 ms71.4 ms
semantic[cal.com.tsx]
tasks/benchmark/benches/semantic.rs::semantic::bench_semantic
CodSpeed Performance Gauge
-1%
46.6 ms47 ms

Commits

Click on a commit to change the comparison range
Base
main
3a6e4d9
-16.7%
refactor(minifier): ast passes infrastructure (#4625) After studying google closure compiler, I'm leaning towards a multi-ast-pass infrastructure for the minifier. This is one of the few places where we are going to trade maintainability over performance, given the goal of the minifier is compression size not performance. All of the terminologies and separation of concerns are aligned with google closure compiler. Infrastructure of `terser` and `esbuild` are not suitable for us to study nor pursuit. Their code are so tightly coupled - I failed to comprehend any of them every time I try to walk through a piece of optmization. Google closure compiler despite being written in Java, it's actually the most readable minifier out there. To improve performance between ast passes, I envision a change detection system over a portion of the code. The benchmark will demonstrate the performance regression of running 5 ast passes instead of 2. To complete this PR, I need to figure out "fix-point" and order of these ast passes.
e78cba6
1 year ago
by Boshen
© 2025 CodSpeed Technology
Home Terms Privacy Docs