Skip to content

Commit

Permalink
perf: parse source files in parallel (denoland#23858)
Browse files Browse the repository at this point in the history
  • Loading branch information
dsherret committed May 28, 2024
1 parent 3e8f29a commit 57617af
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 10 deletions.
22 changes: 15 additions & 7 deletions cli/cache/module_info.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,14 @@ use deno_ast::ModuleSpecifier;
use deno_core::error::AnyError;
use deno_core::serde_json;
use deno_graph::ModuleInfo;
use deno_graph::ModuleParser;
use deno_graph::ParserModuleAnalyzer;
use deno_runtime::deno_webstorage::rusqlite::params;

use super::cache_db::CacheDB;
use super::cache_db::CacheDBConfiguration;
use super::cache_db::CacheFailure;
use super::FastInsecureHasher;
use super::ParsedSourceCache;

const SELECT_MODULE_INFO: &str = "
SELECT
Expand Down Expand Up @@ -136,18 +136,18 @@ impl ModuleInfoCache {

pub fn as_module_analyzer<'a>(
&'a self,
parser: &'a dyn ModuleParser,
parsed_source_cache: &'a Arc<ParsedSourceCache>,
) -> ModuleInfoCacheModuleAnalyzer<'a> {
ModuleInfoCacheModuleAnalyzer {
module_info_cache: self,
parser,
parsed_source_cache,
}
}
}

pub struct ModuleInfoCacheModuleAnalyzer<'a> {
module_info_cache: &'a ModuleInfoCache,
parser: &'a dyn ModuleParser,
parsed_source_cache: &'a Arc<ParsedSourceCache>,
}

#[async_trait::async_trait(?Send)]
Expand Down Expand Up @@ -177,9 +177,17 @@ impl<'a> deno_graph::ModuleAnalyzer for ModuleInfoCacheModuleAnalyzer<'a> {
}

// otherwise, get the module info from the parsed source cache
// todo(23858): take advantage of this being async
let analyzer = ParserModuleAnalyzer::new(self.parser);
let module_info = analyzer.analyze(specifier, source, media_type).await?;
let module_info = deno_core::unsync::spawn_blocking({
let cache = self.parsed_source_cache.clone();
let specifier = specifier.clone();
move || {
let parser = cache.as_capturing_parser();
let analyzer = ParserModuleAnalyzer::new(&parser);
analyzer.analyze_sync(&specifier, source, media_type)
}
})
.await
.unwrap()?;

// then attempt to cache it
if let Err(err) = self.module_info_cache.set_module_info(
Expand Down
5 changes: 3 additions & 2 deletions cli/graph_util.rs
Original file line number Diff line number Diff line change
Expand Up @@ -470,8 +470,9 @@ impl ModuleGraphBuilder {
}

let maybe_imports = self.options.to_maybe_imports()?;
let parser = self.parsed_source_cache.as_capturing_parser();
let analyzer = self.module_info_cache.as_module_analyzer(&parser);
let analyzer = self
.module_info_cache
.as_module_analyzer(&self.parsed_source_cache);
let mut loader = match options.loader {
Some(loader) => MutLoaderRef::Borrowed(loader),
None => MutLoaderRef::Owned(self.create_graph_loader()),
Expand Down
2 changes: 1 addition & 1 deletion cli/tools/doc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ pub async fn doc(flags: Flags, doc_flags: DocFlags) -> Result<(), AnyError> {
let module_info_cache = factory.module_info_cache()?;
let parsed_source_cache = factory.parsed_source_cache();
let capturing_parser = parsed_source_cache.as_capturing_parser();
let analyzer = module_info_cache.as_module_analyzer(&capturing_parser);
let analyzer = module_info_cache.as_module_analyzer(parsed_source_cache);

let doc_nodes_by_url = match doc_flags.source_files {
DocSourceFileFlag::Builtin => {
Expand Down

0 comments on commit 57617af

Please sign in to comment.