Skip to content

Commit 9b14875

Browse files
committed
perf: IdentifierQueue
1 parent 0b2623d commit 9b14875

File tree

5 files changed

+34
-26
lines changed

5 files changed

+34
-26
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/rspack_core/src/exports_info.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1973,7 +1973,7 @@ fn resolve_target(
19731973
if already_visited.contains(&export_info_hash_key) {
19741974
return Some(ResolvedExportInfoTargetWithCircular::Circular);
19751975
}
1976-
let new_target = export_info.get_target_impl(mg, resolve_filter.clone(), already_visited);
1976+
let new_target = export_info.get_target_impl(mg, resolve_filter, already_visited);
19771977

19781978
match new_target {
19791979
Some(ResolvedExportInfoTargetWithCircular::Circular) => {

crates/rspack_plugin_javascript/src/plugin/flag_dependency_exports_plugin.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use rspack_core::{
99
};
1010
use rspack_error::Result;
1111
use rspack_hook::{plugin, plugin_hook};
12-
use rspack_util::queue::Queue;
12+
use rspack_util::queue::IdentifierQueue;
1313
use swc_core::ecma::atoms::Atom;
1414

1515
pub struct FlagDependencyExportsState<'a> {
@@ -34,7 +34,7 @@ impl<'a> FlagDependencyExportsState<'a> {
3434
pub fn apply(&mut self, modules: IdentifierSet) {
3535
let start = self.logger.time("traverse modules");
3636

37-
let mut q = Queue::new();
37+
let mut q = IdentifierQueue::new();
3838

3939
for module_id in modules {
4040
let mgm = self
@@ -99,7 +99,7 @@ impl<'a> FlagDependencyExportsState<'a> {
9999
}
100100

101101
// #[tracing::instrument(skip_all, fields(module = ?self.current_module_id))]
102-
pub fn notify_dependencies(&mut self, q: &mut Queue<ModuleIdentifier>) {
102+
pub fn notify_dependencies(&mut self, q: &mut IdentifierQueue) {
103103
if let Some(set) = self.dependencies.get(&self.current_module_id) {
104104
for mi in set.iter() {
105105
q.enqueue(*mi);
@@ -121,7 +121,7 @@ impl<'a> FlagDependencyExportsState<'a> {
121121
block: &B,
122122
exports_specs_from_dependencies: &mut UkeyIndexMap<DependencyId, ExportsSpec>,
123123
) -> Option<()> {
124-
for dep_id in block.get_dependencies().iter() {
124+
for dep_id in block.get_dependencies() {
125125
let dep = self
126126
.mg
127127
.dependency_by_id(dep_id)

crates/rspack_util/Cargo.toml

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,22 @@ version = "0.2.0"
99
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
1010

1111
[dependencies]
12-
bitflags = { workspace = true }
13-
concat-string = { workspace = true }
14-
cow-utils = { workspace = true }
15-
dashmap = { workspace = true }
16-
indexmap = { workspace = true }
17-
itoa = { version = "1.0.14" }
18-
regex = { workspace = true }
19-
ropey = { workspace = true }
20-
rspack_cacheable = { workspace = true }
21-
rspack_paths = { workspace = true }
22-
rustc-hash = { workspace = true }
23-
serde = { workspace = true }
24-
serde_json = { workspace = true }
25-
sugar_path = { workspace = true }
26-
unicase = { workspace = true }
12+
bitflags = { workspace = true }
13+
concat-string = { workspace = true }
14+
cow-utils = { workspace = true }
15+
dashmap = { workspace = true }
16+
indexmap = { workspace = true }
17+
itoa = { version = "1.0.14" }
18+
regex = { workspace = true }
19+
ropey = { workspace = true }
20+
rspack_cacheable = { workspace = true }
21+
rspack_collections = { workspace = true }
22+
rspack_paths = { workspace = true }
23+
rustc-hash = { workspace = true }
24+
serde = { workspace = true }
25+
serde_json = { workspace = true }
26+
sugar_path = { workspace = true }
27+
unicase = { workspace = true }
2728

2829
swc_config = { workspace = true }
2930
swc_core = { workspace = true, features = ["base", "ecma_ast"] }

crates/rspack_util/src/queue.rs

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
1-
use std::{collections::VecDeque, hash::Hash};
1+
use std::{
2+
collections::{HashSet, VecDeque},
3+
hash::{BuildHasher, BuildHasherDefault, Hash},
4+
};
25

3-
use rustc_hash::FxHashSet as HashSet;
6+
use rspack_collections::{Identifier, IdentifierHasher};
7+
use rustc_hash::FxBuildHasher;
48

5-
pub struct Queue<T: Hash + PartialEq + Eq + Clone> {
9+
pub struct Queue<T: Hash + PartialEq + Eq + Clone, S = FxBuildHasher> {
610
q: VecDeque<T>,
7-
set: HashSet<T>,
11+
set: HashSet<T, S>,
812
}
913

1014
impl<T: Hash + PartialEq + Eq + Clone> Default for Queue<T> {
@@ -13,11 +17,11 @@ impl<T: Hash + PartialEq + Eq + Clone> Default for Queue<T> {
1317
}
1418
}
1519

16-
impl<T: Hash + PartialEq + Eq + Clone> Queue<T> {
20+
impl<T: Hash + PartialEq + Eq + Clone, S: BuildHasher + Default> Queue<T, S> {
1721
pub fn new() -> Self {
1822
Self {
1923
q: VecDeque::default(),
20-
set: HashSet::default(),
24+
set: HashSet::<T, S>::default(),
2125
}
2226
}
2327

@@ -36,3 +40,5 @@ impl<T: Hash + PartialEq + Eq + Clone> Queue<T> {
3640
None
3741
}
3842
}
43+
44+
pub type IdentifierQueue = Queue<Identifier, BuildHasherDefault<IdentifierHasher>>;

0 commit comments

Comments
 (0)