From dca7627659165fba0256dc59bc30d492e2bc070d Mon Sep 17 00:00:00 2001 From: Cong-Cong Date: Thu, 5 Dec 2024 17:30:40 +0800 Subject: [PATCH] perf: use arc str for assets --- crates/rspack_binding_values/src/chunk.rs | 5 ++- .../src/compilation/mod.rs | 38 ++++++++++--------- crates/rspack_binding_values/src/stats.rs | 30 +++++++++------ crates/rspack_binding_values/src/utils.rs | 17 +++++++++ .../rspack_core/src/compiler/compilation.rs | 25 +++++++++++- crates/rspack_core/src/compiler/mod.rs | 5 ++- .../src/compiler/module_executor/execute.rs | 4 +- crates/rspack_core/src/stats/mod.rs | 11 +++--- crates/rspack_core/src/stats/struct.rs | 14 +++---- crates/rspack_core/src/stats/utils.rs | 4 +- crates/rspack_plugin_banner/src/lib.rs | 2 +- crates/rspack_plugin_copy/src/lib.rs | 2 +- .../src/mapped_assets_cache.rs | 10 +++-- .../src/source_map_dev_tool_plugin.rs | 28 +++++++------- .../src/lib_manifest_plugin.rs | 2 +- crates/rspack_plugin_html/src/asset.rs | 5 ++- .../src/plugin/module_concatenation_plugin.rs | 3 +- .../src/lib.rs | 2 +- .../src/lib.rs | 2 +- crates/rspack_plugin_size_limits/src/lib.rs | 16 ++++---- 20 files changed, 141 insertions(+), 84 deletions(-) diff --git a/crates/rspack_binding_values/src/chunk.rs b/crates/rspack_binding_values/src/chunk.rs index 0402e4738ef7..831c48a32189 100644 --- a/crates/rspack_binding_values/src/chunk.rs +++ b/crates/rspack_binding_values/src/chunk.rs @@ -29,9 +29,10 @@ pub struct JsChunk { impl JsChunk { pub fn from(chunk: &rspack_core::Chunk, compilation: &Compilation) -> Self { - let mut files = Vec::from_iter(chunk.files().iter().cloned()); + let mut files = Vec::from_iter(chunk.files().iter().map(ToString::to_string)); files.sort_unstable(); - let mut auxiliary_files = Vec::from_iter(chunk.auxiliary_files().iter().cloned()); + let mut auxiliary_files = + Vec::from_iter(chunk.auxiliary_files().iter().map(ToString::to_string)); auxiliary_files.sort_unstable(); Self { diff --git a/crates/rspack_binding_values/src/compilation/mod.rs b/crates/rspack_binding_values/src/compilation/mod.rs index b10509c8b242..03c6eee12dd6 100644 --- a/crates/rspack_binding_values/src/compilation/mod.rs +++ b/crates/rspack_binding_values/src/compilation/mod.rs @@ -8,6 +8,7 @@ use std::ptr::NonNull; use dependencies::JsDependencies; use entries::JsEntries; +use napi::JsString; use napi_derive::napi; use rspack_collections::IdentifierSet; use rspack_core::rspack_sources::BoxSource; @@ -126,7 +127,7 @@ impl JsCompilation { for (filename, asset) in compilation.assets() { assets.push(JsAsset { - name: filename.clone(), + name: filename.to_string(), info: asset.info.clone().into(), }); } @@ -138,7 +139,7 @@ impl JsCompilation { pub fn get_asset(&self, name: String) -> Result> { let compilation = self.as_ref()?; - match compilation.assets().get(&name) { + match compilation.assets().get(name.as_str()) { Some(asset) => Ok(Some(JsAsset { name, info: asset.info.clone().into(), @@ -157,7 +158,7 @@ impl JsCompilation { compilation .assets() - .get(&name) + .get(name.as_str()) .and_then(|v| v.source.as_ref().map(|s| s.to_js_compat_source(env))) .transpose() } @@ -273,7 +274,7 @@ impl JsCompilation { let compilation = self.as_mut()?; let source: BoxSource = source.into(); - match compilation.assets_mut().entry(name) { + match compilation.assets_mut().entry(name.into()) { std::collections::hash_map::Entry::Occupied(mut e) => e.get_mut().set_source(Some(source)), std::collections::hash_map::Entry::Vacant(e) => { e.insert(rspack_core::CompilationAsset::from(source)); @@ -288,31 +289,28 @@ impl JsCompilation { compilation .assets_mut() - .entry(name) + .entry(name.into()) .and_modify(|a| a.set_source(None)); Ok(()) } #[napi] - pub fn get_asset_filenames(&self) -> Result> { + pub fn get_asset_filenames(&self, env: Env) -> Result> { let compilation = self.as_ref()?; - Ok( - compilation - .assets() - .iter() - .filter(|(_, asset)| asset.get_source().is_some()) - .map(|(filename, _)| filename) - .cloned() - .collect(), - ) + compilation + .assets() + .iter() + .filter(|(_, asset)| asset.get_source().is_some()) + .map(|(filename, _)| env.create_string(filename.as_ref())) + .collect() } #[napi] pub fn has_asset(&self, name: String) -> Result { let compilation = self.as_ref()?; - Ok(compilation.assets().contains_key(&name)) + Ok(compilation.assets().contains_key(name.as_str())) } #[napi] @@ -334,7 +332,7 @@ impl JsCompilation { .module_assets .entry(ModuleIdentifier::from(module)) .or_default() - .insert(filename); + .insert(filename.into()); Ok(()) } @@ -673,7 +671,11 @@ impl JsCompilation { .into_iter() .map(|d| d.to_string_lossy().to_string()) .collect(), - assets: res.assets.into_iter().collect(), + assets: res + .assets + .into_iter() + .map(|asset| asset.to_string()) + .collect(), id: res.id, }; Ok(js_result) diff --git a/crates/rspack_binding_values/src/stats.rs b/crates/rspack_binding_values/src/stats.rs index b1ac4a3c6e5c..eedcfc5fad7f 100644 --- a/crates/rspack_binding_values/src/stats.rs +++ b/crates/rspack_binding_values/src/stats.rs @@ -16,7 +16,7 @@ use rspack_napi::{ use rspack_util::itoa; use rustc_hash::FxHashMap as HashMap; -use crate::{identifier::JsIdentifier, JsCompilation}; +use crate::{identifier::JsIdentifier, JsArcStr, JsCompilation}; thread_local! { static MODULE_DESCRIPTOR_REFS: RefCell>> = Default::default(); @@ -329,7 +329,7 @@ impl From for JsStatsAsset { fn from(stats: rspack_core::StatsAsset) -> Self { Self { r#type: stats.r#type, - name: stats.name, + name: stats.name.to_string(), size: stats.size, chunks: stats.chunks, chunk_names: stats.chunk_names, @@ -715,8 +715,8 @@ pub struct JsStatsSize { #[napi(object, object_from_js = false)] pub struct JsStatsChunk { pub r#type: String, - pub files: Vec, - pub auxiliary_files: Vec, + pub files: Vec, + pub auxiliary_files: Vec, pub id: Option, pub id_hints: Vec, pub hash: Option, @@ -759,8 +759,12 @@ impl TryFrom> for JsStatsChunk { Ok(JsStatsChunk { r#type: stats.r#type.to_string(), - files: stats.files, - auxiliary_files: stats.auxiliary_files, + files: stats.files.into_iter().map(JsArcStr::new).collect(), + auxiliary_files: stats + .auxiliary_files + .into_iter() + .map(JsArcStr::new) + .collect(), id: stats.id, entry: stats.entry, initial: stats.initial, @@ -810,14 +814,14 @@ impl TryFrom> for JsStatsChunk { #[napi(object, object_from_js = false)] pub struct JsStatsChunkGroupAsset { - pub name: String, + pub name: JsArcStr, pub size: f64, } impl From for JsStatsChunkGroupAsset { fn from(stats: rspack_core::StatsChunkGroupAsset) -> Self { Self { - name: stats.name, + name: JsArcStr::new(stats.name), size: stats.size as f64, } } @@ -856,15 +860,17 @@ impl From for JsStatsChunkGroup { #[napi(object, object_from_js = false)] pub struct JsStatsChildGroupChildAssets { - pub preload: Option>, - pub prefetch: Option>, + pub preload: Option>, + pub prefetch: Option>, } impl From for JsStatsChildGroupChildAssets { fn from(stats: rspack_core::StatschunkGroupChildAssets) -> Self { Self { - preload: (!stats.preload.is_empty()).then_some(stats.preload), - prefetch: (!stats.prefetch.is_empty()).then_some(stats.prefetch), + preload: (!stats.preload.is_empty()) + .then_some(stats.preload.into_iter().map(JsArcStr::new).collect()), + prefetch: (!stats.prefetch.is_empty()) + .then_some(stats.prefetch.into_iter().map(JsArcStr::new).collect()), } } } diff --git a/crates/rspack_binding_values/src/utils.rs b/crates/rspack_binding_values/src/utils.rs index 535946d78745..2b1647f3cf66 100644 --- a/crates/rspack_binding_values/src/utils.rs +++ b/crates/rspack_binding_values/src/utils.rs @@ -1,3 +1,5 @@ +use std::sync::Arc; + use futures::Future; use rspack_napi::napi::threadsafe_function::{ThreadsafeFunction, ThreadsafeFunctionCallMode}; use rspack_napi::napi::{bindgen_prelude::*, Env, NapiRaw, Result}; @@ -14,3 +16,18 @@ where }); Ok(()) } + +pub struct JsArcStr(Arc); + +impl JsArcStr { + pub fn new(val: Arc) -> Self { + Self(val) + } +} + +impl ToNapiValue for JsArcStr { + unsafe fn to_napi_value(env: sys::napi_env, val: Self) -> Result { + let env_wrapper = Env::from(env); + ToNapiValue::to_napi_value(env, env_wrapper.create_string(val.0.as_ref())?) + } +} diff --git a/crates/rspack_core/src/compiler/compilation.rs b/crates/rspack_core/src/compiler/compilation.rs index 82256f327d44..979a514383e3 100644 --- a/crates/rspack_core/src/compiler/compilation.rs +++ b/crates/rspack_core/src/compiler/compilation.rs @@ -163,7 +163,7 @@ pub struct Compilation { pub async_entrypoints: Vec, assets: CompilationAssets, pub module_assets: IdentifierMap>>, - pub emitted_assets: DashSet>, + pub emitted_assets: DashSet, BuildHasherDefault>, diagnostics: Vec, logging: CompilationLogging, pub plugin_driver: SharedPluginDriver, @@ -552,6 +552,29 @@ impl Compilation { self.global_entry.include_dependencies.push(entry_id); } + let make_artifact = std::mem::take(&mut self.make_artifact); + self.make_artifact = update_module_graph( + self, + make_artifact, + vec![MakeParam::BuildEntryAndClean( + self + .entries + .values() + .flat_map(|item| item.all_dependencies()) + .chain(self.global_entry.all_dependencies()) + .copied() + .collect(), + )], + ) + .await?; + + // 1. 可以移动 + // 2. add_include 不用管,napi 枷锁 + // 3. finish_make 去调用,rust panic,js throw error + // 4. js finish_make 调用,但是 + + // 1. addtionable + add_include != + Ok(()) } diff --git a/crates/rspack_core/src/compiler/mod.rs b/crates/rspack_core/src/compiler/mod.rs index 48af16c1859a..77c87c1122b8 100644 --- a/crates/rspack_core/src/compiler/mod.rs +++ b/crates/rspack_core/src/compiler/mod.rs @@ -378,7 +378,10 @@ impl Compiler { if need_write { self.output_filesystem.write(&file_path, &content).await?; - self.compilation.emitted_assets.insert(filename.to_string()); + self + .compilation + .emitted_assets + .insert(Arc::from(filename.to_string())); } let info = AssetEmittedInfo { diff --git a/crates/rspack_core/src/compiler/module_executor/execute.rs b/crates/rspack_core/src/compiler/module_executor/execute.rs index bed053ace0a2..21f1bc3c5125 100644 --- a/crates/rspack_core/src/compiler/module_executor/execute.rs +++ b/crates/rspack_core/src/compiler/module_executor/execute.rs @@ -272,8 +272,8 @@ impl Task for ExecuteTask { execute_result.assets.extend( module_assets .values() - .flat_map(|m| m.iter().map(|i| i.to_owned()).collect_vec()) - .collect::>(), + .flat_map(|m| m.iter().map(Clone::clone).collect_vec()) + .collect::>(), ); } let executed_runtime_modules = runtime_modules diff --git a/crates/rspack_core/src/stats/mod.rs b/crates/rspack_core/src/stats/mod.rs index a0adc311b903..c873918a139d 100644 --- a/crates/rspack_core/src/stats/mod.rs +++ b/crates/rspack_core/src/stats/mod.rs @@ -48,9 +48,8 @@ impl<'compilation> Stats<'compilation> { impl Stats<'_> { pub fn get_assets(&self) -> (Vec, Vec) { - let mut compilation_file_to_chunks: HashMap<&String, Vec<&Chunk>> = HashMap::default(); - let mut compilation_file_to_auxiliary_chunks: HashMap<&String, Vec<&Chunk>> = - HashMap::default(); + let mut compilation_file_to_chunks: HashMap<&str, Vec<&Chunk>> = HashMap::default(); + let mut compilation_file_to_auxiliary_chunks: HashMap<&str, Vec<&Chunk>> = HashMap::default(); for chunk in self.compilation.chunk_by_ukey.values() { for file in chunk.files() { let chunks = compilation_file_to_chunks.entry(file).or_default(); @@ -65,7 +64,7 @@ impl Stats<'_> { } } - let mut assets: HashMap<&String, StatsAsset> = self + let mut assets: HashMap<&str, StatsAsset> = self .compilation .assets() .par_iter() @@ -79,7 +78,7 @@ impl Stats<'_> { }) } ( - name, + name.as_ref(), StatsAsset { r#type: "asset", name: name.clone(), @@ -112,7 +111,7 @@ impl Stats<'_> { .collect::>(); for asset in self.compilation.assets().values() { if let Some(source_map) = &asset.get_info().related.source_map { - assets.remove(source_map); + assets.remove(source_map.as_str()); } } assets.par_iter_mut().for_each(|(name, asset)| { diff --git a/crates/rspack_core/src/stats/struct.rs b/crates/rspack_core/src/stats/struct.rs index 12621d72f210..f99360335788 100644 --- a/crates/rspack_core/src/stats/struct.rs +++ b/crates/rspack_core/src/stats/struct.rs @@ -1,5 +1,5 @@ -use std::borrow::Cow; use std::fmt::Debug; +use std::{borrow::Cow, sync::Arc}; use rspack_paths::Utf8PathBuf; use rspack_sources::Source; @@ -90,7 +90,7 @@ pub struct StatsErrorModuleTraceModule { #[derive(Debug)] pub struct StatsAsset { pub r#type: &'static str, - pub name: String, + pub name: Arc, pub size: f64, pub chunks: Vec>, pub chunk_names: Vec, @@ -196,8 +196,8 @@ pub struct StatsOriginRecord { #[derive(Debug)] pub struct StatsChunk<'a> { pub r#type: &'static str, - pub files: Vec, - pub auxiliary_files: Vec, + pub files: Vec>, + pub auxiliary_files: Vec>, pub id: Option, pub entry: bool, pub initial: bool, @@ -219,7 +219,7 @@ pub struct StatsChunk<'a> { #[derive(Debug)] pub struct StatsChunkGroupAsset { - pub name: String, + pub name: Arc, pub size: usize, } @@ -244,8 +244,8 @@ pub struct StatsChunkGroupChildren { #[derive(Debug)] pub struct StatschunkGroupChildAssets { - pub preload: Vec, - pub prefetch: Vec, + pub preload: Vec>, + pub prefetch: Vec>, } #[derive(Debug)] diff --git a/crates/rspack_core/src/stats/utils.rs b/crates/rspack_core/src/stats/utils.rs index 81ac61924f82..37393d77aa20 100644 --- a/crates/rspack_core/src/stats/utils.rs +++ b/crates/rspack_core/src/stats/utils.rs @@ -1,4 +1,4 @@ -use std::borrow::Cow; +use std::{borrow::Cow, sync::Arc}; use itertools::Itertools; use rayon::iter::{IntoParallelRefIterator, ParallelIterator}; @@ -75,7 +75,7 @@ pub fn get_chunk_group_oreded_child_assets( order_key: &ChunkGroupOrderKey, chunk_group_by_ukey: &ChunkGroupByUkey, chunk_by_ukey: &ChunkByUkey, -) -> Vec { +) -> Vec> { ordered_children .get(&ChunkGroupOrderKey::Preload) .unwrap_or_else(|| panic!("should have {order_key} chunk groups")) diff --git a/crates/rspack_plugin_banner/src/lib.rs b/crates/rspack_plugin_banner/src/lib.rs index 6144ec3644fa..125168fa80d8 100644 --- a/crates/rspack_plugin_banner/src/lib.rs +++ b/crates/rspack_plugin_banner/src/lib.rs @@ -203,7 +203,7 @@ async fn process_assets(&self, compilation: &mut Compilation) -> Result<()> { } for (file, comment) in updates { - let _res = compilation.update_asset(file.as_str(), |old, info| { + let _res = compilation.update_asset(file.as_ref(), |old, info| { let new = self.update_source(comment, old, self.config.footer); Ok((new, info)) }); diff --git a/crates/rspack_plugin_copy/src/lib.rs b/crates/rspack_plugin_copy/src/lib.rs index 171654590a22..2a84765a1d81 100644 --- a/crates/rspack_plugin_copy/src/lib.rs +++ b/crates/rspack_plugin_copy/src/lib.rs @@ -624,7 +624,7 @@ async fn process_assets(&self, compilation: &mut Compilation) -> Result<()> { copied_result.sort_unstable_by(|a, b| a.0.cmp(&b.0)); copied_result.into_iter().for_each(|(_priority, result)| { - if let Some(exist_asset) = compilation.assets_mut().get_mut(&result.filename) { + if let Some(exist_asset) = compilation.assets_mut().get_mut(result.filename.as_str()) { if !result.force { return; } diff --git a/crates/rspack_plugin_devtool/src/mapped_assets_cache.rs b/crates/rspack_plugin_devtool/src/mapped_assets_cache.rs index faf5b0c0ef88..369ac55b82e9 100644 --- a/crates/rspack_plugin_devtool/src/mapped_assets_cache.rs +++ b/crates/rspack_plugin_devtool/src/mapped_assets_cache.rs @@ -1,3 +1,5 @@ +use std::sync::Arc; + use dashmap::DashMap; use futures::Future; use rspack_core::CompilationAsset; @@ -6,7 +8,7 @@ use rspack_error::{Error, Result}; use crate::MappedAsset; #[derive(Debug, Clone)] -pub struct MappedAssetsCache(DashMap); +pub struct MappedAssetsCache(DashMap, MappedAsset>); impl MappedAssetsCache { pub fn new() -> Self { @@ -15,11 +17,11 @@ impl MappedAssetsCache { pub async fn use_cache<'a, F, R>( &self, - assets: Vec<(&'a String, &'a CompilationAsset)>, + assets: Vec<(&'a Arc, &'a CompilationAsset)>, map_assets: F, ) -> Result> where - F: FnOnce(Vec<(String, &'a CompilationAsset)>) -> R, + F: FnOnce(Vec<(Arc, &'a CompilationAsset)>) -> R, R: Future, Error>> + Send + 'a, { let mut mapped_asstes: Vec = Vec::with_capacity(assets.len()); @@ -45,7 +47,7 @@ impl MappedAssetsCache { .. } = mapped_asset; if !asset.info.version.is_empty() { - self.0.insert(filename.to_owned(), mapped_asset.clone()); + self.0.insert(filename.clone(), mapped_asset.clone()); } } diff --git a/crates/rspack_plugin_devtool/src/source_map_dev_tool_plugin.rs b/crates/rspack_plugin_devtool/src/source_map_dev_tool_plugin.rs index 222899071522..783437050d86 100644 --- a/crates/rspack_plugin_devtool/src/source_map_dev_tool_plugin.rs +++ b/crates/rspack_plugin_devtool/src/source_map_dev_tool_plugin.rs @@ -95,7 +95,7 @@ enum SourceMappingUrlCommentRef<'a> { #[derive(Debug, Clone)] pub(crate) struct MappedAsset { - pub(crate) asset: (String, CompilationAsset), + pub(crate) asset: (Arc, CompilationAsset), pub(crate) source_map: Option<(String, CompilationAsset)>, } @@ -191,8 +191,8 @@ impl SourceMapDevToolPlugin { async fn map_assets( &self, compilation: &Compilation, - file_to_chunk: &HashMap<&String, &Chunk>, - raw_assets: Vec<(String, &CompilationAsset)>, + file_to_chunk: &HashMap<&str, &Chunk>, + raw_assets: Vec<(Arc, &CompilationAsset)>, ) -> Result> { let output_options = &compilation.options.output; let map_options = MapOptions::new(self.columns); @@ -377,7 +377,7 @@ impl SourceMapDevToolPlugin { let mut asset = compilation .assets() - .get(&filename) + .get(filename.as_ref()) .unwrap_or_else(|| { panic!( "expected to find filename '{}' in compilation.assets, but it was not present", @@ -406,14 +406,14 @@ impl SourceMapDevToolPlugin { }; if let Some(source_map_filename_config) = &self.source_map_filename { - let chunk = file_to_chunk.get(&filename); + let chunk = file_to_chunk.get(filename.as_ref()); let filename = match &self.file_context { Some(file_context) => Cow::Owned( - relative(Path::new(file_context), Path::new(&filename)) + relative(Path::new(file_context), Path::new(filename.as_ref())) .to_string_lossy() .to_string(), ), - None => Cow::Borrowed(&filename), + None => Cow::Borrowed(filename.as_ref()), }; let mut hasher = RspackHash::from(&compilation.options.output); @@ -494,7 +494,7 @@ impl SourceMapDevToolPlugin { source_map_asset_info, ); Ok(MappedAsset { - asset: (filename.to_string(), asset), + asset: (filename.into(), asset), source_map: Some((source_map_filename, source_map_asset)), }) } else { @@ -541,17 +541,17 @@ async fn process_assets(&self, compilation: &mut Compilation) -> Result<()> { let logger = compilation.get_logger("rspack.SourceMapDevToolPlugin"); // use to read - let mut file_to_chunk: HashMap<&String, &Chunk> = HashMap::default(); + let mut file_to_chunk: HashMap<&str, &Chunk> = HashMap::default(); // use to write - let mut file_to_chunk_ukey: HashMap = HashMap::default(); + let mut file_to_chunk_ukey: HashMap, ChunkUkey> = HashMap::default(); for chunk in compilation.chunk_by_ukey.values() { for file in chunk.files() { file_to_chunk.insert(file, chunk); - file_to_chunk_ukey.insert(file.to_string(), chunk.ukey()); + file_to_chunk_ukey.insert(file.clone(), chunk.ukey()); } for file in chunk.auxiliary_files() { file_to_chunk.insert(file, chunk); - file_to_chunk_ukey.insert(file.to_string(), chunk.ukey()); + file_to_chunk_ukey.insert(file.clone(), chunk.ukey()); } } @@ -575,14 +575,14 @@ async fn process_assets(&self, compilation: &mut Compilation) -> Result<()> { asset: (source_filename, mut source_asset), source_map, } = mapped_asset; - if let Some(asset) = compilation.assets_mut().remove(&source_filename) { + if let Some(asset) = compilation.assets_mut().remove(source_filename.as_ref()) { source_asset.info = asset.info; if let Some((ref source_map_filename, _)) = source_map { source_asset.info.related.source_map = Some(source_map_filename.clone()); } } - let chunk_ukey = file_to_chunk_ukey.get(&source_filename); + let chunk_ukey = file_to_chunk_ukey.get(source_filename.as_ref()); compilation.emit_asset(source_filename, source_asset); if let Some((source_map_filename, source_map_asset)) = source_map { compilation.emit_asset(source_map_filename.to_owned(), source_map_asset); diff --git a/crates/rspack_plugin_dll/src/lib_manifest_plugin.rs b/crates/rspack_plugin_dll/src/lib_manifest_plugin.rs index 5be51e182909..4f23a2a887ef 100644 --- a/crates/rspack_plugin_dll/src/lib_manifest_plugin.rs +++ b/crates/rspack_plugin_dll/src/lib_manifest_plugin.rs @@ -171,7 +171,7 @@ async fn emit(&self, compilation: &mut Compilation) -> Result<()> { let asset = Arc::new(RawSource::from(manifest_json)) as BoxSource; - manifests.insert(target_path, asset.into()); + manifests.insert(target_path.into(), asset.into()); } for (filename, asset) in manifests { diff --git a/crates/rspack_plugin_html/src/asset.rs b/crates/rspack_plugin_html/src/asset.rs index bcaf2fcb173d..2fae02c429c2 100644 --- a/crates/rspack_plugin_html/src/asset.rs +++ b/crates/rspack_plugin_html/src/asset.rs @@ -79,7 +79,10 @@ impl HtmlPluginAssets { .map(|entry_name| compilation.entrypoint_by_name(entry_name)) .flat_map(|entry| entry.get_files(&compilation.chunk_by_ukey)) .filter_map(|asset_name| { - let asset = compilation.assets().get(&asset_name).expect("TODO:"); + let asset = compilation + .assets() + .get(asset_name.as_str()) + .expect("TODO:"); if asset.info.hot_module_replacement.unwrap_or(false) || asset.info.development.unwrap_or(false) { diff --git a/crates/rspack_plugin_javascript/src/plugin/module_concatenation_plugin.rs b/crates/rspack_plugin_javascript/src/plugin/module_concatenation_plugin.rs index a3b5f0122355..5a77b0867450 100644 --- a/crates/rspack_plugin_javascript/src/plugin/module_concatenation_plugin.rs +++ b/crates/rspack_plugin_javascript/src/plugin/module_concatenation_plugin.rs @@ -3,6 +3,7 @@ use std::borrow::Cow; use std::collections::hash_map::DefaultHasher; use std::collections::VecDeque; use std::hash::Hasher; +use std::sync::Arc; use rayon::prelude::*; use rspack_collections::{IdentifierDashMap, IdentifierIndexSet, IdentifierMap, IdentifierSet}; @@ -618,7 +619,7 @@ impl ModuleConcatenationPlugin { config.runtime.clone(), compilation, ); - let new_module_assets: HashSet = + let new_module_assets: HashSet> = modules_set.iter().fold(HashSet::default(), |mut acc, id| { acc.extend( compilation diff --git a/crates/rspack_plugin_lightning_css_minimizer/src/lib.rs b/crates/rspack_plugin_lightning_css_minimizer/src/lib.rs index 80148ae82b4b..cfae8c5ec262 100644 --- a/crates/rspack_plugin_lightning_css_minimizer/src/lib.rs +++ b/crates/rspack_plugin_lightning_css_minimizer/src/lib.rs @@ -261,7 +261,7 @@ async fn process_assets(&self, compilation: &mut Compilation) -> Result<()> { let minimized_source = if let Some(mut source_map) = source_map { SourceMapSource::new(SourceMapSourceOptions { value: result.code, - name: filename, + name: filename.to_string(), source_map: SourceMap::from_json( &source_map .to_json(None) diff --git a/crates/rspack_plugin_real_content_hash/src/lib.rs b/crates/rspack_plugin_real_content_hash/src/lib.rs index 4d3602c5c9ba..8f26e64d3d53 100644 --- a/crates/rspack_plugin_real_content_hash/src/lib.rs +++ b/crates/rspack_plugin_real_content_hash/src/lib.rs @@ -93,7 +93,7 @@ fn inner_impl(compilation: &mut Compilation) -> Result<()> { .filter_map(|(name, asset)| { asset.get_source().map(|source| { ( - name.as_str(), + name.as_ref(), AssetData::new(source.clone(), asset.get_info(), &hash_regexp), ) }) diff --git a/crates/rspack_plugin_size_limits/src/lib.rs b/crates/rspack_plugin_size_limits/src/lib.rs index 083b17103412..3767a715401f 100644 --- a/crates/rspack_plugin_size_limits/src/lib.rs +++ b/crates/rspack_plugin_size_limits/src/lib.rs @@ -1,4 +1,4 @@ -use std::{collections::HashMap, fmt::Debug}; +use std::{collections::HashMap, fmt::Debug, sync::Arc}; use derivative::Derivative; use futures::future::BoxFuture; @@ -49,7 +49,7 @@ impl SizeLimitsPlugin { let mut size = 0.0; for filename in entrypoint.get_files(&compilation.chunk_by_ukey) { - let asset = compilation.assets().get(&filename); + let asset = compilation.assets().get(filename.as_str()); if let Some(asset) = asset { if !self.asset_filter(&filename, asset).await { @@ -82,7 +82,7 @@ impl SizeLimitsPlugin { } fn add_assets_over_size_limit_warning( - detail: &[(&String, f64)], + detail: &[(&str, f64)], limit: f64, hints: &str, diagnostics: &mut Vec, @@ -136,7 +136,7 @@ async fn after_emit(&self, compilation: &mut Compilation) -> Result<()> { let hints = &self.options.hints; let max_asset_size = self.options.max_asset_size.unwrap_or(250000.0); let max_entrypoint_size = self.options.max_entrypoint_size.unwrap_or(250000.0); - let mut checked_assets: HashMap = HashMap::default(); + let mut checked_assets: HashMap, bool> = HashMap::default(); let mut checked_chunk_groups: HashMap = HashMap::default(); let mut assets_over_size_limit = vec![]; @@ -152,9 +152,9 @@ async fn after_emit(&self, compilation: &mut Compilation) -> Result<()> { let size = source.size() as f64; let is_over_size_limit = size > max_asset_size; - checked_assets.insert(name.to_owned(), is_over_size_limit); + checked_assets.insert(name.clone(), is_over_size_limit); if is_over_size_limit { - assets_over_size_limit.push((name, size)); + assets_over_size_limit.push((name.as_ref(), size)); } } } @@ -171,7 +171,7 @@ async fn after_emit(&self, compilation: &mut Compilation) -> Result<()> { let mut files = vec![]; for filename in entry.get_files(&compilation.chunk_by_ukey) { - let asset = compilation.assets().get(&filename); + let asset = compilation.assets().get(filename.as_str()); if let Some(asset) = asset { if self.asset_filter(&filename, asset).await { @@ -223,7 +223,7 @@ async fn after_emit(&self, compilation: &mut Compilation) -> Result<()> { } for (name, asset) in compilation.assets_mut() { - if let Some(checked) = checked_assets.get(name) { + if let Some(checked) = checked_assets.get(name.as_ref()) { asset.info.set_is_over_size_limit(*checked) } }