Skip to content

Commit 0425324

Browse files
committed
perf: negative cache package.json
1 parent 92bcb58 commit 0425324

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
@@ -56,6 +56,11 @@ path = "../../deno/libs/npm_cache"
5656
path = "../../deno/libs/npm_installer"
5757
default-features = false
5858

59+
[dependencies.deno_package_json]
60+
path = "../../deno/libs/package_json"
61+
features = ["sync"]
62+
63+
5964
[dependencies.deno_resolver]
6065
path = "../../deno/libs/resolver"
6166
features = ["deno_ast","graph","sync"]
@@ -80,4 +85,4 @@ features = ["real","wasm"]
8085
codegen-units = 1
8186
incremental = true
8287
lto = true
83-
opt-level = "z"
88+
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;
@@ -188,9 +190,29 @@ pub struct DenoWorkspace {
188190
workspace_factory: Arc<WorkspaceFactory<RealSys>>,
189191
}
190192

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

@@ -301,7 +323,7 @@ impl DenoWorkspace {
301323
node_analysis_cache: None,
302324
node_code_translator_mode: NodeCodeTranslatorMode::Disabled,
303325
node_resolution_cache: Some(Arc::new(NodeResolutionThreadLocalCache)),
304-
package_json_cache: Some(Arc::new(PackageJsonThreadLocalCache)),
326+
package_json_cache: Some(Arc::new(PackageJsonOwnedCache::new())),
305327
package_json_dep_resolution: None,
306328
specified_import_map: None,
307329
bare_node_builtins: true,

0 commit comments

Comments
 (0)