Skip to content

revert: "revert: perf: napi communication (#11132) (#11162)" #11166

Merged
SyMind merged 3 commits intomainfrom
try-fix-perf-bug
Jul 25, 2025
Merged

revert: "revert: perf: napi communication (#11132) (#11162)" #11166
SyMind merged 3 commits intomainfrom
try-fix-perf-bug

Conversation

@SyMind
Copy link
Member

@SyMind SyMind commented Jul 24, 2025

Summary

Performance degradation observed when switching from FxHashMap to UkeyMap.

The efficiency loss stems from the tag-based SIMD optimization failure in hashbrown's lookup mechanism.

References:

hashbrown/src/raw/mod.rs at master · rust-lang/hashbrown
hashbrown/src/control/tag.rs at master · rust-lang/hashbrown
hashbrown/src/control/group/generic.rs at master · rust-lang/hashbrown

Related links

Checklist

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

@netlify
Copy link

netlify bot commented Jul 24, 2025

Deploy Preview for rspack canceled.

Name Link
🔨 Latest commit 8dc2e34
🔍 Latest deploy log https://app.netlify.com/projects/rspack/deploys/6882f112dd4b870008ff2192

@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 Jul 24, 2025
@github-actions
Copy link
Contributor

github-actions bot commented Jul 24, 2025

📝 Benchmark detail: Open

Name Base (2025-07-24 ea8059e) Current Change
10000_big_production-mode_disable-minimize + exec 30.4 s ± 1.03 s 31.1 s ± 1.19 s +2.23 %
10000_development-mode + exec 1.77 s ± 121 ms 1.76 s ± 33 ms -0.46 %
10000_development-mode_hmr + exec 693 ms ± 19 ms 695 ms ± 20 ms +0.32 %
10000_production-mode + exec 1.82 s ± 47 ms 1.9 s ± 152 ms +4.42 %
10000_production-mode_persistent-cold + exec 1.95 s ± 12 ms 2 s ± 38 ms +2.09 %
10000_production-mode_persistent-hot + exec 1.42 s ± 72 ms 1.46 s ± 30 ms +2.50 %
arco-pro_development-mode + exec 1.78 s ± 126 ms 1.8 s ± 134 ms +1.35 %
arco-pro_development-mode_hmr + exec 368 ms ± 1.3 ms 365 ms ± 1 ms -0.88 %
arco-pro_production-mode + exec 3.29 s ± 146 ms 3.36 s ± 135 ms +2.11 %
arco-pro_production-mode_generate-package-json-webpack-plugin + exec 3.34 s ± 65 ms 3.42 s ± 200 ms +2.26 %
arco-pro_production-mode_persistent-cold + exec 3.37 s ± 127 ms 3.4 s ± 124 ms +0.85 %
arco-pro_production-mode_persistent-hot + exec 2.09 s ± 95 ms 2.15 s ± 277 ms +3.23 %
arco-pro_production-mode_traverse-chunk-modules + exec 3.28 s ± 72 ms 3.35 s ± 168 ms +1.87 %
large-dyn-imports_development-mode + exec 1.95 s ± 47 ms 2 s ± 38 ms +2.43 %
large-dyn-imports_production-mode + exec 2.02 s ± 45 ms 2.08 s ± 121 ms +2.94 %
threejs_development-mode_10x + exec 1.52 s ± 24 ms 1.53 s ± 25 ms +0.51 %
threejs_development-mode_10x_hmr + exec 920 ms ± 6.6 ms 917 ms ± 11 ms -0.40 %
threejs_production-mode_10x + exec 4.61 s ± 175 ms 4.72 s ± 221 ms +2.36 %
threejs_production-mode_10x_persistent-cold + exec 4.75 s ± 162 ms 4.86 s ± 312 ms +2.49 %
threejs_production-mode_10x_persistent-hot + exec 4.17 s ± 55 ms 4.24 s ± 15 ms +1.59 %
10000_big_production-mode_disable-minimize + rss memory 9738 MiB ± 417 MiB 9585 MiB ± 266 MiB -1.57 %
10000_development-mode + rss memory 684 MiB ± 12 MiB 682 MiB ± 13.5 MiB -0.26 %
10000_development-mode_hmr + rss memory 832 MiB ± 42.7 MiB 817 MiB ± 37.3 MiB -1.82 %
10000_production-mode + rss memory 651 MiB ± 31.2 MiB 632 MiB ± 47.1 MiB -2.87 %
10000_production-mode_persistent-cold + rss memory 757 MiB ± 30.5 MiB 742 MiB ± 16.6 MiB -1.92 %
10000_production-mode_persistent-hot + rss memory 736 MiB ± 19.7 MiB 720 MiB ± 7.68 MiB -2.13 %
arco-pro_development-mode + rss memory 621 MiB ± 69.9 MiB 590 MiB ± 38.2 MiB -4.93 %
arco-pro_development-mode_hmr + rss memory 526 MiB ± 35 MiB 481 MiB ± 44.1 MiB -8.52 %
arco-pro_production-mode + rss memory 709 MiB ± 59.1 MiB 697 MiB ± 57.2 MiB -1.63 %
arco-pro_production-mode_generate-package-json-webpack-plugin + rss memory 704 MiB ± 90.9 MiB 699 MiB ± 59 MiB -0.78 %
arco-pro_production-mode_persistent-cold + rss memory 819 MiB ± 56.1 MiB 812 MiB ± 77 MiB -0.85 %
arco-pro_production-mode_persistent-hot + rss memory 656 MiB ± 58.4 MiB 652 MiB ± 28.8 MiB -0.66 %
arco-pro_production-mode_traverse-chunk-modules + rss memory 713 MiB ± 44.5 MiB 676 MiB ± 67.3 MiB -5.18 %
large-dyn-imports_development-mode + rss memory 707 MiB ± 9.02 MiB 691 MiB ± 3.19 MiB -2.37 %
large-dyn-imports_production-mode + rss memory 637 MiB ± 11.6 MiB 618 MiB ± 5.99 MiB -3.00 %
threejs_development-mode_10x + rss memory 622 MiB ± 15.7 MiB 599 MiB ± 15.1 MiB -3.63 %
threejs_development-mode_10x_hmr + rss memory 831 MiB ± 65.9 MiB 814 MiB ± 36.9 MiB -2.04 %
threejs_production-mode_10x + rss memory 819 MiB ± 205 MiB 808 MiB ± 180 MiB -1.34 %
threejs_production-mode_10x_persistent-cold + rss memory 835 MiB ± 20.2 MiB 818 MiB ± 11.1 MiB -2.06 %
threejs_production-mode_10x_persistent-hot + rss memory 713 MiB ± 27 MiB 700 MiB ± 34.6 MiB -1.88 %

