Skip to content

Commit bfed4d2

Browse files
authored
perf: improve deterministic chunk ids (#11575)
* perf: improve deterministic chunk ids * perf: improve deterministic chunk ids
1 parent b77879c commit bfed4d2

File tree

6 files changed

+28
-21
lines changed

6 files changed

+28
-21
lines changed

crates/rspack_core/src/chunk_graph/chunk_graph_chunk.rs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -412,6 +412,27 @@ impl ChunkGraph {
412412
modules
413413
}
414414

415+
pub fn get_ordered_chunk_normal_modules_identifier(
416+
&self,
417+
chunk: &ChunkUkey,
418+
) -> Vec<ModuleIdentifier> {
419+
let chunk_graph_chunk = self.expect_chunk_graph_chunk(chunk);
420+
let runtime_modules = chunk_graph_chunk
421+
.runtime_modules
422+
.iter()
423+
.copied()
424+
.collect::<IdentifierSet>();
425+
let mut modules: Vec<ModuleIdentifier> = chunk_graph_chunk
426+
.modules
427+
.iter()
428+
.filter(|m| !runtime_modules.contains(m))
429+
.copied()
430+
.collect();
431+
// SAFETY: module identifier is unique
432+
modules.sort_unstable_by_key(|m| m.as_str());
433+
modules
434+
}
435+
415436
pub fn get_ordered_chunk_modules<'module>(
416437
&self,
417438
chunk: &ChunkUkey,
@@ -664,6 +685,7 @@ impl ChunkGraph {
664685
let cgc = self.expect_chunk_graph_chunk(chunk);
665686
let mut input = cgc.modules.iter().copied().collect::<Vec<_>>();
666687
input.sort_unstable();
688+
667689
let mut modules = find_graph_roots(input, |module| {
668690
let mut set: IdentifierSet = Default::default();
669691
fn add_dependencies(

crates/rspack_ids/src/deterministic_chunk_ids_plugin.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,6 @@ async fn chunk_ids(&self, compilation: &mut rspack_core::Compilation) -> rspack_
8787
|a, b| {
8888
compare_chunks_natural(
8989
chunk_graph,
90-
&module_graph,
9190
&compilation.chunk_group_by_ukey,
9291
&compilation.module_ids_artifact,
9392
a,

crates/rspack_ids/src/id_helpers.rs

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -360,7 +360,6 @@ pub fn assign_ascending_chunk_ids(chunks: &[ChunkUkey], compilation: &mut Compil
360360

361361
fn compare_chunks_by_modules<'a>(
362362
chunk_graph: &ChunkGraph,
363-
module_graph: &ModuleGraph,
364363
module_ids: &'a ModuleIdsArtifact,
365364
a: &Chunk,
366365
b: &Chunk,
@@ -372,19 +371,19 @@ fn compare_chunks_by_modules<'a>(
372371
.entry(a_ukey)
373372
.or_insert_with(|| {
374373
chunk_graph
375-
.get_ordered_chunk_modules(&a_ukey, module_graph)
374+
.get_ordered_chunk_normal_modules_identifier(&a_ukey)
376375
.into_iter()
377-
.map(|m| ChunkGraph::get_module_id(module_ids, m.identifier()).map(|s| s.as_str()))
376+
.map(|m| ChunkGraph::get_module_id(module_ids, m).map(|s| s.as_str()))
378377
.collect_vec()
379378
})
380379
.clone();
381380
let b_modules = ordered_chunk_modules_cache
382381
.entry(b_ukey)
383382
.or_insert_with(|| {
384383
chunk_graph
385-
.get_ordered_chunk_modules(&b_ukey, module_graph)
384+
.get_ordered_chunk_normal_modules_identifier(&b_ukey)
386385
.into_iter()
387-
.map(|m| ChunkGraph::get_module_id(module_ids, m.identifier()).map(|s| s.as_str()))
386+
.map(|m| ChunkGraph::get_module_id(module_ids, m).map(|s| s.as_str()))
388387
.collect_vec()
389388
})
390389
.clone();
@@ -427,7 +426,6 @@ fn compare_chunks_by_groups(
427426

428427
pub fn compare_chunks_natural<'a>(
429428
chunk_graph: &ChunkGraph,
430-
module_graph: &ModuleGraph,
431429
chunk_group_by_ukey: &ChunkGroupByUkey,
432430
module_ids: &'a ModuleIdsArtifact,
433431
a: &Chunk,
@@ -444,14 +442,8 @@ pub fn compare_chunks_natural<'a>(
444442
return runtime_ordering;
445443
}
446444

447-
let modules_ordering = compare_chunks_by_modules(
448-
chunk_graph,
449-
module_graph,
450-
module_ids,
451-
a,
452-
b,
453-
ordered_chunk_modules_cache,
454-
);
445+
let modules_ordering =
446+
compare_chunks_by_modules(chunk_graph, module_ids, a, b, ordered_chunk_modules_cache);
455447
if modules_ordering != Ordering::Equal {
456448
return modules_ordering;
457449
}

crates/rspack_ids/src/named_chunk_ids_plugin.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,6 @@ fn assign_named_chunk_ids(
119119
let b = compilation.chunk_by_ukey.expect_get(b);
120120
compare_chunks_natural(
121121
chunk_graph,
122-
&module_graph,
123122
&compilation.chunk_group_by_ukey,
124123
&compilation.module_ids_artifact,
125124
a,
@@ -154,7 +153,6 @@ fn assign_named_chunk_ids(
154153
let b = compilation.chunk_by_ukey.expect_get(b);
155154
compare_chunks_natural(
156155
chunk_graph,
157-
&module_graph,
158156
&compilation.chunk_group_by_ukey,
159157
&compilation.module_ids_artifact,
160158
a,

crates/rspack_ids/src/natural_chunk_ids_plugin.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ async fn chunk_ids(&self, compilation: &mut rspack_core::Compilation) -> rspack_
2424

2525
let module_ids = &compilation.module_ids_artifact;
2626
let chunk_graph = &compilation.chunk_graph;
27-
let module_graph = &compilation.get_module_graph();
2827
let mut ordered_chunk_modules_cache = Default::default();
2928

3029
let chunks = compilation
@@ -34,7 +33,6 @@ async fn chunk_ids(&self, compilation: &mut rspack_core::Compilation) -> rspack_
3433
.sorted_unstable_by(|a, b| {
3534
compare_chunks_natural(
3635
chunk_graph,
37-
module_graph,
3836
&compilation.chunk_group_by_ukey,
3937
module_ids,
4038
a,

crates/rspack_ids/src/occurrence_chunk_ids_plugin.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ async fn chunk_ids(&self, compilation: &mut rspack_core::Compilation) -> Result<
3939
}
4040

4141
let chunk_graph = &compilation.chunk_graph;
42-
let module_graph = &compilation.get_module_graph();
4342
let chunk_group_by_ukey = &compilation.chunk_group_by_ukey;
4443
let mut occurs_in_initial_chunks_map = HashMap::new();
4544

@@ -81,7 +80,6 @@ async fn chunk_ids(&self, compilation: &mut rspack_core::Compilation) -> Result<
8180

8281
compare_chunks_natural(
8382
chunk_graph,
84-
module_graph,
8583
&compilation.chunk_group_by_ukey,
8684
&compilation.module_ids_artifact,
8785
a,

0 commit comments

Comments
 (0)