Skip to content

Commit c6a53ea

Browse files
authored
perf: reduce BuildMeta size (#4027)
1 parent c1ef7bc commit c6a53ea

File tree

4 files changed

+50
-30
lines changed

4 files changed

+50
-30
lines changed

crates/rspack_core/src/module.rs

Lines changed: 36 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
use std::fmt::Display;
12
use std::hash::Hash;
23
use std::path::PathBuf;
34
use std::{any::Any, borrow::Cow, fmt::Debug};
@@ -62,36 +63,52 @@ pub enum BuildMetaDefaultObject {
6263
RedirectWarn,
6364
}
6465

65-
#[derive(Debug, Clone, Hash)]
66+
#[derive(Debug, Default, Clone, Copy, Hash)]
67+
pub enum ModuleArgument {
68+
#[default]
69+
Module,
70+
WebpackModule,
71+
}
72+
73+
impl Display for ModuleArgument {
74+
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
75+
match self {
76+
ModuleArgument::Module => write!(f, "module"),
77+
ModuleArgument::WebpackModule => write!(f, "__webpack_module__"),
78+
}
79+
}
80+
}
81+
82+
#[derive(Debug, Default, Clone, Copy, Hash)]
83+
pub enum ExportsArgument {
84+
#[default]
85+
Exports,
86+
WebpackExports,
87+
}
88+
89+
impl Display for ExportsArgument {
90+
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
91+
match self {
92+
ExportsArgument::Exports => write!(f, "exports"),
93+
ExportsArgument::WebpackExports => write!(f, "__webpack_exports__"),
94+
}
95+
}
96+
}
97+
98+
#[derive(Debug, Default, Clone, Hash)]
6699
pub struct BuildMeta {
67100
pub strict: bool,
68101
pub strict_harmony_module: bool,
69102
pub is_async: bool,
70103
pub esm: bool,
71104
pub exports_type: BuildMetaExportsType,
72105
pub default_object: BuildMetaDefaultObject,
73-
pub module_argument: &'static str,
74-
pub exports_argument: &'static str,
106+
pub module_argument: ModuleArgument,
107+
pub exports_argument: ExportsArgument,
75108
// TODO: Don't delete this comment, it will be used in near future
76109
// pub side_effect_free: bool,
77110
}
78111

79-
impl Default for BuildMeta {
80-
fn default() -> Self {
81-
Self {
82-
strict: Default::default(),
83-
strict_harmony_module: Default::default(),
84-
is_async: Default::default(),
85-
esm: Default::default(),
86-
exports_type: Default::default(),
87-
default_object: Default::default(),
88-
module_argument: "module",
89-
exports_argument: "exports",
90-
// side_effect_free: false,
91-
}
92-
}
93-
}
94-
95112
// webpack build info
96113
#[derive(Debug, Default, Clone)]
97114
pub struct BuildResult {

crates/rspack_core/src/module_graph_module.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ use rustc_hash::FxHashSet as HashSet;
33

44
use crate::{
55
is_async_dependency, module_graph::ConnectionId, BuildInfo, BuildMeta, BuildMetaDefaultObject,
6-
BuildMetaExportsType, ChunkGraph, ChunkGroupOptions, DependencyId, ExportsInfo, ExportsType,
7-
FactoryMeta, ModuleGraph, ModuleGraphConnection, ModuleIdentifier, ModuleIssuer, ModuleProfile,
8-
ModuleSyntax, ModuleType,
6+
BuildMetaExportsType, ChunkGraph, ChunkGroupOptions, DependencyId, ExportsArgument, ExportsInfo,
7+
ExportsType, FactoryMeta, ModuleArgument, ModuleGraph, ModuleGraphConnection, ModuleIdentifier,
8+
ModuleIssuer, ModuleProfile, ModuleSyntax, ModuleType,
99
};
1010

1111
#[derive(Debug)]
@@ -196,20 +196,20 @@ impl ModuleGraphModule {
196196
&self.issuer
197197
}
198198

199-
pub fn get_exports_argument(&self) -> &str {
199+
pub fn get_exports_argument(&self) -> ExportsArgument {
200200
self
201201
.build_meta
202202
.as_ref()
203203
.map(|m| m.exports_argument)
204-
.unwrap_or("exports")
204+
.unwrap_or_default()
205205
}
206206

207-
pub fn get_module_argument(&self) -> &str {
207+
pub fn get_module_argument(&self) -> ModuleArgument {
208208
self
209209
.build_meta
210210
.as_ref()
211211
.map(|m| m.module_argument)
212-
.unwrap_or("module")
212+
.unwrap_or_default()
213213
}
214214

215215
pub fn get_exports_type(&self, strict: bool) -> ExportsType {

crates/rspack_plugin_javascript/src/dependency/module_argument_dependency.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ impl DependencyTemplate for ModuleArgumentDependency {
4242
None,
4343
);
4444
} else {
45-
source.replace(self.start, self.end, module_argument, None);
45+
source.replace(self.start, self.end, &format!("{module_argument}"), None);
4646
}
4747
}
4848
}

crates/rspack_plugin_javascript/src/visitors/dependency/harmony_detection_scanner.rs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
use rspack_core::{BuildInfo, BuildMeta, BuildMetaExportsType, DependencyTemplate, ModuleType};
1+
use rspack_core::{
2+
BuildInfo, BuildMeta, BuildMetaExportsType, DependencyTemplate, ExportsArgument, ModuleArgument,
3+
ModuleType,
4+
};
25
use swc_core::ecma::ast::{ModuleItem, Program};
36
use swc_core::ecma::visit::{noop_visit_type, Visit};
47

@@ -43,12 +46,12 @@ impl Visit for HarmonyDetectionScanner<'_> {
4346
self.build_meta.esm = true;
4447
self.build_meta.exports_type = BuildMetaExportsType::Namespace;
4548
self.build_info.strict = true;
46-
self.build_meta.exports_argument = "__webpack_exports__";
49+
self.build_meta.exports_argument = ExportsArgument::WebpackExports;
4750
}
4851

4952
if strict_harmony_module {
5053
self.build_meta.strict_harmony_module = true;
51-
self.build_meta.module_argument = "__webpack_module__";
54+
self.build_meta.module_argument = ModuleArgument::WebpackModule;
5255
}
5356
}
5457
}

0 commit comments

Comments
 (0)