Skip to content

Conversation

@ahabhgk
Copy link
Contributor

@ahabhgk ahabhgk commented Oct 21, 2025

Summary

We can record the has_imported_by_defer at make, and avoid iterate on incoming connections

Related links

Checklist

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

Copilot AI review requested due to automatic review settings October 21, 2025 08:38
@netlify
Copy link

netlify bot commented Oct 21, 2025

Deploy Preview for rspack canceled.

Name Link
🔨 Latest commit ebf565b
🔍 Latest deploy log https://app.netlify.com/projects/rspack/deploys/68f762241c2c320008208bdb

@github-actions github-actions bot added release: bug fix release: bug related release(mr only) team The issue/pr is created by the member of Rspack. labels Oct 21, 2025
Copy link
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 PR addresses a performance regression by caching the has_imported_by_defer flag in the module's build metadata instead of iterating through incoming connections on every call to is_deferred. The optimization moves the computation from query-time to build-time.

  • Adds a new has_imported_by_defer field to BuildMeta to cache deferred import status
  • Updates is_deferred method to use the cached flag instead of iterating connections
  • Computes and sets the flag during module graph updates in the AddTask

Reviewed Changes

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

File Description
crates/rspack_core/src/module_graph/mod.rs Simplifies is_deferred to use cached flag and removes DependencyType import
crates/rspack_core/src/module.rs Adds has_imported_by_defer field to BuildMeta struct
crates/rspack_core/src/compilation/make/graph_updater/repair/add.rs Computes and sets has_imported_by_defer during module resolution
crates/rspack_binding_api/src/module.rs Updates JS binding to include new has_imported_by_defer field

Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.

@github-actions
Copy link
Contributor

github-actions bot commented Oct 21, 2025

📝 Benchmark detail: Open

Name Base (2025-10-21 f40845e) Current Change
10000_big_production-mode_disable-minimize + exec 57.2 s ± 1.64 s 27.5 s ± 871 ms -52.02 %
10000_development-mode + exec 1.32 s ± 28 ms 1.27 s ± 28 ms -3.72 %
10000_development-mode_hmr + exec 642 ms ± 11 ms 639 ms ± 4.9 ms -0.51 %
10000_development-mode_noop-loader + exec 2.25 s ± 113 ms 2.22 s ± 36 ms -1.41 %
10000_production-mode + exec 30.4 s ± 381 ms 1.38 s ± 144 ms -95.46 %
10000_production-mode_persistent-cold + exec 30.5 s ± 720 ms 1.5 s ± 26 ms -95.08 %
10000_production-mode_persistent-hot + exec 30.3 s ± 813 ms 1.07 s ± 24 ms -96.47 %
arco-pro_development-mode + exec 1.61 s ± 53 ms 1.6 s ± 68 ms -0.42 %
arco-pro_development-mode_hmr + exec 359 ms ± 0.82 ms 359 ms ± 1.4 ms -0.17 %
arco-pro_production-mode + exec 3.06 s ± 143 ms 2.91 s ± 85 ms -4.86 %
arco-pro_production-mode_generate-package-json-webpack-plugin + exec 3.19 s ± 188 ms 2.96 s ± 107 ms -7.22 %
arco-pro_production-mode_persistent-cold + exec 3.13 s ± 104 ms 2.98 s ± 93 ms -4.72 %
arco-pro_production-mode_persistent-hot + exec 1.82 s ± 80 ms 1.69 s ± 75 ms -7.21 %
arco-pro_production-mode_traverse-chunk-modules + exec 3.12 s ± 109 ms 2.92 s ± 37 ms -6.50 %
large-dyn-imports_development-mode + exec 1.59 s ± 58 ms 1.58 s ± 40 ms -1.10 %
large-dyn-imports_production-mode + exec 5.79 s ± 164 ms 1.59 s ± 34 ms -72.55 %
threejs_development-mode_10x + exec 1.33 s ± 35 ms 1.3 s ± 51 ms -2.45 %
threejs_development-mode_10x_hmr + exec 907 ms ± 20 ms 909 ms ± 27 ms +0.31 %
threejs_production-mode_10x + exec 4.12 s ± 225 ms 4.11 s ± 258 ms -0.20 %
threejs_production-mode_10x_persistent-cold + exec 4.26 s ± 216 ms 4.25 s ± 334 ms -0.20 %
threejs_production-mode_10x_persistent-hot + exec 3.75 s ± 144 ms 3.7 s ± 28 ms -1.23 %
10000_big_production-mode_disable-minimize + rss memory 8664 MiB ± 360 MiB 8792 MiB ± 291 MiB +1.47 %
10000_development-mode + rss memory 651 MiB ± 25.1 MiB 662 MiB ± 13.2 MiB +1.66 %
10000_development-mode_hmr + rss memory 808 MiB ± 23.9 MiB 812 MiB ± 23.2 MiB +0.44 %
10000_development-mode_noop-loader + rss memory 946 MiB ± 34.4 MiB 955 MiB ± 28.2 MiB +0.97 %
10000_production-mode + rss memory 672 MiB ± 36.9 MiB 661 MiB ± 14.2 MiB -1.65 %
10000_production-mode_persistent-cold + rss memory 749 MiB ± 31.8 MiB 761 MiB ± 40.9 MiB +1.68 %
10000_production-mode_persistent-hot + rss memory 758 MiB ± 40.2 MiB 734 MiB ± 71.3 MiB -3.18 %
arco-pro_development-mode + rss memory 538 MiB ± 44 MiB 552 MiB ± 47.7 MiB +2.74 %
arco-pro_development-mode_hmr + rss memory 433 MiB ± 14.6 MiB 446 MiB ± 22.5 MiB +3.15 %
arco-pro_production-mode + rss memory 671 MiB ± 67.8 MiB 678 MiB ± 70.5 MiB +1.02 %
arco-pro_production-mode_generate-package-json-webpack-plugin + rss memory 666 MiB ± 104 MiB 679 MiB ± 59.4 MiB +1.93 %
arco-pro_production-mode_persistent-cold + rss memory 741 MiB ± 67.8 MiB 773 MiB ± 92.6 MiB +4.32 %
arco-pro_production-mode_persistent-hot + rss memory 564 MiB ± 68.1 MiB 584 MiB ± 64.9 MiB +3.69 %
arco-pro_production-mode_traverse-chunk-modules + rss memory 684 MiB ± 66.1 MiB 672 MiB ± 43.7 MiB -1.65 %
large-dyn-imports_development-mode + rss memory 696 MiB ± 12.6 MiB 700 MiB ± 8.34 MiB +0.63 %
large-dyn-imports_production-mode + rss memory 625 MiB ± 3.63 MiB 627 MiB ± 8.18 MiB +0.30 %
threejs_development-mode_10x + rss memory 575 MiB ± 30.8 MiB 584 MiB ± 21.4 MiB +1.44 %
threejs_development-mode_10x_hmr + rss memory 806 MiB ± 31.9 MiB 799 MiB ± 43.3 MiB -0.93 %
threejs_production-mode_10x + rss memory 816 MiB ± 192 MiB 808 MiB ± 208 MiB -0.95 %
threejs_production-mode_10x_persistent-cold + rss memory 835 MiB ± 29.5 MiB 832 MiB ± 48.4 MiB -0.39 %
threejs_production-mode_10x_persistent-hot + rss memory 691 MiB ± 50 MiB 674 MiB ± 29.5 MiB -2.40 %

