summaryrefslogtreecommitdiff
path: root/ext/node/global.rs
diff options
context:
space:
mode:
authorMatt Mastracci <matthew@mastracci.com>2023-08-15 13:36:36 -0600
committerGitHub <noreply@github.com>2023-08-16 04:36:36 +0900
commit4380a09a0598c73aa434e2f0f3a34555e0bd55cb (patch)
tree671bba82325653ed188efb49e099c4d61ec318cc /ext/node/global.rs
parent41cad2179fb36c2371ab84ce587d3460af64b5fb (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/global.rs')
-rw-r--r--ext/node/global.rs6
1 files changed, 4 insertions, 2 deletions
diff --git a/ext/node/global.rs b/ext/node/global.rs
index 78e009971..52c1b6bb9 100644
--- a/ext/node/global.rs
+++ b/ext/node/global.rs
@@ -1,5 +1,6 @@
// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
+use std::mem::MaybeUninit;
use std::rc::Rc;
use deno_core::v8;
@@ -266,13 +267,14 @@ fn current_mode(scope: &mut v8::HandleScope) -> Mode {
let Some(v8_string) = v8::StackTrace::current_script_name_or_source_url(scope) else {
return Mode::Deno;
};
- let string = v8_string.to_rust_string_lossy(scope);
let op_state = deno_core::JsRuntime::op_state_from(scope);
let op_state = op_state.borrow();
let Some(node_resolver) = op_state.try_borrow::<Rc<NodeResolver>>() else {
return Mode::Deno;
};
- if node_resolver.in_npm_package_with_cache(string) {
+ let mut buffer = [MaybeUninit::uninit(); 2048];
+ let str = v8_string.to_rust_cow_lossy(scope, &mut buffer);
+ if node_resolver.in_npm_package_with_cache(str) {
Mode::Node
} else {
Mode::Deno