diff options
author | Matt Mastracci <matthew@mastracci.com> | 2023-08-15 13:36:36 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-08-16 04:36:36 +0900 |
commit | 4380a09a0598c73aa434e2f0f3a34555e0bd55cb (patch) | |
tree | 671bba82325653ed188efb49e099c4d61ec318cc /cli/tools/repl/session.rs | |
parent | 41cad2179fb36c2371ab84ce587d3460af64b5fb (diff) |
feat(ext/node): eagerly bootstrap node (#20153)
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
Diffstat (limited to 'cli/tools/repl/session.rs')
-rw-r--r-- | cli/tools/repl/session.rs | 14 |
1 files changed, 0 insertions, 14 deletions
diff --git a/cli/tools/repl/session.rs b/cli/tools/repl/session.rs index 4a30c93c4..9261299df 100644 --- a/cli/tools/repl/session.rs +++ b/cli/tools/repl/session.rs @@ -25,7 +25,6 @@ use deno_core::serde_json; use deno_core::serde_json::Value; use deno_core::LocalInspectorSession; use deno_graph::source::Resolver; -use deno_runtime::deno_node; use deno_runtime::worker::MainWorker; use deno_semver::npm::NpmPackageReqReference; use once_cell::sync::Lazy; @@ -123,7 +122,6 @@ struct TsEvaluateResponse { } pub struct ReplSession { - has_node_modules_dir: bool, npm_resolver: Arc<CliNpmResolver>, resolver: Arc<CliGraphResolver>, pub worker: MainWorker, @@ -131,7 +129,6 @@ pub struct ReplSession { pub context_id: u64, pub language_server: ReplLanguageServer, pub notifications: Rc<RefCell<UnboundedReceiver<Value>>>, - has_initialized_node_runtime: bool, referrer: ModuleSpecifier, } @@ -183,14 +180,12 @@ impl ReplSession { .unwrap(); let mut repl_session = ReplSession { - has_node_modules_dir: cli_options.has_node_modules_dir(), npm_resolver, resolver, worker, session, context_id, language_server, - has_initialized_node_runtime: false, referrer, notifications: Rc::new(RefCell::new(notification_rx)), }; @@ -515,15 +510,6 @@ impl ReplSession { let has_node_specifier = resolved_imports.iter().any(|url| url.scheme() == "node"); if !npm_imports.is_empty() || has_node_specifier { - if !self.has_initialized_node_runtime { - deno_node::initialize_runtime( - &mut self.worker.js_runtime, - self.has_node_modules_dir, - None, - )?; - self.has_initialized_node_runtime = true; - } - self.npm_resolver.add_package_reqs(&npm_imports).await?; // prevent messages in the repl about @types/node not being cached |