@ahabhgk ahabhgk enabled auto-merge (squash) October 21, 2025 08:42
JSerFeng
JSerFeng previously approved these changes Oct 21, 2025
@github-actions
Copy link
Contributor

github-actions bot commented Oct 21, 2025

📦 Binary Size-limit

Comparing ebf565b to refactor: consolidate ModuleError and ModuleWarning classes (#11935) by neverland

❌ Size increased by 1.75KB from 47.73MB to 47.73MB (⬆️0.00%)

@codspeed-hq
Copy link

codspeed-hq bot commented Oct 21, 2025

CodSpeed Performance Report

Merging #11944 will not alter performance

Comparing fix-perf-is-deferred (ebf565b) with main (126822e)

Summary

✅ 17 untouched

@github-actions
Copy link
Contributor

github-actions bot commented Oct 21, 2025

📝 Benchmark detail: Open

Name Base (2025-10-21 f40845e) Current Change
10000_big_production-mode_disable-minimize + exec 57.2 s ± 1.64 s 27.3 s ± 946 ms -52.23 %
10000_development-mode + exec 1.32 s ± 28 ms 1.28 s ± 19 ms -3.04 %
10000_development-mode_hmr + exec 642 ms ± 11 ms 639 ms ± 7.8 ms -0.43 %
10000_development-mode_noop-loader + exec 2.25 s ± 113 ms 2.24 s ± 105 ms -0.51 %
10000_production-mode + exec 30.4 s ± 381 ms 1.39 s ± 42 ms -95.44 %
10000_production-mode_persistent-cold + exec 30.5 s ± 720 ms 1.51 s ± 40 ms -95.03 %
10000_production-mode_persistent-hot + exec 30.3 s ± 813 ms 1.07 s ± 31 ms -96.48 %
arco-pro_development-mode + exec 1.61 s ± 53 ms 1.56 s ± 60 ms -3.04 %
arco-pro_development-mode_hmr + exec 359 ms ± 0.82 ms 360 ms ± 1.5 ms +0.11 %
arco-pro_production-mode + exec 3.06 s ± 143 ms 2.92 s ± 105 ms -4.52 %
arco-pro_production-mode_generate-package-json-webpack-plugin + exec 3.19 s ± 188 ms 2.94 s ± 99 ms -7.62 %
arco-pro_production-mode_persistent-cold + exec 3.13 s ± 104 ms 2.99 s ± 138 ms -4.32 %
arco-pro_production-mode_persistent-hot + exec 1.82 s ± 80 ms 1.67 s ± 34 ms -8.53 %
arco-pro_production-mode_traverse-chunk-modules + exec 3.12 s ± 109 ms 2.95 s ± 109 ms -5.42 %
large-dyn-imports_development-mode + exec 1.59 s ± 58 ms 1.61 s ± 182 ms +1.26 %
large-dyn-imports_production-mode + exec 5.79 s ± 164 ms 1.62 s ± 24 ms -72.00 %
threejs_development-mode_10x + exec 1.33 s ± 35 ms 1.3 s ± 22 ms -2.04 %
threejs_development-mode_10x_hmr + exec 907 ms ± 20 ms 904 ms ± 20 ms -0.26 %
threejs_production-mode_10x + exec 4.12 s ± 225 ms 4.08 s ± 56 ms -0.90 %
threejs_production-mode_10x_persistent-cold + exec 4.26 s ± 216 ms 4.21 s ± 110 ms -1.22 %
threejs_production-mode_10x_persistent-hot + exec 3.75 s ± 144 ms 3.72 s ± 26 ms -0.79 %
10000_big_production-mode_disable-minimize + rss memory 8664 MiB ± 360 MiB 8849 MiB ± 306 MiB +2.14 %
10000_development-mode + rss memory 651 MiB ± 25.1 MiB 655 MiB ± 18.2 MiB +0.65 %
10000_development-mode_hmr + rss memory 808 MiB ± 23.9 MiB 812 MiB ± 14.5 MiB +0.49 %
10000_development-mode_noop-loader + rss memory 946 MiB ± 34.4 MiB 947 MiB ± 39.8 MiB +0.09 %
10000_production-mode + rss memory 672 MiB ± 36.9 MiB 670 MiB ± 48.9 MiB -0.41 %
10000_production-mode_persistent-cold + rss memory 749 MiB ± 31.8 MiB 747 MiB ± 32.8 MiB -0.19 %
10000_production-mode_persistent-hot + rss memory 758 MiB ± 40.2 MiB 738 MiB ± 26.8 MiB -2.75 %
arco-pro_development-mode + rss memory 538 MiB ± 44 MiB 542 MiB ± 46.3 MiB +0.92 %
arco-pro_development-mode_hmr + rss memory 433 MiB ± 14.6 MiB 434 MiB ± 14.2 MiB +0.36 %
arco-pro_production-mode + rss memory 671 MiB ± 67.8 MiB 680 MiB ± 97.7 MiB +1.34 %
arco-pro_production-mode_generate-package-json-webpack-plugin + rss memory 666 MiB ± 104 MiB 682 MiB ± 38.4 MiB +2.34 %
arco-pro_production-mode_persistent-cold + rss memory 741 MiB ± 67.8 MiB 737 MiB ± 68.2 MiB -0.55 %
arco-pro_production-mode_persistent-hot + rss memory 564 MiB ± 68.1 MiB 552 MiB ± 77.5 MiB -2.04 %
arco-pro_production-mode_traverse-chunk-modules + rss memory 684 MiB ± 66.1 MiB 645 MiB ± 71.9 MiB -5.69 %
large-dyn-imports_development-mode + rss memory 696 MiB ± 12.6 MiB 688 MiB ± 9.84 MiB -1.05 %
large-dyn-imports_production-mode + rss memory 625 MiB ± 3.63 MiB 617 MiB ± 4.98 MiB -1.18 %
threejs_development-mode_10x + rss memory 575 MiB ± 30.8 MiB 577 MiB ± 19.2 MiB +0.34 %
threejs_development-mode_10x_hmr + rss memory 806 MiB ± 31.9 MiB 794 MiB ± 8.07 MiB -1.56 %
threejs_production-mode_10x + rss memory 816 MiB ± 192 MiB 778 MiB ± 205 MiB -4.65 %
threejs_production-mode_10x_persistent-cold + rss memory 835 MiB ± 29.5 MiB 850 MiB ± 19.7 MiB +1.84 %
threejs_production-mode_10x_persistent-hot + rss memory 691 MiB ± 50 MiB 682 MiB ± 17.2 MiB -1.32 %

@ahabhgk ahabhgk enabled auto-merge (squash) October 21, 2025 10:13
@ahabhgk ahabhgk merged commit 0ddda2c into main Oct 22, 2025
48 checks passed
@ahabhgk ahabhgk deleted the fix-perf-is-deferred branch October 22, 2025 02:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

release: bug fix release: bug related release(mr only) team The issue/pr is created by the member of Rspack.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants