Skip to content

refactor(javascript): avoid redundant size-mode mangle export work#13691

Open
LingyuCoder wants to merge 1 commit intomainfrom
refactor/mangle-exports-size-mode-cache
Open

refactor(javascript): avoid redundant size-mode mangle export work#13691
LingyuCoder wants to merge 1 commit intomainfrom
refactor/mangle-exports-size-mode-cache

Conversation

@LingyuCoder
Copy link
Copy Markdown
Contributor

Summary

  • cache UsageState in ExportInfoCache while building the mangle exports cache
  • remove the extra get_used(None) lookup and redundant sorting in optimization.mangleExports = 'size'
  • add a unit test covering name assignment from pre-sorted inputs

Related links

  • N/A

Checklist

  • Tests updated (or not required).
  • Documentation updated (or not required).

Copilot AI review requested due to automatic review settings April 13, 2026 11:49
@github-actions github-actions Bot added release: refactor team The issue/pr is created by the member of Rspack. labels Apr 13, 2026
@github-actions
Copy link
Copy Markdown
Contributor

⏳ Triggered benchmark: Open

@cloudflare-workers-and-pages
Copy link
Copy Markdown

Deploying rspack with  Cloudflare Pages  Cloudflare Pages

Latest commit: fba13d6
Status: ✅  Deploy successful!
Preview URL: https://70382b77.rspack-v2.pages.dev
Branch Preview URL: https://refactor-mangle-exports-size.rspack-v2.pages.dev

View logs

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This pull request refactors the JavaScript mangle-exports implementation to reduce redundant work during size-mode mangling, and it also introduces a new Rstack nine-grid poster asset set plus a design spec.

Changes:

  • Cache UsageState in ExportInfoCache and refactor size-mode export name assignment to avoid extra lookups and sorting.
  • Add a unit test ensuring size-mode name assignment respects pre-sorted input order.
  • Add a new nine-grid poster SVG and related PNG assets, plus a design spec document.

Reviewed changes

Copilot reviewed 2 out of 12 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
crates/rspack_plugin_javascript/src/plugin/mangle_exports_plugin.rs Optimizes size-mode export mangling by caching UsageState, removing redundant get_used(None) calls/sorts, and adds a unit test.
docs/superpowers/specs/2026-04-13-rstack-nine-grid-poster-design.md Adds a design spec for a new nine-grid Rstack ecosystem poster.
website/docs/assets/blog/rstack-nine-grid-poster.svg Adds the new nine-grid poster SVG layout referencing local PNG assets.
website/docs/assets/blog/rstack-nine-grid-assets/rsbuild.png Adds Rsbuild image asset used by the poster SVG.
website/docs/assets/blog/rstack-nine-grid-assets/rsdoctor.png Adds Rsdoctor image asset used by the poster SVG.
website/docs/assets/blog/rstack-nine-grid-assets/rslib.png Adds Rslib image asset used by the poster SVG.
website/docs/assets/blog/rstack-nine-grid-assets/rslint.png Adds Rslint image asset used by the poster SVG.
website/docs/assets/blog/rstack-nine-grid-assets/rspack.png Adds Rspack image asset used by the poster SVG.
website/docs/assets/blog/rstack-nine-grid-assets/rspress.png Adds Rspress image asset used by the poster SVG.
website/docs/assets/blog/rstack-nine-grid-assets/rspeedy.png Adds Rspeedy image asset used by the poster SVG.
website/docs/assets/blog/rstack-nine-grid-assets/rstest.png Adds Rstest image asset used by the poster SVG.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread docs/superpowers/specs/2026-04-13-rstack-nine-grid-poster-design.md Outdated
Comment thread docs/superpowers/specs/2026-04-13-rstack-nine-grid-poster-design.md Outdated
@LingyuCoder LingyuCoder force-pushed the refactor/mangle-exports-size-mode-cache branch from fba13d6 to c560bc8 Compare April 13, 2026 11:58
@codspeed-hq
Copy link
Copy Markdown

