Skip to content

Commit 6649d17

Browse files
committed
perf: streamline prepared connection finalization
1 parent 4f4762f commit 6649d17

1 file changed

Lines changed: 9 additions & 20 deletions

File tree

crates/rspack_core/src/compilation/build_chunk_graph/code_splitter.rs

Lines changed: 9 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -51,17 +51,11 @@ struct PreparedBlockConnectionBuilder {
5151
dependency: DependencyId,
5252
}
5353

54-
struct PreparedBlockConnectionGroupBuilder {
55-
block: DependenciesBlockIdentifier,
56-
module: ModuleIdentifier,
57-
connections: Vec<DependencyId>,
58-
}
59-
6054
fn finalize_prepared_connection_map(
6155
connections: impl IntoIterator<Item = PreparedBlockConnectionBuilder>,
6256
capacity: usize,
6357
) -> PreparedBlockConnectionMap {
64-
let mut groups = Vec::<PreparedBlockConnectionGroupBuilder>::with_capacity(capacity);
58+
let mut groups = PreparedBlockConnectionMap::with_capacity(capacity);
6559
let mut group_index_by_block = Vec::<(DependenciesBlockIdentifier, IdentifierMap<usize>)>::new();
6660
for connection in connections {
6761
let index_by_module = if let Some((_, index_by_module)) = group_index_by_block
@@ -78,27 +72,22 @@ fn finalize_prepared_connection_map(
7872
};
7973

8074
if let Some(index) = index_by_module.get(&connection.module) {
81-
groups[*index].connections.push(connection.dependency);
75+
Arc::get_mut(&mut groups[*index].connections)
76+
.expect("prepared connections should not be shared during finalize")
77+
.push(connection.dependency);
8278
continue;
8379
}
8480

8581
let index = groups.len();
8682
index_by_module.insert(connection.module, index);
87-
groups.push(PreparedBlockConnectionGroupBuilder {
83+
groups.push(PreparedBlockConnection {
8884
block: connection.block,
8985
module: connection.module,
90-
connections: vec![connection.dependency],
86+
connections: Arc::new(vec![connection.dependency]),
9187
});
9288
}
9389

9490
groups
95-
.into_iter()
96-
.map(|connection| PreparedBlockConnection {
97-
block: connection.block,
98-
module: connection.module,
99-
connections: Arc::new(connection.connections),
100-
})
101-
.collect()
10291
}
10392

10493
#[derive(Debug, Clone, Default)]
@@ -2335,9 +2324,6 @@ Or do you want to use the entrypoints '{name}' and '{runtime}' independently on
23352324
let mut ordered_deps = Vec::new();
23362325
let mut unordered_deps = Vec::with_capacity(dependency_count);
23372326
for dep_id in all_dependencies {
2338-
let Some(connection) = mg.connection_by_dependency_id(dep_id) else {
2339-
continue;
2340-
};
23412327
let dep = mg.dependency_by_id(dep_id);
23422328
let module_dep = dep.as_module_dependency();
23432329
if module_dep.is_none() && dep.as_context_dependency().is_none() {
@@ -2346,6 +2332,9 @@ Or do you want to use the entrypoints '{name}' and '{runtime}' independently on
23462332
if matches!(module_dep.map(|d| d.weak()), Some(true)) {
23472333
continue;
23482334
}
2335+
let Some(connection) = mg.connection_by_dependency_id(dep_id) else {
2336+
continue;
2337+
};
23492338

23502339
let module_identifier = *connection.module_identifier();
23512340
let block_id = if let Some(block) = mg.get_parent_block(dep_id) {

0 commit comments

Comments
 (0)