mirror of
https://github.com/denoland/deno.git
synced 2024-12-21 23:04:45 -05:00
perf(cache): compile ts to js in parallel for deno cache
(#23892)
Closes https://github.com/denoland/deno/issues/23860
This commit is contained in:
parent
eb97f110db
commit
c89f9f9ad1
1 changed files with 25 additions and 13 deletions
38
cli/emit.rs
38
cli/emit.rs
|
@ -7,6 +7,9 @@ use crate::cache::ParsedSourceCache;
|
|||
use deno_ast::SourceMapOption;
|
||||
use deno_ast::TranspileResult;
|
||||
use deno_core::error::AnyError;
|
||||
use deno_core::futures::stream::FuturesUnordered;
|
||||
use deno_core::futures::FutureExt;
|
||||
use deno_core::futures::StreamExt;
|
||||
use deno_core::ModuleCodeString;
|
||||
use deno_core::ModuleSpecifier;
|
||||
use deno_graph::MediaType;
|
||||
|
@ -48,28 +51,37 @@ impl Emitter {
|
|||
&self,
|
||||
graph: &ModuleGraph,
|
||||
) -> Result<(), AnyError> {
|
||||
// todo(dsherret): we could do this concurrently
|
||||
let mut futures = FuturesUnordered::new();
|
||||
for module in graph.modules() {
|
||||
if let Module::Js(module) = module {
|
||||
let is_emittable = matches!(
|
||||
module.media_type,
|
||||
MediaType::TypeScript
|
||||
| MediaType::Mts
|
||||
| MediaType::Cts
|
||||
| MediaType::Jsx
|
||||
| MediaType::Tsx
|
||||
);
|
||||
if is_emittable {
|
||||
let Module::Js(module) = module else {
|
||||
continue;
|
||||
};
|
||||
|
||||
let is_emittable = matches!(
|
||||
module.media_type,
|
||||
MediaType::TypeScript
|
||||
| MediaType::Mts
|
||||
| MediaType::Cts
|
||||
| MediaType::Jsx
|
||||
| MediaType::Tsx
|
||||
);
|
||||
if is_emittable {
|
||||
futures.push(
|
||||
self
|
||||
.emit_parsed_source(
|
||||
&module.specifier,
|
||||
module.media_type,
|
||||
&module.source,
|
||||
)
|
||||
.await?;
|
||||
}
|
||||
.boxed_local(),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
while let Some(result) = futures.next().await {
|
||||
result?; // surface errors
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue