Skip to content

Commit 2a903bd

Browse files
committed
perf: negative cache package.json
1 parent 7ef6bca commit 2a903bd

File tree

3 files changed

+34
-6
lines changed

3 files changed

+34
-6
lines changed

src/rs_lib/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.

src/rs_lib/Cargo.toml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,11 @@ path = "../../deno/libs/npm_cache"
5252
path = "../../deno/libs/npm_installer"
5353
default-features = false
5454

55+
[dependencies.deno_package_json]
56+
path = "../../deno/libs/package_json"
57+
features = ["sync"]
58+
59+
5560
[dependencies.deno_resolver]
5661
path = "../../deno/libs/resolver"
5762
features = ["deno_ast","graph","sync"]
@@ -76,4 +81,4 @@ features = ["real","wasm"]
7681
codegen-units = 1
7782
incremental = true
7883
lto = true
79-
opt-level = "z"
84+
opt-level = 3

src/rs_lib/lib.rs

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ use std::path::Path;
77
use std::path::PathBuf;
88
use std::rc::Rc;
99
use std::sync::Arc;
10+
use std::sync::Mutex;
1011
use std::sync::OnceLock;
1112

1213
use anyhow::Context;
@@ -31,6 +32,8 @@ use deno_npm_installer::NpmInstallerFactory;
3132
use deno_npm_installer::NpmInstallerFactoryOptions;
3233
use deno_npm_installer::Reporter;
3334
use deno_npm_installer::lifecycle_scripts::NullLifecycleScriptsExecutor;
35+
use deno_package_json::PackageJsonCacheResult;
36+
use deno_package_json::PackageJsonRc;
3437
use deno_resolver::DenoResolveError;
3538
use deno_resolver::DenoResolveErrorKind;
3639
use deno_resolver::cache::ParsedSourceCache;
@@ -71,7 +74,6 @@ use log::Metadata;
7174
use log::Record;
7275
use node_resolver::NodeConditionOptions;
7376
use node_resolver::NodeResolverOptions;
74-
use node_resolver::PackageJsonThreadLocalCache;
7577
use node_resolver::analyze::NodeCodeTranslatorMode;
7678
use node_resolver::cache::NodeResolutionThreadLocalCache;
7779
use node_resolver::errors::NodeJsErrorCode;
@@ -186,9 +188,29 @@ pub struct DenoWorkspace {
186188
workspace_factory: Arc<WorkspaceFactory<RealSys>>,
187189
}
188190

189-
impl Drop for DenoWorkspace {
190-
fn drop(&mut self) {
191-
PackageJsonThreadLocalCache::clear();
191+
#[derive(Debug)]
192+
pub struct PackageJsonOwnedCache {
193+
map: Mutex<std::collections::HashMap<PathBuf, Option<PackageJsonRc>>>,
194+
}
195+
196+
impl PackageJsonOwnedCache {
197+
pub fn new() -> Self {
198+
Self {
199+
map: Mutex::new(std::collections::HashMap::new()),
200+
}
201+
}
202+
}
203+
204+
impl deno_package_json::PackageJsonCache for PackageJsonOwnedCache {
205+
fn get(&self, path: &Path) -> PackageJsonCacheResult {
206+
self.map.lock().unwrap().get(path).cloned().map_or_else(
207+
|| PackageJsonCacheResult::NotCached,
208+
|value| PackageJsonCacheResult::Hit(value),
209+
)
210+
}
211+
212+
fn set(&self, path: PathBuf, package_json: Option<PackageJsonRc>) {
213+
self.map.lock().unwrap().insert(path, package_json);
192214
}
193215
}
194216

@@ -299,7 +321,7 @@ impl DenoWorkspace {
299321
node_analysis_cache: None,
300322
node_code_translator_mode: NodeCodeTranslatorMode::Disabled,
301323
node_resolution_cache: Some(Arc::new(NodeResolutionThreadLocalCache)),
302-
package_json_cache: Some(Arc::new(PackageJsonThreadLocalCache)),
324+
package_json_cache: Some(Arc::new(PackageJsonOwnedCache::new())),
303325
package_json_dep_resolution: None,
304326
specified_import_map: None,
305327
bare_node_builtins: true,

0 commit comments

Comments
 (0)