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 /ext/node/lib.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 'ext/node/lib.rs')
-rw-r--r-- | ext/node/lib.rs | 24 |
1 files changed, 0 insertions, 24 deletions
diff --git a/ext/node/lib.rs b/ext/node/lib.rs index e2643a84f..c7d617666 100644 --- a/ext/node/lib.rs +++ b/ext/node/lib.rs @@ -8,7 +8,6 @@ use std::rc::Rc; use deno_core::error::AnyError; use deno_core::located_script_name; use deno_core::op; -use deno_core::serde_json; use deno_core::serde_v8; use deno_core::url::Url; #[allow(unused_imports)] @@ -558,29 +557,6 @@ deno_core::extension!(deno_node, }, ); -pub fn initialize_runtime( - js_runtime: &mut JsRuntime, - uses_local_node_modules_dir: bool, - maybe_binary_command_name: Option<&str>, -) -> Result<(), AnyError> { - let argv0 = if let Some(binary_command_name) = maybe_binary_command_name { - serde_json::to_string(binary_command_name)? - } else { - "undefined".to_string() - }; - let source_code = format!( - r#"(function loadBuiltinNodeModules(usesLocalNodeModulesDir, argv0) {{ - Deno[Deno.internal].node.initialize( - usesLocalNodeModulesDir, - argv0 - ); - }})({uses_local_node_modules_dir}, {argv0});"#, - ); - - js_runtime.execute_script(located_script_name!(), source_code.into())?; - Ok(()) -} - pub fn load_cjs_module( js_runtime: &mut JsRuntime, module: &str, |