Skip to content

Commit

Permalink
perf: use partition_map to avoid clone (#9427)
Browse files Browse the repository at this point in the history
  • Loading branch information
JSerFeng authored Feb 21, 2025
1 parent b69ccff commit f7ec690
Showing 1 changed file with 29 additions and 30 deletions.
59 changes: 29 additions & 30 deletions crates/rspack_core/src/incremental/mutations.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ use std::{
sync::RwLock,
};

use itertools::{Either, Itertools};
use once_cell::sync::OnceCell;
use rayon::iter::{IntoParallelIterator, IntoParallelRefIterator, ParallelIterator};
use rspack_collections::{IdentifierMap, IdentifierSet, UkeySet};
Expand Down Expand Up @@ -274,37 +275,35 @@ fn compute_affected_modules_with_module_graph(
}

let mut all_affected_modules: IdentifierSet = built_modules.clone();
let affected_modules_cache_iter = built_modules.par_iter().flat_map(|module_identifier| {
module_graph
.get_incoming_connections_by_origin_module(module_identifier)
.into_iter()
.filter_map(|(referencing_module, connections)| {
let referencing_module = referencing_module?;
if all_affected_modules.contains(&referencing_module) {
return None;
}
match reduce_affect_type(module_graph, &connections) {
AffectType::False => None,
AffectType::True => Some(AffectedModuleKind::Direct(referencing_module)),
AffectType::Transitive => Some(AffectedModuleKind::Transitive(referencing_module)),
}
})
.collect::<Vec<_>>()
});
let mut direct_affected_modules: IdentifierSet = affected_modules_cache_iter
.clone()
.filter_map(|k| match k {
AffectedModuleKind::Direct(m) => Some(m),
AffectedModuleKind::Transitive(_) => None,
})
.collect();
let mut transitive_affected_modules: IdentifierSet = affected_modules_cache_iter
.clone()
.filter_map(|k| match k {
AffectedModuleKind::Transitive(m) => Some(m),
AffectedModuleKind::Direct(_) => None,
let (mut direct_affected_modules, mut transitive_affected_modules): (
IdentifierSet,
IdentifierSet,
) = built_modules
.par_iter()
.flat_map(|module_identifier| {
module_graph
.get_incoming_connections_by_origin_module(module_identifier)
.into_iter()
.filter_map(|(referencing_module, connections)| {
let referencing_module = referencing_module?;
if all_affected_modules.contains(&referencing_module) {
return None;
}
match reduce_affect_type(module_graph, &connections) {
AffectType::False => None,
AffectType::True => Some(AffectedModuleKind::Direct(referencing_module)),
AffectType::Transitive => Some(AffectedModuleKind::Transitive(referencing_module)),
}
})
.collect::<Vec<_>>()
})
.collect();
.collect::<Vec<_>>()
.iter()
.partition_map(|reduce_type| match reduce_type {
AffectedModuleKind::Direct(m) => Either::Left(*m),
AffectedModuleKind::Transitive(m) => Either::Right(*m),
});

while !transitive_affected_modules.is_empty() {
let transitive_affected_modules_current = std::mem::take(&mut transitive_affected_modules);
all_affected_modules.extend(transitive_affected_modules_current.iter().copied());
Expand Down

2 comments on commit f7ec690

@github-actions
Copy link
Contributor

@github-actions github-actions bot commented on f7ec690 Feb 21, 2025

Choose a reason for hiding this comment

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

📝 Benchmark detail: Open

Name Base (2025-02-21 18420bb) Current Change
10000_big_production-mode_disable-minimize + exec 36.6 s ± 380 ms 37.2 s ± 723 ms +1.68 %
10000_development-mode + exec 1.71 s ± 14 ms 1.69 s ± 29 ms -0.98 %
10000_development-mode_hmr + exec 671 ms ± 13 ms 665 ms ± 5.3 ms -0.83 %
10000_production-mode + exec 2.19 s ± 56 ms 2.16 s ± 61 ms -1.42 %
10000_production-mode_persistent-cold + exec 2.35 s ± 128 ms 2.33 s ± 142 ms -0.55 %
10000_production-mode_persistent-hot + exec 1.62 s ± 28 ms 1.62 s ± 35 ms +0.40 %
arco-pro_development-mode + exec 1.72 s ± 92 ms 1.81 s ± 317 ms +5.09 %
arco-pro_development-mode_hmr + exec 374 ms ± 1.2 ms 376 ms ± 4.7 ms +0.48 %
arco-pro_production-mode + exec 3.58 s ± 82 ms 3.58 s ± 233 ms +0.17 %
arco-pro_production-mode_generate-package-json-webpack-plugin + exec 3.57 s ± 41 ms 3.57 s ± 72 ms +0.07 %
arco-pro_production-mode_persistent-cold + exec 3.67 s ± 287 ms 3.6 s ± 94 ms -1.72 %
arco-pro_production-mode_persistent-hot + exec 2.24 s ± 106 ms 2.32 s ± 139 ms +3.39 %
arco-pro_production-mode_traverse-chunk-modules + exec 3.54 s ± 225 ms 3.49 s ± 148 ms -1.48 %
large-dyn-imports_development-mode + exec 1.97 s ± 37 ms 1.95 s ± 47 ms -1.16 %
large-dyn-imports_production-mode + exec 2.02 s ± 37 ms 2.07 s ± 206 ms +2.29 %
threejs_development-mode_10x + exec 1.48 s ± 140 ms 1.44 s ± 34 ms -2.60 %
threejs_development-mode_10x_hmr + exec 817 ms ± 22 ms 791 ms ± 41 ms -3.24 %
threejs_production-mode_10x + exec 5.14 s ± 161 ms 5.13 s ± 259 ms -0.18 %
threejs_production-mode_10x_persistent-cold + exec 5.15 s ± 352 ms 5.11 s ± 70 ms -0.93 %
threejs_production-mode_10x_persistent-hot + exec 4.49 s ± 273 ms 4.42 s ± 83 ms -1.48 %
10000_big_production-mode_disable-minimize + rss memory 8682 MiB ± 73.1 MiB 8677 MiB ± 25.5 MiB -0.05 %
10000_development-mode + rss memory 651 MiB ± 9.54 MiB 659 MiB ± 14.3 MiB +1.14 %
10000_development-mode_hmr + rss memory 1191 MiB ± 187 MiB 1297 MiB ± 266 MiB +8.94 %
10000_production-mode + rss memory 620 MiB ± 27.7 MiB 642 MiB ± 15.9 MiB +3.56 %
10000_production-mode_persistent-cold + rss memory 729 MiB ± 21.8 MiB 745 MiB ± 16.8 MiB +2.20 %
10000_production-mode_persistent-hot + rss memory 703 MiB ± 22.6 MiB 713 MiB ± 12.4 MiB +1.36 %
arco-pro_development-mode + rss memory 574 MiB ± 19.3 MiB 559 MiB ± 17.4 MiB -2.56 %
arco-pro_development-mode_hmr + rss memory 660 MiB ± 46.9 MiB 639 MiB ± 95.2 MiB -3.19 %
arco-pro_production-mode + rss memory 711 MiB ± 22.3 MiB 710 MiB ± 16.2 MiB -0.12 %
arco-pro_production-mode_generate-package-json-webpack-plugin + rss memory 729 MiB ± 38.7 MiB 714 MiB ± 8.35 MiB -2.01 %
arco-pro_production-mode_persistent-cold + rss memory 789 MiB ± 47.8 MiB 787 MiB ± 40 MiB -0.30 %
arco-pro_production-mode_persistent-hot + rss memory 636 MiB ± 24.6 MiB 649 MiB ± 14.1 MiB +2.11 %
arco-pro_production-mode_traverse-chunk-modules + rss memory 725 MiB ± 22.4 MiB 703 MiB ± 32.3 MiB -2.95 %
large-dyn-imports_development-mode + rss memory 644 MiB ± 5.16 MiB 649 MiB ± 5.47 MiB +0.87 %
large-dyn-imports_production-mode + rss memory 521 MiB ± 5.02 MiB 528 MiB ± 6.36 MiB +1.29 %
threejs_development-mode_10x + rss memory 572 MiB ± 30 MiB 565 MiB ± 9.48 MiB -1.37 %
threejs_development-mode_10x_hmr + rss memory 1128 MiB ± 228 MiB 1146 MiB ± 168 MiB +1.59 %
threejs_production-mode_10x + rss memory 851 MiB ± 78.3 MiB 834 MiB ± 34.9 MiB -2.01 %
threejs_production-mode_10x_persistent-cold + rss memory 957 MiB ± 45.2 MiB 946 MiB ± 106 MiB -1.14 %
threejs_production-mode_10x_persistent-hot + rss memory 811 MiB ± 63.4 MiB 814 MiB ± 36.3 MiB +0.44 %

Threshold exceeded: ["arco-pro_development-mode + exec"]

@github-actions
Copy link
Contributor

@github-actions github-actions bot commented on f7ec690 Feb 21, 2025

Choose a reason for hiding this comment

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

📝 Ecosystem CI detail: Open

suite result
modernjs ❌ failure
rspress ✅ success
rslib ✅ success
rsbuild ❌ failure
rsdoctor ❌ failure
examples ✅ success
devserver ✅ success
nuxt ✅ success

Please sign in to comment.