Skip to content

Commit d0bb617

Browse files
perf(core): tighten chunk graph reuse and release connection wrappers
1 parent d6a8972 commit d0bb617

2 files changed

Lines changed: 13 additions & 1 deletion

File tree

crates/rspack_binding_api/src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@ use crate::{
131131
error::{ErrorCode, RspackResultToNapiResultExt},
132132
fs_node::{HybridFileSystem, NodeFileSystem, ThreadsafeNodeFS},
133133
module::ModuleObject,
134+
module_graph_connection::ModuleGraphConnectionWrapper,
134135
platform::RawCompilerPlatform,
135136
plugins::{
136137
JsCleanupPlugin, JsHooksAdapterPlugin, RegisterJsTapKind, RegisterJsTaps, buildtime_plugins,
@@ -528,6 +529,7 @@ impl JsCompiler {
528529
ChunkGroupWrapper::cleanup_last_compilation(compilation_id);
529530
DependencyWrapper::cleanup_last_compilation(compilation_id);
530531
AsyncDependenciesBlockWrapper::cleanup_last_compilation(compilation_id);
532+
ModuleGraphConnectionWrapper::cleanup_last_compilation(compilation_id);
531533
}
532534
}
533535

crates/rspack_core/src/artifacts/build_chunk_graph_artifact.rs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,8 @@ impl BuildChunkGraphArtifact {
144144
// and async-block connections separate; all_dependencies contains both.
145145
let mut ordered_dependencies = vec![];
146146
let mut unordered_dependencies = vec![];
147+
let mut ordered_dependencies_sorted = true;
148+
let mut last_source_order = None;
147149
for dep_id in module_graph_module.all_dependencies() {
148150
let dependency = module_graph.dependency_by_id(dep_id);
149151
let module_dependency = dependency.as_module_dependency();
@@ -155,12 +157,20 @@ impl BuildChunkGraphArtifact {
155157
}
156158

157159
if let Some(source_order) = dependency.source_order() {
160+
if let Some(previous) = last_source_order
161+
&& source_order < previous
162+
{
163+
ordered_dependencies_sorted = false;
164+
}
165+
last_source_order = Some(source_order);
158166
ordered_dependencies.push((source_order, *dep_id));
159167
} else {
160168
unordered_dependencies.push(*dep_id);
161169
}
162170
}
163-
ordered_dependencies.sort_by_key(|(source_order, _)| *source_order);
171+
if !ordered_dependencies_sorted {
172+
ordered_dependencies.sort_by_key(|(source_order, _)| *source_order);
173+
}
164174

165175
let mut active_modules_by_block =
166176
HashMap::<DependenciesBlockIdentifier, IdentifierIndexMap<Vec<_>>>::default();

0 commit comments

Comments
 (0)