perf(es/minifier): reduce usage analysis overhead#11863
Conversation
|
Merging this PR will not alter performance
|
| Benchmark | BASE |
HEAD |
Efficiency | |
|---|---|---|---|---|
| ⚡ | es/large/minify/libraries/d3 |
494.5 ms | 483.1 ms | +2.36% |
| ⚡ | es/large/minify/libraries/lodash |
142.2 ms | 138.4 ms | +2.76% |
| ❌ | es/large/minify/libraries/react |
24.3 ms | 24.9 ms | -2.44% |
| ⚡ | es/large/minify/libraries/typescript |
4.6 s | 4.5 s | +2.82% |
| ⚡ | es/minifier/libs/d3 |
377.5 ms | 363.9 ms | +3.72% |
| ⚡ | es/minifier/libs/echarts |
1.4 s | 1.4 s | +2.13% |
| ⚡ | es/minifier/libs/three |
598.2 ms | 584 ms | +2.43% |
| ⚡ | es/minifier/libs/jquery |
89.8 ms | 87.6 ms | +2.5% |
| ⚡ | es/minifier/libs/typescript |
3.5 s | 3.4 s | +3.95% |
| ⚡ | es/minifier/libs/lodash |
108.4 ms | 104.4 ms | +3.79% |
| ⚡ | es/minifier/libs/vue |
135.5 ms | 132.5 ms | +2.25% |
| ❌ | es/minifier/libs/react |
18.5 ms | 19.2 ms | -3.29% |
| ❌ | stackoverflow |
38.3 ms | 45.1 ms | -15.1% |
| ❌ | stackoverflow |
37.5 ms | 43.6 ms | -14.09% |
Tip
Investigate this regression by commenting @codspeedbot fix this regression on this PR, or directly use the CodSpeed MCP with your agent.
Comparing hardfist:perf/micro-optimize-ecma-minifier (e2d6f95) with main (800bc17)2
Footnotes
-
31 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports. ↩
-
No successful run was found on
main(331c920) during the generation of this report, so 800bc17 was used instead as the comparison base. There might be some changes unrelated to this pull request in this report. ↩
Description:
Micro-optimization work for the ECMAScript minifier. Current patch reduces usage-analysis, DCE, renamer, and optimizer inline-map overhead on large modules while preserving existing behavior.
Micro-Optimization Progress
Target benchmark:
swc_ecma_minifiersingle-file TypeScript minifier run (benches/full/typescript.js)Measurement mode:
valgrind --tool=callgrindPrimary metric:
IrBaseline command:
RUST_LOG=off valgrind --tool=callgrind --callgrind-out-file=... target/release/examples/minifier benches/full/typescript.jsceea09e1f8examples/minifier benches/full/typescript.jsIr5,558,264,2145,523,555,239-0.62%cargo fmt --all;cargo test -p swc_ecma_transforms_optimization;cargo test -p swc_ecma_minifier38f4f3e7d9examples/minifier benches/full/typescript.jsIr5,558,264,2145,498,673,241-1.07%cargo fmt --all;cargo test -p swc_ecma_utils;cargo test -p swc_ecma_transforms_optimization;cargo test -p swc_ecma_minifier;crates/swc_ecma_minifier/./scripts/exec.sh;cargo clippy --all --all-targets -- -D warningsfb3c8be211examples/minifier benches/full/typescript.jsIr5,558,264,2145,490,035,410-1.23%cargo fmt --all;cargo test -p swc_ecma_minifier;crates/swc_ecma_minifier/./scripts/exec.sh;cargo clippy -p swc_ecma_minifier --all-targets -- -D warningsec08f30f6dexamples/minifier benches/full/typescript.jsIr5,558,264,2145,485,854,488-1.30%cargo test -p swc_ecma_transforms_optimization;cargo clippy -p swc_ecma_transforms_optimization --all-targets -- -D warnings93d0cbb514examples/minifier benches/full/typescript.jsIr5,558,264,2145,485,136,348-1.32%cargo test -p swc_ecma_transforms_optimization;cargo clippy -p swc_ecma_transforms_optimization --all-targets -- -D warningstop_retainscans in DCE drop checks; target not complete yet.1ec437a93eexamples/minifier benches/full/typescript.jsIr5,558,264,2145,482,169,581-1.37%cargo test -p swc_ecma_utils;cargo clippy -p swc_ecma_utils --all-targets -- -D warningsMath.*side-effect context before atom text; target not complete yet.fc70244aa0examples/minifier benches/full/typescript.jsIr5,558,264,2145,480,340,032-1.40%cargo test -p swc_ecma_utils;cargo clippy -p swc_ecma_utils --all-targets -- -D warnings3ffd55bf2aexamples/minifier benches/full/typescript.jsIr5,558,264,2145,480,276,424-1.40%cargo test -p swc_ecma_utils;cargo clippy -p swc_ecma_utils --all-targets -- -D warnings2b9b9859e3examples/minifier benches/full/typescript.jsIr5,558,264,2145,477,865,257-1.45%cargo test -p swc_ecma_minifier;cargo clippy -p swc_ecma_minifier --all-targets -- -D warnings1558303f6cexamples/minifier benches/full/typescript.jsIr5,558,264,2145,463,148,238-1.71%cargo fmt --all;cargo test -p swc_ecma_minifier;cargo clippy -p swc_ecma_minifier --all-targets -- -D warnings44316f60d5examples/minifier benches/full/typescript.jsIr5,558,264,2145,462,573,553-1.72%cargo fmt --all;cargo test -p swc_ecma_transforms_base;cargo clippy -p swc_ecma_transforms_base --all-targets -- -D warningsextendwhile accumulating renamer cache updates; target not complete yet.44b08d8e9fexamples/minifier benches/full/typescript.jsIr5,558,264,2145,453,904,419-1.88%cargo fmt --all;cargo test -p swc_ecma_minifier;cargo clippy -p swc_ecma_minifier --all-targets -- -D warningsd26e2a8c85examples/minifier benches/full/typescript.jsIr5,558,264,2145,429,174,793-2.32%cargo fmt --all;cargo test -p swc_ecma_transforms_optimization;cargo clippy -p swc_ecma_transforms_optimization --all-targets -- -D warnings8ba9e3b920examples/minifier benches/full/typescript.jsIr5,558,264,2145,417,383,207-2.53%cargo fmt --all;cargo test -p swc_ecma_minifier;cargo clippy -p swc_ecma_minifier --all-targets -- -D warnings8056c14022examples/minifier benches/full/typescript.jsIr5,558,264,2145,390,205,201-3.02%cargo fmt --all;cargo test -p swc_ecma_minifier;cargo clippy -p swc_ecma_minifier --all-targets -- -D warningsVarUsageInfoinline inProgramData.varsto avoid per-binding boxes; target not complete yet.a750dc8391examples/minifier benches/full/typescript.jsIr5,558,264,2145,390,134,723-3.02%cargo fmt --all;cargo check -p swc_ecma_minifier;cargo test -p swc_ecma_minifier;cargo clippy -p swc_ecma_minifier --all-targets -- -D warnings7e3d5651fcexamples/minifier benches/full/typescript.jsIr5,558,264,2145,388,848,817-3.05%cargo fmt --all;cargo check -p swc_ecma_minifier;cargo test -p swc_ecma_minifier;cargo clippy -p swc_ecma_minifier --all-targets -- -D warnings1654ab203eexamples/minifier benches/full/typescript.jsIr5,558,264,2145,348,517,169-3.77%cargo fmt --all;cargo check -p swc_ecma_minifier;cargo test -p swc_ecma_minifier;cargo clippy -p swc_ecma_minifier --all-targets -- -D warningsff6efc15a6examples/minifier benches/full/typescript.jsIr5,558,264,2145,348,385,188-3.78%cargo fmt --all;cargo check -p swc_ecma_minifier;cargo test -p swc_ecma_minifier;cargo clippy -p swc_ecma_minifier --all-targets -- -D warnings0d68d6321cexamples/minifier benches/full/typescript.jsIr5,558,264,2145,332,892,051-4.06%cargo fmt --all;cargo check -p swc_ecma_transforms_base;cargo test -p swc_ecma_transforms_base;cargo clippy -p swc_ecma_transforms_base --all-targets -- -D warnings;cargo check -p swc_ecma_minifier;cargo test -p swc_ecma_minifier;cargo clippy -p swc_ecma_minifier --all-targets -- -D warningsargumentsfilters and reserves scope identifier storage before merging child scopes; target not complete yet.d93b793664examples/minifier benches/full/typescript.jsIr5,558,264,2145,304,610,408-4.56%cargo fmt --all;cargo check -p swc_ecma_minifier;cargo test -p swc_ecma_minifier;cargo clippy -p swc_ecma_minifier --all-targets -- -D warningsinitialized_varslookups while merging usage data until the branch needs them; target not complete yet.7e1a9d5ae2examples/minifier benches/full/typescript.jsIr5,558,264,2145,302,436,151-4.60%cargo fmt --all;cargo test -p swc_ecma_transforms_optimization;cargo clippy -p swc_ecma_transforms_optimization --all-targets -- -D warnings;cargo test -p swc_ecma_minifier;cargo clippy -p swc_ecma_minifier --all-targets -- -D warningse2d6f95538examples/minifier benches/full/typescript.jsIr5,558,264,2145,263,249,353-5.31%cargo fmt --all;cargo test -p swc_ecma_transforms_optimization;cargo test -p swc_ecma_minifier;cargo clippy -p swc_ecma_transforms_optimization --all-targets -- -D warnings;cargo clippy -p swc_ecma_minifier --all-targets -- -D warnings;cargo clippy --all --all-targets -- -D warningsLocal artifacts are under
optimization-artifacts/callgrind/and are intentionally not committed.BREAKING CHANGE:
None.
Related issue (if exists):
N/A