codspeed-hq Bot commented Apr 13, 2026

Merging this PR will degrade performance by 1.72%

⚡ 1 improved benchmark
❌ 1 regressed benchmark
✅ 32 untouched benchmarks

⚠️ Please fix the performance issues or acknowledge them on CodSpeed.

Performance Changes

Mode Benchmark BASE HEAD Efficiency
Simulation rust@mangle_exports 11.5 ms 11.7 ms -1.72%
Simulation rust@persistent_cache_restore@basic-react-development 26.3 ms 25.6 ms +2.64%

Comparing refactor/mangle-exports-size-mode-cache (a82c37e) with main (4bd8ba2)

Open in CodSpeed

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 13, 2026

📝 Benchmark detail: Open

Name Base (6287368) Current Change
10000_big_production-mode_disable-minimize + exec 14.1 s ± 383 ms 14 s ± 372 ms -0.93 %
10000_development-mode + exec 933 ms ± 9.8 ms 942 ms ± 14 ms +0.92 %
10000_development-mode_hmr + stats 172 ms ± 8.9 ms 169 ms ± 2.2 ms -1.70 %
10000_development-mode_noop-loader + exec 1.95 s ± 80 ms 1.96 s ± 84 ms +0.32 %
10000_production-mode + exec 1.06 s ± 18 ms 1.05 s ± 33 ms -1.47 %
10000_production-mode_persistent-cold + exec 1.22 s ± 27 ms 1.23 s ± 36 ms +0.69 %
10000_production-mode_persistent-hot + exec 911 ms ± 41 ms 899 ms ± 27 ms -1.36 %
10000_production-mode_source-map + exec 1.24 s ± 37 ms 1.22 s ± 20 ms -1.87 %
arco-pro_development-mode + exec 1.31 s ± 70 ms 1.33 s ± 63 ms +1.29 %
arco-pro_development-mode_hmr + stats 37 ms ± 0.94 ms 36 ms ± 0.51 ms -2.33 %
arco-pro_production-mode + exec 2.5 s ± 86 ms 2.49 s ± 64 ms -0.34 %
arco-pro_production-mode_generate-package-json-webpack-plugin + exec 2.51 s ± 101 ms 2.54 s ± 88 ms +1.10 %
arco-pro_production-mode_persistent-cold + exec 2.53 s ± 92 ms 2.53 s ± 122 ms +0.08 %
arco-pro_production-mode_persistent-hot + exec 1.38 s ± 51 ms 1.37 s ± 48 ms -0.67 %
arco-pro_production-mode_source-map + exec 2.92 s ± 55 ms 2.86 s ± 140 ms -1.89 %
arco-pro_production-mode_traverse-chunk-modules + exec 2.53 s ± 139 ms 2.53 s ± 95 ms -0.21 %
bundled-threejs_development-mode + exec 181 ms ± 6.5 ms 179 ms ± 3.6 ms -1.22 %
bundled-threejs_production-mode + exec 213 ms ± 8.5 ms 211 ms ± 8.5 ms -1.03 %
large-dyn-imports_development-mode + exec 1.17 s ± 34 ms 1.2 s ± 56 ms +2.25 %
large-dyn-imports_production-mode + exec 1.28 s ± 32 ms 1.28 s ± 27 ms +0.27 %
threejs_development-mode_10x + exec 828 ms ± 39 ms 827 ms ± 19 ms -0.14 %
threejs_development-mode_10x_hmr + stats 119 ms ± 5.1 ms 118 ms ± 4.7 ms -1.01 %
threejs_production-mode_10x + exec 3.03 s ± 62 ms 3.04 s ± 66 ms +0.38 %
threejs_production-mode_10x_persistent-cold + exec 3.14 s ± 51 ms 3.14 s ± 34 ms +0.06 %
threejs_production-mode_10x_persistent-hot + exec 2.56 s ± 86 ms 2.55 s ± 82 ms -0.22 %
threejs_production-mode_10x_source-map + exec 3.82 s ± 175 ms 3.78 s ± 57 ms -0.83 %
10000_big_production-mode_disable-minimize + rss memory 1959 MiB ± 52.5 MiB 1948 MiB ± 48.5 MiB -0.57 %
10000_development-mode + rss memory 569 MiB ± 8.25 MiB 567 MiB ± 11.6 MiB -0.43 %
10000_development-mode_hmr + rss memory 808 MiB ± 21.1 MiB 804 MiB ± 31.4 MiB -0.53 %
10000_development-mode_noop-loader + rss memory 860 MiB ± 13.8 MiB 867 MiB ± 13.7 MiB +0.78 %
10000_production-mode + rss memory 510 MiB ± 18.7 MiB 506 MiB ± 15 MiB -0.80 %
10000_production-mode_persistent-cold + rss memory 689 MiB ± 5.96 MiB 687 MiB ± 4.81 MiB -0.28 %
10000_production-mode_persistent-hot + rss memory 666 MiB ± 10.4 MiB 662 MiB ± 16.9 MiB -0.58 %
10000_production-mode_source-map + rss memory 531 MiB ± 12 MiB 531 MiB ± 5.25 MiB -0.09 %
arco-pro_development-mode + rss memory 471 MiB ± 7.91 MiB 471 MiB ± 6.31 MiB -0.12 %
arco-pro_development-mode_hmr + rss memory 487 MiB ± 10.1 MiB 488 MiB ± 4.76 MiB +0.16 %
arco-pro_production-mode + rss memory 649 MiB ± 5.15 MiB 641 MiB ± 51.1 MiB -1.23 %
arco-pro_production-mode_generate-package-json-webpack-plugin + rss memory 656 MiB ± 41.2 MiB 662 MiB ± 18 MiB +0.93 %
arco-pro_production-mode_persistent-cold + rss memory 724 MiB ± 9.23 MiB 712 MiB ± 19.1 MiB -1.62 %
arco-pro_production-mode_persistent-hot + rss memory 526 MiB ± 21 MiB 528 MiB ± 31.8 MiB +0.42 %
arco-pro_production-mode_source-map + rss memory 751 MiB ± 8.91 MiB 740 MiB ± 20.4 MiB -1.53 %
arco-pro_production-mode_traverse-chunk-modules + rss memory 652 MiB ± 13.1 MiB 648 MiB ± 8.17 MiB -0.61 %
bundled-threejs_development-mode + rss memory 157 MiB ± 14.9 MiB 162 MiB ± 8.59 MiB +3.04 %
bundled-threejs_production-mode + rss memory 181 MiB ± 11.5 MiB 183 MiB ± 5.22 MiB +0.71 %
large-dyn-imports_development-mode + rss memory 563 MiB ± 17.1 MiB 562 MiB ± 20.6 MiB -0.11 %
large-dyn-imports_production-mode + rss memory 442 MiB ± 8.79 MiB 443 MiB ± 6.8 MiB +0.05 %
threejs_development-mode_10x + rss memory 523 MiB ± 12.9 MiB 517 MiB ± 13.9 MiB -1.00 %
threejs_development-mode_10x_hmr + rss memory 664 MiB ± 11.9 MiB 661 MiB ± 20.4 MiB -0.39 %
threejs_production-mode_10x + rss memory 686 MiB ± 9.09 MiB 682 MiB ± 7.76 MiB -0.63 %
threejs_production-mode_10x_persistent-cold + rss memory 806 MiB ± 15.3 MiB 796 MiB ± 17.5 MiB -1.27 %
threejs_production-mode_10x_persistent-hot + rss memory 579 MiB ± 4.98 MiB 574 MiB ± 12 MiB -0.89 %
threejs_production-mode_10x_source-map + rss memory 800 MiB ± 25.8 MiB 800 MiB ± 5.53 MiB -0.06 %

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 13, 2026

