mirror of
https://github.com/denoland/deno.git
synced 2024-11-24 15:19:26 -05:00
perf: parse source files in parallel (#23858)
This commit is contained in:
parent
3e8f29ae41
commit
57617af16a
3 changed files with 19 additions and 10 deletions
22
cli/cache/module_info.rs
vendored
22
cli/cache/module_info.rs
vendored
|
@ -7,7 +7,6 @@ use deno_ast::ModuleSpecifier;
|
||||||
use deno_core::error::AnyError;
|
use deno_core::error::AnyError;
|
||||||
use deno_core::serde_json;
|
use deno_core::serde_json;
|
||||||
use deno_graph::ModuleInfo;
|
use deno_graph::ModuleInfo;
|
||||||
use deno_graph::ModuleParser;
|
|
||||||
use deno_graph::ParserModuleAnalyzer;
|
use deno_graph::ParserModuleAnalyzer;
|
||||||
use deno_runtime::deno_webstorage::rusqlite::params;
|
use deno_runtime::deno_webstorage::rusqlite::params;
|
||||||
|
|
||||||
|
@ -15,6 +14,7 @@ use super::cache_db::CacheDB;
|
||||||
use super::cache_db::CacheDBConfiguration;
|
use super::cache_db::CacheDBConfiguration;
|
||||||
use super::cache_db::CacheFailure;
|
use super::cache_db::CacheFailure;
|
||||||
use super::FastInsecureHasher;
|
use super::FastInsecureHasher;
|
||||||
|
use super::ParsedSourceCache;
|
||||||
|
|
||||||
const SELECT_MODULE_INFO: &str = "
|
const SELECT_MODULE_INFO: &str = "
|
||||||
SELECT
|
SELECT
|
||||||
|
@ -136,18 +136,18 @@ impl ModuleInfoCache {
|
||||||
|
|
||||||
pub fn as_module_analyzer<'a>(
|
pub fn as_module_analyzer<'a>(
|
||||||
&'a self,
|
&'a self,
|
||||||
parser: &'a dyn ModuleParser,
|
parsed_source_cache: &'a Arc<ParsedSourceCache>,
|
||||||
) -> ModuleInfoCacheModuleAnalyzer<'a> {
|
) -> ModuleInfoCacheModuleAnalyzer<'a> {
|
||||||
ModuleInfoCacheModuleAnalyzer {
|
ModuleInfoCacheModuleAnalyzer {
|
||||||
module_info_cache: self,
|
module_info_cache: self,
|
||||||
parser,
|
parsed_source_cache,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct ModuleInfoCacheModuleAnalyzer<'a> {
|
pub struct ModuleInfoCacheModuleAnalyzer<'a> {
|
||||||
module_info_cache: &'a ModuleInfoCache,
|
module_info_cache: &'a ModuleInfoCache,
|
||||||
parser: &'a dyn ModuleParser,
|
parsed_source_cache: &'a Arc<ParsedSourceCache>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[async_trait::async_trait(?Send)]
|
#[async_trait::async_trait(?Send)]
|
||||||
|
@ -177,9 +177,17 @@ impl<'a> deno_graph::ModuleAnalyzer for ModuleInfoCacheModuleAnalyzer<'a> {
|
||||||
}
|
}
|
||||||
|
|
||||||
// otherwise, get the module info from the parsed source cache
|
// otherwise, get the module info from the parsed source cache
|
||||||
// todo(23858): take advantage of this being async
|
let module_info = deno_core::unsync::spawn_blocking({
|
||||||
let analyzer = ParserModuleAnalyzer::new(self.parser);
|
let cache = self.parsed_source_cache.clone();
|
||||||
let module_info = analyzer.analyze(specifier, source, media_type).await?;
|
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
|
// then attempt to cache it
|
||||||
if let Err(err) = self.module_info_cache.set_module_info(
|
if let Err(err) = self.module_info_cache.set_module_info(
|
||||||
|
|
|
@ -470,8 +470,9 @@ impl ModuleGraphBuilder {
|
||||||
}
|
}
|
||||||
|
|
||||||
let maybe_imports = self.options.to_maybe_imports()?;
|
let maybe_imports = self.options.to_maybe_imports()?;
|
||||||
let parser = self.parsed_source_cache.as_capturing_parser();
|
let analyzer = self
|
||||||
let analyzer = self.module_info_cache.as_module_analyzer(&parser);
|
.module_info_cache
|
||||||
|
.as_module_analyzer(&self.parsed_source_cache);
|
||||||
let mut loader = match options.loader {
|
let mut loader = match options.loader {
|
||||||
Some(loader) => MutLoaderRef::Borrowed(loader),
|
Some(loader) => MutLoaderRef::Borrowed(loader),
|
||||||
None => MutLoaderRef::Owned(self.create_graph_loader()),
|
None => MutLoaderRef::Owned(self.create_graph_loader()),
|
||||||
|
|
|
@ -89,7 +89,7 @@ pub async fn doc(flags: Flags, doc_flags: DocFlags) -> Result<(), AnyError> {
|
||||||
let module_info_cache = factory.module_info_cache()?;
|
let module_info_cache = factory.module_info_cache()?;
|
||||||
let parsed_source_cache = factory.parsed_source_cache();
|
let parsed_source_cache = factory.parsed_source_cache();
|
||||||
let capturing_parser = parsed_source_cache.as_capturing_parser();
|
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 {
|
let doc_nodes_by_url = match doc_flags.source_files {
|
||||||
DocSourceFileFlag::Builtin => {
|
DocSourceFileFlag::Builtin => {
|
||||||
|
|
Loading…
Reference in a new issue