Skip to content

Commit c518a8a

Browse files
stormslowlyCopilot
andauthored
refactor: disable pnp when bench (#134)
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
1 parent 8238fcf commit c518a8a

File tree

3 files changed

+66
-44
lines changed

3 files changed

+66
-44
lines changed

benches/resolver.rs

Lines changed: 55 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use std::{
88
};
99

1010
use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion};
11-
use rspack_resolver::{ResolveOptions, Resolver};
11+
use rspack_resolver::{FileSystemOptions, FileSystemOs, ResolveOptions, Resolver};
1212
use serde_json::Value;
1313
use tokio::{
1414
runtime::{self, Builder},
@@ -53,43 +53,54 @@ fn create_symlinks() -> io::Result<PathBuf> {
5353
Ok(temp_path)
5454
}
5555

56-
fn rspack_resolver() -> rspack_resolver::Resolver {
56+
fn rspack_resolver(enable_pnp: bool) -> rspack_resolver::Resolver {
5757
use rspack_resolver::{AliasValue, ResolveOptions, Resolver};
5858
let alias_value = AliasValue::from("./");
59-
Resolver::new(ResolveOptions {
60-
extensions: vec![".ts".into(), ".js".into(), ".mjs".into()],
61-
condition_names: vec!["import".into(), "webpack".into(), "require".into()],
62-
alias_fields: vec![vec!["browser".into()]],
63-
extension_alias: vec![(".js".into(), vec![".ts".into(), ".js".into()])],
64-
// Real projects LOVE setting these many aliases.
65-
// I saw them with my own eyes.
66-
alias: vec![
67-
("/absolute/path".into(), vec![alias_value.clone()]),
68-
("aaa".into(), vec![alias_value.clone()]),
69-
("bbb".into(), vec![alias_value.clone()]),
70-
("ccc".into(), vec![alias_value.clone()]),
71-
("ddd".into(), vec![alias_value.clone()]),
72-
("eee".into(), vec![alias_value.clone()]),
73-
("fff".into(), vec![alias_value.clone()]),
74-
("ggg".into(), vec![alias_value.clone()]),
75-
("hhh".into(), vec![alias_value.clone()]),
76-
("iii".into(), vec![alias_value.clone()]),
77-
("jjj".into(), vec![alias_value.clone()]),
78-
("kkk".into(), vec![alias_value.clone()]),
79-
("lll".into(), vec![alias_value.clone()]),
80-
("mmm".into(), vec![alias_value.clone()]),
81-
("nnn".into(), vec![alias_value.clone()]),
82-
("ooo".into(), vec![alias_value.clone()]),
83-
("ppp".into(), vec![alias_value.clone()]),
84-
("qqq".into(), vec![alias_value.clone()]),
85-
("rrr".into(), vec![alias_value.clone()]),
86-
("sss".into(), vec![alias_value.clone()]),
87-
("@".into(), vec![alias_value.clone()]),
88-
("@@".into(), vec![alias_value.clone()]),
89-
("@@@".into(), vec![alias_value]),
90-
],
91-
..ResolveOptions::default()
92-
})
59+
60+
let fs = FileSystemOs::new(FileSystemOptions {
61+
#[cfg(feature = "yarn_pnp")]
62+
enable_pnp,
63+
});
64+
65+
Resolver::new_with_file_system(
66+
fs,
67+
ResolveOptions {
68+
#[cfg(feature = "yarn_pnp")]
69+
enable_pnp,
70+
extensions: vec![".ts".into(), ".js".into(), ".mjs".into()],
71+
condition_names: vec!["import".into(), "webpack".into(), "require".into()],
72+
alias_fields: vec![vec!["browser".into()]],
73+
extension_alias: vec![(".js".into(), vec![".ts".into(), ".js".into()])],
74+
// Real projects LOVE setting these many aliases.
75+
// I saw them with my own eyes.
76+
alias: vec![
77+
("/absolute/path".into(), vec![alias_value.clone()]),
78+
("aaa".into(), vec![alias_value.clone()]),
79+
("bbb".into(), vec![alias_value.clone()]),
80+
("ccc".into(), vec![alias_value.clone()]),
81+
("ddd".into(), vec![alias_value.clone()]),
82+
("eee".into(), vec![alias_value.clone()]),
83+
("fff".into(), vec![alias_value.clone()]),
84+
("ggg".into(), vec![alias_value.clone()]),
85+
("hhh".into(), vec![alias_value.clone()]),
86+
("iii".into(), vec![alias_value.clone()]),
87+
("jjj".into(), vec![alias_value.clone()]),
88+
("kkk".into(), vec![alias_value.clone()]),
89+
("lll".into(), vec![alias_value.clone()]),
90+
("mmm".into(), vec![alias_value.clone()]),
91+
("nnn".into(), vec![alias_value.clone()]),
92+
("ooo".into(), vec![alias_value.clone()]),
93+
("ppp".into(), vec![alias_value.clone()]),
94+
("qqq".into(), vec![alias_value.clone()]),
95+
("rrr".into(), vec![alias_value.clone()]),
96+
("sss".into(), vec![alias_value.clone()]),
97+
("@".into(), vec![alias_value.clone()]),
98+
("@@".into(), vec![alias_value.clone()]),
99+
("@@@".into(), vec![alias_value]),
100+
],
101+
..ResolveOptions::default()
102+
},
103+
)
93104
}
94105

95106
fn resolver_with_many_extensions() -> rspack_resolver::Resolver {
@@ -115,6 +126,7 @@ fn resolver_with_many_extensions() -> rspack_resolver::Resolver {
115126
],
116127
imports_fields: vec![],
117128
exports_fields: vec![],
129+
enable_pnp: false,
118130
..Default::default()
119131
})
120132
}
@@ -145,7 +157,7 @@ fn bench_resolver(c: &mut Criterion) {
145157
// check validity
146158
runtime::Builder::new_current_thread().enable_all().build().unwrap().block_on(async {
147159
for (path, request) in &data {
148-
let r = rspack_resolver().resolve(path, request).await;
160+
let r = rspack_resolver(false).resolve(path, request).await;
149161
if !r.is_ok() {
150162
panic!("resolve failed {path:?} {request},\n\nplease run `pnpm install --ignore-workspace` in `/benches` before running the benchmarks");
151163
}
@@ -164,7 +176,7 @@ fn bench_resolver(c: &mut Criterion) {
164176
.block_on(async {
165177
for i in symlinks_range.clone() {
166178
assert!(
167-
rspack_resolver()
179+
rspack_resolver(false)
168180
.resolve(&symlink_test_dir, &format!("./file{i}"))
169181
.await
170182
.is_ok(),
@@ -196,7 +208,7 @@ fn bench_resolver(c: &mut Criterion) {
196208
let runner = runtime::Builder::new_current_thread()
197209
.build()
198210
.expect("failed to create tokio runtime");
199-
let rspack_resolver = rspack_resolver();
211+
let rspack_resolver = rspack_resolver(false);
200212

201213
b.to_async(runner).iter_with_setup(
202214
|| {
@@ -240,7 +252,7 @@ fn bench_resolver(c: &mut Criterion) {
240252
&data,
241253
|b, data| {
242254
let runner = multi_rt();
243-
let rspack_resolver = Arc::new(rspack_resolver());
255+
let rspack_resolver = Arc::new(rspack_resolver(false));
244256

245257
b.iter_with_setup(
246258
|| {
@@ -268,7 +280,7 @@ fn bench_resolver(c: &mut Criterion) {
268280
&symlinks_range,
269281
|b, data| {
270282
let runner = runtime::Runtime::new().expect("failed to create tokio runtime");
271-
let rspack_resolver = rspack_resolver();
283+
let rspack_resolver = rspack_resolver(false);
272284

273285
b.to_async(runner).iter_with_setup(
274286
|| {
@@ -294,7 +306,7 @@ fn bench_resolver(c: &mut Criterion) {
294306
&symlinks_range,
295307
|b, data| {
296308
let runner = multi_rt();
297-
let rspack_resolver = Arc::new(rspack_resolver());
309+
let rspack_resolver = Arc::new(rspack_resolver(false));
298310

299311
let symlink_test_dir = symlink_test_dir.clone();
300312

@@ -321,7 +333,7 @@ fn bench_resolver(c: &mut Criterion) {
321333
&root_range,
322334
|b, data| {
323335
let runner = runtime::Runtime::new().expect("failed to create tokio runtime");
324-
let rspack_resolver = Arc::new(rspack_resolver());
336+
let rspack_resolver = Arc::new(rspack_resolver(true));
325337

326338
b.to_async(runner).iter_with_setup(
327339
|| {

src/file_system.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,16 @@ impl Default for FileSystemOs {
130130
}
131131
}
132132

133+
impl FileSystemOs {
134+
pub fn new(options: FileSystemOptions) -> Self {
135+
Self {
136+
options,
137+
#[cfg(feature = "yarn_pnp")]
138+
pnp_lru: LruZipCache::new(50, pnp::fs::open_zip_via_read_p),
139+
}
140+
}
141+
}
142+
133143
#[cfg(not(target_arch = "wasm32"))]
134144
#[async_trait::async_trait]
135145
impl FileSystem for FileSystemOs {

src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ use rustc_hash::FxHashSet;
7878
pub use crate::{
7979
builtins::NODEJS_BUILTINS,
8080
error::{JSONError, ResolveError, SpecifierError},
81-
file_system::{FileMetadata, FileSystem, FileSystemOs},
81+
file_system::{FileMetadata, FileSystem, FileSystemOptions, FileSystemOs},
8282
options::{
8383
Alias, AliasValue, EnforceExtension, ResolveOptions, Restriction, TsconfigOptions,
8484
TsconfigReferences,

0 commit comments

Comments
 (0)