Rsdoctor Bundle Diff Analysis

Found 6 projects in monorepo, 0 projects with changes.

📊 Quick Summary
Project Total Size Change
popular-libs 1.7 MB 0
react-10k 5.7 MB 0
react-1k 826.1 KB 0
react-5k 2.7 MB 0
rome 984.1 KB 0
ui-components 5.0 MB 0

Generated by Rsdoctor GitHub Action

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 13, 2026

📦 Binary Size-limit

Comparing a82c37e to fix: render numeric chunk IDs as number literals (#13604) by Fy

🎉 Size decreased by 813.84KB from 49.39MB to 48.60MB (⬇️1.61%)

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 13, 2026

📝 Benchmark detail: Open

Name Base (6287368) Current Change
10000_big_production-mode_disable-minimize + exec 14.1 s ± 383 ms 14 s ± 360 ms -0.74 %
10000_development-mode + exec 933 ms ± 9.8 ms 940 ms ± 36 ms +0.66 %
10000_development-mode_hmr + stats 172 ms ± 8.9 ms 171 ms ± 5.8 ms -0.94 %
10000_development-mode_noop-loader + exec 1.95 s ± 80 ms 1.91 s ± 58 ms -2.28 %
10000_production-mode + exec 1.06 s ± 18 ms 1.05 s ± 27 ms -1.28 %
10000_production-mode_persistent-cold + exec 1.22 s ± 27 ms 1.22 s ± 29 ms -0.28 %
10000_production-mode_persistent-hot + exec 911 ms ± 41 ms 901 ms ± 23 ms -1.10 %
10000_production-mode_source-map + exec 1.24 s ± 37 ms 1.22 s ± 24 ms -1.92 %
arco-pro_development-mode + exec 1.31 s ± 70 ms 1.32 s ± 68 ms +0.53 %
arco-pro_development-mode_hmr + stats 37 ms ± 0.94 ms 36 ms ± 0.62 ms -2.73 %
arco-pro_production-mode + exec 2.5 s ± 86 ms 2.41 s ± 92 ms -3.61 %
arco-pro_production-mode_generate-package-json-webpack-plugin + exec 2.51 s ± 101 ms 2.53 s ± 96 ms +0.77 %
arco-pro_production-mode_persistent-cold + exec 2.53 s ± 92 ms 2.53 s ± 129 ms +0.01 %
arco-pro_production-mode_persistent-hot + exec 1.38 s ± 51 ms 1.34 s ± 38 ms -3.06 %
arco-pro_production-mode_source-map + exec 2.92 s ± 55 ms 2.87 s ± 87 ms -1.69 %
arco-pro_production-mode_traverse-chunk-modules + exec 2.53 s ± 139 ms 2.47 s ± 98 ms -2.28 %
bundled-threejs_development-mode + exec 181 ms ± 6.5 ms 178 ms ± 4 ms -1.77 %
bundled-threejs_production-mode + exec 213 ms ± 8.5 ms 208 ms ± 9.9 ms -2.62 %
large-dyn-imports_development-mode + exec 1.17 s ± 34 ms 1.17 s ± 31 ms -0.14 %
large-dyn-imports_production-mode + exec 1.28 s ± 32 ms 1.27 s ± 40 ms -0.86 %
threejs_development-mode_10x + exec 828 ms ± 39 ms 822 ms ± 54 ms -0.65 %
threejs_development-mode_10x_hmr + stats 119 ms ± 5.1 ms 116 ms ± 4.1 ms -2.57 %
threejs_production-mode_10x + exec 3.03 s ± 62 ms 3 s ± 98 ms -1.04 %
threejs_production-mode_10x_persistent-cold + exec 3.14 s ± 51 ms 3.12 s ± 127 ms -0.55 %
threejs_production-mode_10x_persistent-hot + exec 2.56 s ± 86 ms 2.5 s ± 23 ms -2.36 %
threejs_production-mode_10x_source-map + exec 3.82 s ± 175 ms 3.75 s ± 43 ms -1.80 %
10000_big_production-mode_disable-minimize + rss memory 1959 MiB ± 52.5 MiB 1952 MiB ± 14.7 MiB -0.37 %
10000_development-mode + rss memory 569 MiB ± 8.25 MiB 574 MiB ± 15.5 MiB +0.85 %
10000_development-mode_hmr + rss memory 808 MiB ± 21.1 MiB 792 MiB ± 48.3 MiB -2.03 %
10000_development-mode_noop-loader + rss memory 860 MiB ± 13.8 MiB 864 MiB ± 17.1 MiB +0.51 %
10000_production-mode + rss memory 510 MiB ± 18.7 MiB 506 MiB ± 12.1 MiB -0.77 %
10000_production-mode_persistent-cold + rss memory 689 MiB ± 5.96 MiB 686 MiB ± 11.8 MiB -0.53 %
10000_production-mode_persistent-hot + rss memory 666 MiB ± 10.4 MiB 671 MiB ± 11.3 MiB +0.76 %
10000_production-mode_source-map + rss memory 531 MiB ± 12 MiB 534 MiB ± 16.1 MiB +0.50 %
arco-pro_development-mode + rss memory 471 MiB ± 7.91 MiB 474 MiB ± 10.6 MiB +0.61 %
arco-pro_development-mode_hmr + rss memory 487 MiB ± 10.1 MiB 489 MiB ± 14.2 MiB +0.46 %
arco-pro_production-mode + rss memory 649 MiB ± 5.15 MiB 653 MiB ± 17.6 MiB +0.63 %
arco-pro_production-mode_generate-package-json-webpack-plugin + rss memory 656 MiB ± 41.2 MiB 662 MiB ± 48.5 MiB +0.91 %
arco-pro_production-mode_persistent-cold + rss memory 724 MiB ± 9.23 MiB 723 MiB ± 11.2 MiB -0.14 %
arco-pro_production-mode_persistent-hot + rss memory 526 MiB ± 21 MiB 531 MiB ± 15.5 MiB +0.84 %
arco-pro_production-mode_source-map + rss memory 751 MiB ± 8.91 MiB 748 MiB ± 30.8 MiB -0.42 %
arco-pro_production-mode_traverse-chunk-modules + rss memory 652 MiB ± 13.1 MiB 656 MiB ± 11.7 MiB +0.69 %
bundled-threejs_development-mode + rss memory 157 MiB ± 14.9 MiB 160 MiB ± 6.22 MiB +1.30 %
bundled-threejs_production-mode + rss memory 181 MiB ± 11.5 MiB 181 MiB ± 5.64 MiB -0.44 %
large-dyn-imports_development-mode + rss memory 563 MiB ± 17.1 MiB 580 MiB ± 7.89 MiB +3.09 %
large-dyn-imports_production-mode + rss memory 442 MiB ± 8.79 MiB 450 MiB ± 13 MiB +1.64 %
threejs_development-mode_10x + rss memory 523 MiB ± 12.9 MiB 530 MiB ± 10 MiB +1.48 %
threejs_development-mode_10x_hmr + rss memory 664 MiB ± 11.9 MiB 672 MiB ± 17.8 MiB +1.23 %
threejs_production-mode_10x + rss memory 686 MiB ± 9.09 MiB 693 MiB ± 11.5 MiB +1.08 %
threejs_production-mode_10x_persistent-cold + rss memory 806 MiB ± 15.3 MiB 812 MiB ± 8.8 MiB +0.77 %
threejs_production-mode_10x_persistent-hot + rss memory 579 MiB ± 4.98 MiB 586 MiB ± 4.74 MiB +1.09 %
threejs_production-mode_10x_source-map + rss memory 800 MiB ± 25.8 MiB 805 MiB ± 26 MiB +0.54 %

@LingyuCoder LingyuCoder force-pushed the refactor/mangle-exports-size-mode-cache branch from 450d4cf to 26d3634 Compare April 14, 2026 06:00
@LingyuCoder LingyuCoder force-pushed the refactor/mangle-exports-size-mode-cache branch from 26d3634 to a82c37e Compare April 16, 2026 09:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

release: refactor team The issue/pr is created by the member of Rspack.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants