Skip to content

Commit 79254ee

Browse files
committed
perf: name_for_condition for Arc<str>
1 parent 6b73fc7 commit 79254ee

File tree

18 files changed

+85
-52
lines changed

18 files changed

+85
-52
lines changed

crates/rspack_core/src/compilation/make/graph_updater/repair/factorize.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ pub struct FactorizeTask {
2323
pub original_module_identifier: Option<ModuleIdentifier>,
2424
pub original_module_source: Option<BoxSource>,
2525
pub original_module_context: Option<Box<Context>>,
26-
pub issuer: Option<Box<str>>,
26+
pub issuer: Option<Arc<str>>,
2727
pub issuer_layer: Option<ModuleLayer>,
2828
pub dependencies: Vec<BoxDependency>,
2929
pub resolve_options: Option<Arc<Resolve>>,

crates/rspack_core/src/compilation/make/graph_updater/repair/process_dependencies.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ impl Task<TaskContext> for ProcessDependenciesTask {
101101
original_module_source,
102102
issuer: module
103103
.as_normal_module()
104-
.and_then(|module| module.name_for_condition()),
104+
.and_then(|module| module.name_for_condition().cloned()),
105105
issuer_layer: module.get_layer().cloned(),
106106
dependencies,
107107
resolve_options: module.get_resolve_options(),

crates/rspack_core/src/compilation/make/module_executor/execute.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
use std::{collections::VecDeque, iter::once, sync::atomic::AtomicU32};
1+
use std::{
2+
collections::VecDeque,
3+
iter::once,
4+
sync::{Arc, atomic::AtomicU32},
5+
};
26

37
use itertools::Itertools;
48
use rspack_collections::{DatabaseItem, Identifier, IdentifierSet, UkeySet};
@@ -19,7 +23,7 @@ use crate::{
1923
pub struct ExecutedRuntimeModule {
2024
pub identifier: Identifier,
2125
pub name: String,
22-
pub name_for_condition: Option<String>,
26+
pub name_for_condition: Option<Arc<str>>,
2327
pub module_type: ModuleType,
2428
pub size: f64,
2529
pub cacheable: bool,
@@ -382,7 +386,7 @@ impl Task<ExecutorTaskContext> for ExecuteTask {
382386
ExecutedRuntimeModule {
383387
identifier,
384388
name: runtime_module.name().to_string(),
385-
name_for_condition: runtime_module.name_for_condition().map(|n| n.to_string()),
389+
name_for_condition: runtime_module.name_for_condition().cloned(),
386390
module_type: *runtime_module.module_type(),
387391
cacheable: !(runtime_module.full_hash() || runtime_module.dependent_hash()),
388392
size: runtime_module_size

crates/rspack_core/src/concatenated_module.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ pub struct ConcatenatedModuleHooks {
7171
pub struct RootModuleContext {
7272
pub id: ModuleIdentifier,
7373
pub readable_identifier: String,
74-
pub name_for_condition: Option<Box<str>>,
74+
pub name_for_condition: Option<Arc<str>>,
7575
pub lib_indent: Option<String>,
7676
pub resolve_options: Option<Arc<Resolve>>,
7777
pub code_generation_dependencies: Option<Vec<BoxModuleDependency>>,
@@ -1600,8 +1600,8 @@ impl Module for ConcatenatedModule {
16001600
Ok(hasher.digest(&compilation.options.output.hash_digest))
16011601
}
16021602

1603-
fn name_for_condition(&self) -> Option<Box<str>> {
1604-
self.root_module_ctxt.name_for_condition.clone()
1603+
fn name_for_condition(&self) -> Option<&Arc<str>> {
1604+
self.root_module_ctxt.name_for_condition.as_ref()
16051605
}
16061606

16071607
fn lib_ident(&self, _options: LibIdentOptions) -> Option<Cow<'_, str>> {

crates/rspack_core/src/module.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -314,7 +314,7 @@ pub trait Module:
314314
) -> Result<CodeGenerationResult>;
315315

316316
/// Name matched against bundle-splitting conditions.
317-
fn name_for_condition(&self) -> Option<Box<str>> {
317+
fn name_for_condition(&self) -> Option<&Arc<str>> {
318318
// Align with https://github.com/webpack/webpack/blob/8241da7f1e75c5581ba535d127fa66aeb9eb2ac8/lib/Module.js#L852
319319
None
320320
}

crates/rspack_core/src/module_factory.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ pub struct ModuleFactoryCreateData {
1717
pub request: String,
1818
pub context: Context,
1919
pub dependencies: Vec<BoxDependency>,
20-
pub issuer: Option<Box<str>>,
20+
pub issuer: Option<Arc<str>>,
2121
pub issuer_identifier: Option<ModuleIdentifier>,
2222
pub issuer_layer: Option<ModuleLayer>,
2323
pub resolver_factory: Arc<ResolverFactory>,

crates/rspack_core/src/normal_module.rs

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,8 @@ pub struct NormalModule {
148148
build_info: BuildInfo,
149149
build_meta: BuildMeta,
150150
parsed: bool,
151+
152+
name_for_condition: Arc<str>,
151153
}
152154

153155
static DEBUG_ID: AtomicUsize = AtomicUsize::new(1);
@@ -185,6 +187,16 @@ impl NormalModule {
185187
) -> Self {
186188
let module_type = module_type.into();
187189
let id = Self::create_id(&module_type, layer.as_ref(), &request);
190+
191+
// Align with https://github.com/webpack/webpack/blob/8241da7f1e75c5581ba535d127fa66aeb9eb2ac8/lib/NormalModule.js#L375
192+
let resource = resource_data.resource();
193+
let idx = resource.find('?');
194+
let name_for_condition = if let Some(idx) = idx {
195+
Arc::from(resource[..idx].to_string())
196+
} else {
197+
Arc::from(resource.to_string())
198+
};
199+
188200
Self {
189201
blocks: Vec::new(),
190202
dependencies: Vec::new(),
@@ -214,6 +226,8 @@ impl NormalModule {
214226
build_meta: Default::default(),
215227
parsed: false,
216228
source_map_kind: SourceMapKind::empty(),
229+
230+
name_for_condition,
217231
}
218232
}
219233

@@ -668,15 +682,8 @@ impl Module for NormalModule {
668682
Ok(hasher.digest(&compilation.options.output.hash_digest))
669683
}
670684

671-
fn name_for_condition(&self) -> Option<Box<str>> {
672-
// Align with https://github.com/webpack/webpack/blob/8241da7f1e75c5581ba535d127fa66aeb9eb2ac8/lib/NormalModule.js#L375
673-
let resource = self.resource_data.resource();
674-
let idx = resource.find('?');
675-
if let Some(idx) = idx {
676-
Some(resource[..idx].into())
677-
} else {
678-
Some(resource.into())
679-
}
685+
fn name_for_condition(&self) -> Option<&Arc<str>> {
686+
Some(&self.name_for_condition)
680687
}
681688

682689
fn lib_ident(&self, options: LibIdentOptions) -> Option<Cow<'_, str>> {

crates/rspack_core/src/options/externals.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ pub enum ExternalItemValue {
2020
pub type ExternalItemObject = HashMap<String, ExternalItemValue>;
2121

2222
pub struct ContextInfo {
23-
pub issuer: String,
23+
pub issuer: Arc<str>,
2424
pub issuer_layer: Option<String>,
2525
}
2626

crates/rspack_core/src/options/module.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -972,7 +972,7 @@ pub struct FuncUseCtx {
972972
pub real_resource: Option<String>,
973973
pub resource_query: Option<String>,
974974
pub resource_fragment: Option<String>,
975-
pub issuer: Option<Box<str>>,
975+
pub issuer: Option<Arc<str>>,
976976
pub issuer_layer: Option<String>,
977977
}
978978

crates/rspack_ids/src/id_helpers.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ pub fn get_short_module_name(module: &BoxModule, context: &str) -> String {
6868
};
6969
let name_for_condition = module.name_for_condition();
7070
if let Some(name_for_condition) = name_for_condition {
71-
return avoid_number(&make_paths_relative(context, &name_for_condition)).to_string();
71+
return avoid_number(&make_paths_relative(context, name_for_condition)).to_string();
7272
};
7373
"".to_string()
7474
}

0 commit comments

Comments
 (0)