@github-actions
Copy link
Contributor

github-actions bot commented Jul 24, 2025

📦 Binary Size-limit

Comparing 8dc2e34 to chore: check lint warning in ci (#11167) by hardfist

🎉 Size decreased by 7.00KB from 49.04MB to 49.03MB (⬇️0.01%)

@codspeed-hq
Copy link

codspeed-hq bot commented Jul 24, 2025

CodSpeed Performance Report

Merging #11166 will not alter performance

Comparing try-fix-perf-bug (8dc2e34) with main (2dd8bd8)

Summary

✅ 16 untouched benchmarks

@SyMind SyMind force-pushed the try-fix-perf-bug branch from e71da16 to 97f02eb Compare July 24, 2025 13:31
@github-actions
Copy link
Contributor

github-actions bot commented Jul 24, 2025

📝 Benchmark detail: Open

Name Base (2025-07-24 ea8059e) Current Change
10000_big_production-mode_disable-minimize + exec 30.4 s ± 1.03 s 30.9 s ± 1.02 s +1.77 %
10000_development-mode + exec 1.77 s ± 121 ms 1.77 s ± 27 ms -0.35 %
10000_development-mode_hmr + exec 693 ms ± 19 ms 696 ms ± 32 ms +0.53 %
10000_production-mode + exec 1.82 s ± 47 ms 1.87 s ± 34 ms +2.78 %
10000_production-mode_persistent-cold + exec 1.95 s ± 12 ms 2.02 s ± 34 ms +3.41 %
10000_production-mode_persistent-hot + exec 1.42 s ± 72 ms 1.53 s ± 88 ms +7.64 %
arco-pro_development-mode + exec 1.78 s ± 126 ms 1.8 s ± 80 ms +1.26 %
arco-pro_development-mode_hmr + exec 368 ms ± 1.3 ms 368 ms ± 6.6 ms -0.18 %
arco-pro_production-mode + exec 3.29 s ± 146 ms 3.33 s ± 130 ms +1.23 %
arco-pro_production-mode_generate-package-json-webpack-plugin + exec 3.34 s ± 65 ms 3.4 s ± 33 ms +1.89 %
arco-pro_production-mode_persistent-cold + exec 3.37 s ± 127 ms 3.43 s ± 128 ms +1.68 %
arco-pro_production-mode_persistent-hot + exec 2.09 s ± 95 ms 2.11 s ± 73 ms +1.20 %
arco-pro_production-mode_traverse-chunk-modules + exec 3.28 s ± 72 ms 3.42 s ± 95 ms +4.26 %
large-dyn-imports_development-mode + exec 1.95 s ± 47 ms 1.98 s ± 45 ms +1.43 %
large-dyn-imports_production-mode + exec 2.02 s ± 45 ms 2.21 s ± 33 ms +9.73 %
threejs_development-mode_10x + exec 1.52 s ± 24 ms 1.53 s ± 12 ms +0.54 %
threejs_development-mode_10x_hmr + exec 920 ms ± 6.6 ms 908 ms ± 23 ms -1.29 %
threejs_production-mode_10x + exec 4.61 s ± 175 ms 4.66 s ± 75 ms +1.00 %
threejs_production-mode_10x_persistent-cold + exec 4.75 s ± 162 ms 4.85 s ± 361 ms +2.22 %
threejs_production-mode_10x_persistent-hot + exec 4.17 s ± 55 ms 4.31 s ± 306 ms +3.49 %
10000_big_production-mode_disable-minimize + rss memory 9738 MiB ± 417 MiB 9605 MiB ± 51.6 MiB -1.37 %
10000_development-mode + rss memory 684 MiB ± 12 MiB 680 MiB ± 24.3 MiB -0.51 %
10000_development-mode_hmr + rss memory 832 MiB ± 42.7 MiB 826 MiB ± 33.5 MiB -0.73 %
10000_production-mode + rss memory 651 MiB ± 31.2 MiB 651 MiB ± 10.6 MiB +0.07 %
10000_production-mode_persistent-cold + rss memory 757 MiB ± 30.5 MiB 774 MiB ± 44.6 MiB +2.25 %
10000_production-mode_persistent-hot + rss memory 736 MiB ± 19.7 MiB 749 MiB ± 48.7 MiB +1.79 %
arco-pro_development-mode + rss memory 621 MiB ± 69.9 MiB 581 MiB ± 52.7 MiB -6.43 %
arco-pro_development-mode_hmr + rss memory 526 MiB ± 35 MiB 474 MiB ± 3.51 MiB -9.99 %
arco-pro_production-mode + rss memory 709 MiB ± 59.1 MiB 691 MiB ± 57.8 MiB -2.58 %
arco-pro_production-mode_generate-package-json-webpack-plugin + rss memory 704 MiB ± 90.9 MiB 685 MiB ± 72.3 MiB -2.69 %
arco-pro_production-mode_persistent-cold + rss memory 819 MiB ± 56.1 MiB 771 MiB ± 51.9 MiB -5.90 %
arco-pro_production-mode_persistent-hot + rss memory 656 MiB ± 58.4 MiB 667 MiB ± 69.1 MiB +1.62 %
arco-pro_production-mode_traverse-chunk-modules + rss memory 713 MiB ± 44.5 MiB 724 MiB ± 55.1 MiB +1.61 %
large-dyn-imports_development-mode + rss memory 707 MiB ± 9.02 MiB 691 MiB ± 5.38 MiB -2.35 %
large-dyn-imports_production-mode + rss memory 637 MiB ± 11.6 MiB 614 MiB ± 7.53 MiB -3.65 %
threejs_development-mode_10x + rss memory 622 MiB ± 15.7 MiB 600 MiB ± 6.57 MiB -3.46 %
threejs_development-mode_10x_hmr + rss memory 831 MiB ± 65.9 MiB 814 MiB ± 69.8 MiB -2.01 %
threejs_production-mode_10x + rss memory 819 MiB ± 205 MiB 814 MiB ± 213 MiB -0.64 %
threejs_production-mode_10x_persistent-cold + rss memory 835 MiB ± 20.2 MiB 823 MiB ± 19.6 MiB -1.46 %
threejs_production-mode_10x_persistent-hot + rss memory 713 MiB ± 27 MiB 693 MiB ± 35.8 MiB -2.82 %

Threshold exceeded: ["10000_production-mode_persistent-hot + exec","large-dyn-imports_production-mode + exec"]

@SyMind SyMind force-pushed the try-fix-perf-bug branch from 97f02eb to 80a115c Compare July 24, 2025 14:02
@github-actions
Copy link
Contributor

github-actions bot commented Jul 24, 2025

📝 Benchmark detail: Open

Name Base (2025-07-24 ea8059e) Current Change
10000_big_production-mode_disable-minimize + exec 30.4 s ± 1.03 s 31.2 s ± 1.06 s +2.49 %
10000_development-mode + exec 1.77 s ± 121 ms 1.77 s ± 36 ms -0.27 %
10000_development-mode_hmr + exec 693 ms ± 19 ms 688 ms ± 24 ms -0.66 %
10000_production-mode + exec 1.82 s ± 47 ms 1.86 s ± 40 ms +2.35 %
10000_production-mode_persistent-cold + exec 1.95 s ± 12 ms 2.03 s ± 157 ms +4.06 %
10000_production-mode_persistent-hot + exec 1.42 s ± 72 ms 1.51 s ± 29 ms +5.96 %
arco-pro_development-mode + exec 1.78 s ± 126 ms 1.77 s ± 113 ms -0.11 %
arco-pro_development-mode_hmr + exec 368 ms ± 1.3 ms 367 ms ± 3.6 ms -0.48 %
arco-pro_production-mode + exec 3.29 s ± 146 ms 3.34 s ± 74 ms +1.48 %
arco-pro_production-mode_generate-package-json-webpack-plugin + exec 3.34 s ± 65 ms 3.41 s ± 141 ms +2.11 %
arco-pro_production-mode_persistent-cold + exec 3.37 s ± 127 ms 3.42 s ± 229 ms +1.54 %
arco-pro_production-mode_persistent-hot + exec 2.09 s ± 95 ms 2.13 s ± 78 ms +2.12 %
arco-pro_production-mode_traverse-chunk-modules + exec 3.28 s ± 72 ms 3.4 s ± 169 ms +3.46 %
large-dyn-imports_development-mode + exec 1.95 s ± 47 ms 1.99 s ± 68 ms +2.09 %
large-dyn-imports_production-mode + exec 2.02 s ± 45 ms 2.24 s ± 28 ms +11.26 %
threejs_development-mode_10x + exec 1.52 s ± 24 ms 1.52 s ± 18 ms -0.43 %
threejs_development-mode_10x_hmr + exec 920 ms ± 6.6 ms 908 ms ± 21 ms -1.39 %
threejs_production-mode_10x + exec 4.61 s ± 175 ms 4.67 s ± 71 ms +1.26 %
threejs_production-mode_10x_persistent-cold + exec 4.75 s ± 162 ms 4.81 s ± 99 ms +1.27 %
threejs_production-mode_10x_persistent-hot + exec 4.17 s ± 55 ms 4.27 s ± 102 ms +2.48 %
10000_big_production-mode_disable-minimize + rss memory 9738 MiB ± 417 MiB 9635 MiB ± 38.4 MiB -1.06 %
10000_development-mode + rss memory 684 MiB ± 12 MiB 676 MiB ± 9.52 MiB -1.11 %
10000_development-mode_hmr + rss memory 832 MiB ± 42.7 MiB 811 MiB ± 46.5 MiB -2.57 %
10000_production-mode + rss memory 651 MiB ± 31.2 MiB 647 MiB ± 32.5 MiB -0.61 %
10000_production-mode_persistent-cold + rss memory 757 MiB ± 30.5 MiB 763 MiB ± 49.4 MiB +0.74 %
10000_production-mode_persistent-hot + rss memory 736 MiB ± 19.7 MiB 743 MiB ± 39 MiB +1.04 %
arco-pro_development-mode + rss memory 621 MiB ± 69.9 MiB 582 MiB ± 43.8 MiB -6.23 %
arco-pro_development-mode_hmr + rss memory 526 MiB ± 35 MiB 483 MiB ± 27.4 MiB -8.29 %
arco-pro_production-mode + rss memory 709 MiB ± 59.1 MiB 689 MiB ± 51.2 MiB -2.75 %
arco-pro_production-mode_generate-package-json-webpack-plugin + rss memory 704 MiB ± 90.9 MiB 697 MiB ± 55 MiB -1.08 %
arco-pro_production-mode_persistent-cold + rss memory 819 MiB ± 56.1 MiB 768 MiB ± 27 MiB -6.31 %
arco-pro_production-mode_persistent-hot + rss memory 656 MiB ± 58.4 MiB 662 MiB ± 90.8 MiB +0.89 %
arco-pro_production-mode_traverse-chunk-modules + rss memory 713 MiB ± 44.5 MiB 666 MiB ± 51.9 MiB -6.61 %
large-dyn-imports_development-mode + rss memory 707 MiB ± 9.02 MiB 692 MiB ± 4.29 MiB -2.23 %
large-dyn-imports_production-mode + rss memory 637 MiB ± 11.6 MiB 616 MiB ± 4.07 MiB -3.32 %
threejs_development-mode_10x + rss memory 622 MiB ± 15.7 MiB 605 MiB ± 14.9 MiB -2.70 %
threejs_development-mode_10x_hmr + rss memory 831 MiB ± 65.9 MiB 809 MiB ± 50.2 MiB -2.63 %
threejs_production-mode_10x + rss memory 819 MiB ± 205 MiB 842 MiB ± 157 MiB +2.84 %
threejs_production-mode_10x_persistent-cold + rss memory 835 MiB ± 20.2 MiB 836 MiB ± 41.6 MiB +0.13 %
threejs_production-mode_10x_persistent-hot + rss memory 713 MiB ± 27 MiB 707 MiB ± 49.4 MiB -0.85 %

Threshold exceeded: ["10000_production-mode_persistent-hot + exec","large-dyn-imports_production-mode + exec"]

@SyMind SyMind force-pushed the try-fix-perf-bug branch from 80a115c to ad6759e Compare July 24, 2025 14:50
@github-actions
Copy link
Contributor

github-actions bot commented Jul 24, 2025

📝 Benchmark detail: Open

Name Base (2025-07-24 ea8059e) Current Change
10000_big_production-mode_disable-minimize + exec 30.4 s ± 1.03 s 31.1 s ± 792 ms +2.35 %
10000_development-mode + exec 1.77 s ± 121 ms 1.77 s ± 147 ms -0.01 %
10000_development-mode_hmr + exec 693 ms ± 19 ms 687 ms ± 43 ms -0.77 %
10000_production-mode + exec 1.82 s ± 47 ms 1.84 s ± 39 ms +0.86 %
10000_production-mode_persistent-cold + exec 1.95 s ± 12 ms 2 s ± 93 ms +2.35 %
10000_production-mode_persistent-hot + exec 1.42 s ± 72 ms 1.49 s ± 30 ms +4.40 %
arco-pro_development-mode + exec 1.78 s ± 126 ms 1.78 s ± 86 ms +0.06 %
arco-pro_development-mode_hmr + exec 368 ms ± 1.3 ms 366 ms ± 3.9 ms -0.49 %
arco-pro_production-mode + exec 3.29 s ± 146 ms 3.28 s ± 81 ms -0.38 %
arco-pro_production-mode_generate-package-json-webpack-plugin + exec 3.34 s ± 65 ms 3.4 s ± 111 ms +1.87 %
arco-pro_production-mode_persistent-cold + exec 3.37 s ± 127 ms 3.4 s ± 163 ms +0.70 %
arco-pro_production-mode_persistent-hot + exec 2.09 s ± 95 ms 2.09 s ± 55 ms +0.32 %
arco-pro_production-mode_traverse-chunk-modules + exec 3.28 s ± 72 ms 3.36 s ± 147 ms +2.37 %
large-dyn-imports_development-mode + exec 1.95 s ± 47 ms 1.98 s ± 60 ms +1.65 %
large-dyn-imports_production-mode + exec 2.02 s ± 45 ms 2.22 s ± 42 ms +9.96 %
threejs_development-mode_10x + exec 1.52 s ± 24 ms 1.51 s ± 20 ms -1.22 %
threejs_development-mode_10x_hmr + exec 920 ms ± 6.6 ms 908 ms ± 19 ms -1.34 %
threejs_production-mode_10x + exec 4.61 s ± 175 ms 4.59 s ± 63 ms -0.57 %
threejs_production-mode_10x_persistent-cold + exec 4.75 s ± 162 ms 4.78 s ± 282 ms +0.75 %
threejs_production-mode_10x_persistent-hot + exec 4.17 s ± 55 ms 4.23 s ± 254 ms +1.52 %
10000_big_production-mode_disable-minimize + rss memory 9738 MiB ± 417 MiB 9652 MiB ± 101 MiB -0.89 %
10000_development-mode + rss memory 684 MiB ± 12 MiB 681 MiB ± 21 MiB -0.36 %
10000_development-mode_hmr + rss memory 832 MiB ± 42.7 MiB 820 MiB ± 32.4 MiB -1.52 %
10000_production-mode + rss memory 651 MiB ± 31.2 MiB 661 MiB ± 27 MiB +1.65 %
10000_production-mode_persistent-cold + rss memory 757 MiB ± 30.5 MiB 749 MiB ± 58.9 MiB -1.03 %
10000_production-mode_persistent-hot + rss memory 736 MiB ± 19.7 MiB 736 MiB ± 37.4 MiB -0.02 %
arco-pro_development-mode + rss memory 621 MiB ± 69.9 MiB 581 MiB ± 72.7 MiB -6.47 %
arco-pro_development-mode_hmr + rss memory 526 MiB ± 35 MiB 480 MiB ± 38.3 MiB -8.72 %
arco-pro_production-mode + rss memory 709 MiB ± 59.1 MiB 669 MiB ± 113 MiB -5.65 %
arco-pro_production-mode_generate-package-json-webpack-plugin + rss memory 704 MiB ± 90.9 MiB 670 MiB ± 42 MiB -4.87 %
arco-pro_production-mode_persistent-cold + rss memory 819 MiB ± 56.1 MiB 794 MiB ± 71.9 MiB -3.08 %
arco-pro_production-mode_persistent-hot + rss memory 656 MiB ± 58.4 MiB 653 MiB ± 31.7 MiB -0.43 %
arco-pro_production-mode_traverse-chunk-modules + rss memory 713 MiB ± 44.5 MiB 679 MiB ± 45.2 MiB -4.78 %
large-dyn-imports_development-mode + rss memory 707 MiB ± 9.02 MiB 695 MiB ± 11.7 MiB -1.78 %
large-dyn-imports_production-mode + rss memory 637 MiB ± 11.6 MiB 618 MiB ± 6.18 MiB -2.95 %
threejs_development-mode_10x + rss memory 622 MiB ± 15.7 MiB 599 MiB ± 7 MiB -3.55 %
threejs_development-mode_10x_hmr + rss memory 831 MiB ± 65.9 MiB 803 MiB ± 66.6 MiB -3.38 %
threejs_production-mode_10x + rss memory 819 MiB ± 205 MiB 840 MiB ± 178 MiB +2.54 %
threejs_production-mode_10x_persistent-cold + rss memory 835 MiB ± 20.2 MiB 831 MiB ± 19.2 MiB -0.46 %
threejs_production-mode_10x_persistent-hot + rss memory 713 MiB ± 27 MiB 705 MiB ± 39.9 MiB -1.09 %

Threshold exceeded: ["large-dyn-imports_production-mode + exec"]

@SyMind SyMind force-pushed the try-fix-perf-bug branch from ad6759e to 88ccb9b Compare July 24, 2025 15:34
@SyMind SyMind force-pushed the try-fix-perf-bug branch from 88ccb9b to e6325b0 Compare July 24, 2025 15:56
@github-actions
Copy link
Contributor

github-actions bot commented Jul 24, 2025

📝 Benchmark detail: Open

Name Base (2025-07-24 ea8059e) Current Change
10000_big_production-mode_disable-minimize + exec 30.4 s ± 1.03 s 30.9 s ± 1.16 s +1.69 %
10000_development-mode + exec 1.77 s ± 121 ms 1.75 s ± 31 ms -1.10 %
10000_development-mode_hmr + exec 693 ms ± 19 ms 683 ms ± 25 ms -1.44 %
10000_production-mode + exec 1.82 s ± 47 ms 1.79 s ± 33 ms -1.66 %
10000_production-mode_persistent-cold + exec 1.95 s ± 12 ms 1.97 s ± 82 ms +0.88 %
10000_production-mode_persistent-hot + exec 1.42 s ± 72 ms 1.42 s ± 31 ms -0.41 %
arco-pro_development-mode + exec 1.78 s ± 126 ms 1.77 s ± 11 ms -0.24 %
arco-pro_development-mode_hmr + exec 368 ms ± 1.3 ms 365 ms ± 1.1 ms -0.95 %
arco-pro_production-mode + exec 3.29 s ± 146 ms 3.24 s ± 75 ms -1.73 %
arco-pro_production-mode_generate-package-json-webpack-plugin + exec 3.34 s ± 65 ms 3.32 s ± 118 ms -0.56 %
arco-pro_production-mode_persistent-cold + exec 3.37 s ± 127 ms 3.35 s ± 77 ms -0.66 %
arco-pro_production-mode_persistent-hot + exec 2.09 s ± 95 ms 2.05 s ± 111 ms -1.58 %
arco-pro_production-mode_traverse-chunk-modules + exec 3.28 s ± 72 ms 3.31 s ± 171 ms +0.91 %
large-dyn-imports_development-mode + exec 1.95 s ± 47 ms 1.98 s ± 62 ms +1.43 %
large-dyn-imports_production-mode + exec 2.02 s ± 45 ms 2.01 s ± 36 ms -0.39 %
threejs_development-mode_10x + exec 1.52 s ± 24 ms 1.52 s ± 23 ms -0.63 %
threejs_development-mode_10x_hmr + exec 920 ms ± 6.6 ms 912 ms ± 24 ms -0.93 %
threejs_production-mode_10x + exec 4.61 s ± 175 ms 4.57 s ± 68 ms -0.88 %
threejs_production-mode_10x_persistent-cold + exec 4.75 s ± 162 ms 4.71 s ± 91 ms -0.84 %
threejs_production-mode_10x_persistent-hot + exec 4.17 s ± 55 ms 4.18 s ± 243 ms +0.16 %
10000_big_production-mode_disable-minimize + rss memory 9738 MiB ± 417 MiB 9684 MiB ± 578 MiB -0.56 %
10000_development-mode + rss memory 684 MiB ± 12 MiB 681 MiB ± 18.6 MiB -0.35 %
10000_development-mode_hmr + rss memory 832 MiB ± 42.7 MiB 821 MiB ± 44.4 MiB -1.40 %
10000_production-mode + rss memory 651 MiB ± 31.2 MiB 636 MiB ± 12.1 MiB -2.28 %
10000_production-mode_persistent-cold + rss memory 757 MiB ± 30.5 MiB 779 MiB ± 53.8 MiB +2.88 %
10000_production-mode_persistent-hot + rss memory 736 MiB ± 19.7 MiB 732 MiB ± 12.3 MiB -0.50 %
arco-pro_development-mode + rss memory 621 MiB ± 69.9 MiB 591 MiB ± 30.1 MiB -4.84 %
arco-pro_development-mode_hmr + rss memory 526 MiB ± 35 MiB 487 MiB ± 27.9 MiB -7.44 %
arco-pro_production-mode + rss memory 709 MiB ± 59.1 MiB 665 MiB ± 90.7 MiB -6.19 %
arco-pro_production-mode_generate-package-json-webpack-plugin + rss memory 704 MiB ± 90.9 MiB 684 MiB ± 97.8 MiB -2.82 %
arco-pro_production-mode_persistent-cold + rss memory 819 MiB ± 56.1 MiB 786 MiB ± 62.6 MiB -4.12 %
arco-pro_production-mode_persistent-hot + rss memory 656 MiB ± 58.4 MiB 682 MiB ± 48 MiB +3.96 %
arco-pro_production-mode_traverse-chunk-modules + rss memory 713 MiB ± 44.5 MiB 696 MiB ± 63.7 MiB -2.35 %
large-dyn-imports_development-mode + rss memory 707 MiB ± 9.02 MiB 696 MiB ± 5.12 MiB -1.56 %
large-dyn-imports_production-mode + rss memory 637 MiB ± 11.6 MiB 622 MiB ± 5.65 MiB -2.35 %
threejs_development-mode_10x + rss memory 622 MiB ± 15.7 MiB 608 MiB ± 13.6 MiB -2.23 %
threejs_development-mode_10x_hmr + rss memory 831 MiB ± 65.9 MiB 816 MiB ± 17.8 MiB -1.81 %
threejs_production-mode_10x + rss memory 819 MiB ± 205 MiB 850 MiB ± 174 MiB +3.77 %
threejs_production-mode_10x_persistent-cold + rss memory 835 MiB ± 20.2 MiB 824 MiB ± 31.9 MiB -1.29 %
threejs_production-mode_10x_persistent-hot + rss memory 713 MiB ± 27 MiB 698 MiB ± 54.9 MiB -2.14 %

@SyMind SyMind changed the title fix: try perf bug revert: "revert: perf: napi communication (#11132) (#11162)" Jul 24, 2025
@github-actions github-actions bot removed the release: bug fix release: bug related release(mr only) label Jul 24, 2025
@SyMind SyMind marked this pull request as ready for review July 24, 2025 23:01
Copilot AI review requested due to automatic review settings July 24, 2025 23:01
@SyMind SyMind requested review from h-a-n-a and hardfist as code owners July 24, 2025 23:01
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 reverts a previous revert to restore NAPI communication optimizations (#11132) due to performance degradation observed with UkeyMap compared to FxHashMap. The root cause appears to be UkeyMap's non-optimized handling of non-contiguous data storage, leading to memory fragmentation and reduced cache locality.

  • Switches from structured object passing to string-based JSON serialization for NAPI communication
  • Implements thread-local property buffers to reduce memory allocations
  • Refactors module connection methods to use arrays instead of vectors for better performance

Reviewed Changes

Copilot reviewed 18 out of 20 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
packages/rspack/src/taps/normalModuleFactory.ts Changes after-resolve callback to accept JSON string instead of structured object
packages/rspack/src/builtin-plugin/ExternalsPlugin.ts Adds resolve request caching and refactors to use instance methods
packages/rspack/etc/core.api.md Updates ExternalsPlugin.raw() method signature to remove compiler parameter
crates/rspack_binding_api/src/resource_data.rs Implements thread-local property buffer for resource data serialization
crates/rspack_binding_api/src/raw_options/raw_external.rs Optimizes external item context handling with Arc sharing and async cleanup
crates/rspack_binding_api/src/plugins/interceptor.rs Changes after-resolve hook to use JSON string serialization
crates/rspack_binding_api/src/normal_module_factory.rs Adds Serialize derives to data structures
crates/rspack_binding_api/src/modules/*.rs Implements thread-local property buffers for module serialization
crates/rspack_binding_api/src/module_graph.rs Optimizes connection methods to use arrays and reusable buffers
crates/rspack_binding_api/src/dependency.rs Changes dependency IDs getter to return arrays instead of vectors
crates/rspack_binding_api/src/compilation/mod.rs Optimizes modules getter to use arrays
crates/rspack_binding_api/src/build_info.rs Implements thread-local property buffer for build info
crates/rspack_binding_api/Cargo.toml Adds rayon dependency for async cleanup

@SyMind SyMind force-pushed the try-fix-perf-bug branch from 49d37ad to a9339e6 Compare July 25, 2025 02:48
@SyMind SyMind force-pushed the try-fix-perf-bug branch from a9339e6 to 8dc2e34 Compare July 25, 2025 02:50
@SyMind SyMind merged commit 1b34b8e into main Jul 25, 2025
72 of 74 checks passed
@SyMind SyMind deleted the try-fix-perf-bug branch July 25, 2025 03:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants