From 4380a09a0598c73aa434e2f0f3a34555e0bd55cb Mon Sep 17 00:00:00 2001 From: Matt Mastracci Date: Tue, 15 Aug 2023 13:36:36 -0600 Subject: feat(ext/node): eagerly bootstrap node (#20153) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit To fix bugs around detection of when node emulation is required, we will just eagerly initialize it. The improvements we make to reduce the impact of the startup time: - [x] Process stdin/stdout/stderr are lazily created - [x] node.js global proxy no longer allocates on each access check - [x] Process checks for `beforeExit` listeners before doing expensive shutdown work - [x] Process should avoid adding global event handlers until listeners are added Benchmarking this PR (`89de7e1ff`) vs main (`41cad2179`) ``` 12:36 $ third_party/prebuilt/mac/hyperfine --warmup 100 -S none './deno-41cad2179 run ./empty.js' './deno-89de7e1ff run ./empty.js' Benchmark 1: ./deno-41cad2179 run ./empty.js Time (mean ± σ): 24.3 ms ± 1.6 ms [User: 16.2 ms, System: 6.0 ms] Range (min … max): 21.1 ms … 29.1 ms 115 runs Benchmark 2: ./deno-89de7e1ff run ./empty.js Time (mean ± σ): 24.0 ms ± 1.4 ms [User: 16.3 ms, System: 5.6 ms] Range (min … max): 21.3 ms … 28.6 ms 126 runs ``` Fixes https://github.com/denoland/deno/issues/20142 Fixes https://github.com/denoland/deno/issues/15826 Fixes https://github.com/denoland/deno/issues/20028 --- cli/standalone/mod.rs | 10 ---------- 1 file changed, 10 deletions(-) (limited to 'cli/standalone') diff --git a/cli/standalone/mod.rs b/cli/standalone/mod.rs index 92aba6d29..f6c489487 100644 --- a/cli/standalone/mod.rs +++ b/cli/standalone/mod.rs @@ -26,7 +26,6 @@ use crate::util::progress_bar::ProgressBarStyle; use crate::util::v8::construct_v8_flags; use crate::worker::CliMainWorkerFactory; use crate::worker::CliMainWorkerOptions; -use crate::worker::HasNodeSpecifierChecker; use crate::worker::ModuleLoaderFactory; use deno_ast::MediaType; use deno_core::anyhow::Context; @@ -266,14 +265,6 @@ impl ModuleLoaderFactory for StandaloneModuleLoaderFactory { } } -struct StandaloneHasNodeSpecifierChecker; - -impl HasNodeSpecifierChecker for StandaloneHasNodeSpecifierChecker { - fn has_node_specifier(&self) -> bool { - false - } -} - struct StandaloneRootCertStoreProvider { ca_stores: Option>, ca_data: Option, @@ -438,7 +429,6 @@ pub async fn run( StorageKeyResolver::empty(), npm_resolver.clone(), node_resolver, - Box::new(StandaloneHasNodeSpecifierChecker), Default::default(), Box::new(module_loader_factory), root_cert_store_provider, -- cgit v1.2.3