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 /runtime/ops/worker_host.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 'runtime/ops/worker_host.rs')
-rw-r--r-- | runtime/ops/worker_host.rs | 25 |
1 files changed, 0 insertions, 25 deletions
diff --git a/runtime/ops/worker_host.rs b/runtime/ops/worker_host.rs index f96ae38e8..9bfbd9d10 100644 --- a/runtime/ops/worker_host.rs +++ b/runtime/ops/worker_host.rs @@ -13,7 +13,6 @@ use crate::web_worker::WorkerControlEvent; use crate::web_worker::WorkerId; use crate::worker::FormatJsErrorFn; use deno_core::error::AnyError; -use deno_core::futures::future::LocalFutureObj; use deno_core::op; use deno_core::serde::Deserialize; use deno_core::CancelFuture; @@ -40,10 +39,6 @@ pub type CreateWebWorkerCb = dyn Fn(CreateWebWorkerArgs) -> (WebWorker, Sendable + Sync + Send; -pub type WorkerEventCb = dyn Fn(WebWorker) -> LocalFutureObj<'static, Result<WebWorker, AnyError>> - + Sync - + Send; - /// A holder for callback that is used to create a new /// WebWorker. It's a struct instead of a type alias /// because `GothamState` used in `OpState` overrides @@ -54,12 +49,6 @@ struct CreateWebWorkerCbHolder(Arc<CreateWebWorkerCb>); #[derive(Clone)] struct FormatJsErrorFnHolder(Option<Arc<FormatJsErrorFn>>); -#[derive(Clone)] -struct PreloadModuleCbHolder(Arc<WorkerEventCb>); - -#[derive(Clone)] -struct PreExecuteModuleCbHolder(Arc<WorkerEventCb>); - pub struct WorkerThread { worker_handle: WebWorkerHandle, cancel_handle: Rc<CancelHandle>, @@ -98,8 +87,6 @@ deno_core::extension!( ], options = { create_web_worker_cb: Arc<CreateWebWorkerCb>, - preload_module_cb: Arc<WorkerEventCb>, - pre_execute_module_cb: Arc<WorkerEventCb>, format_js_error_fn: Option<Arc<FormatJsErrorFn>>, }, state = |state, options| { @@ -109,12 +96,6 @@ deno_core::extension!( let create_web_worker_cb_holder = CreateWebWorkerCbHolder(options.create_web_worker_cb); state.put::<CreateWebWorkerCbHolder>(create_web_worker_cb_holder); - let preload_module_cb_holder = - PreloadModuleCbHolder(options.preload_module_cb); - state.put::<PreloadModuleCbHolder>(preload_module_cb_holder); - let pre_execute_module_cb_holder = - PreExecuteModuleCbHolder(options.pre_execute_module_cb); - state.put::<PreExecuteModuleCbHolder>(pre_execute_module_cb_holder); let format_js_error_fn_holder = FormatJsErrorFnHolder(options.format_js_error_fn); state.put::<FormatJsErrorFnHolder>(format_js_error_fn_holder); @@ -174,10 +155,6 @@ fn op_create_worker( let worker_id = state.take::<WorkerId>(); let create_web_worker_cb = state.take::<CreateWebWorkerCbHolder>(); state.put::<CreateWebWorkerCbHolder>(create_web_worker_cb.clone()); - let preload_module_cb = state.take::<PreloadModuleCbHolder>(); - state.put::<PreloadModuleCbHolder>(preload_module_cb.clone()); - let pre_execute_module_cb = state.take::<PreExecuteModuleCbHolder>(); - state.put::<PreExecuteModuleCbHolder>(pre_execute_module_cb.clone()); let format_js_error_fn = state.take::<FormatJsErrorFnHolder>(); state.put::<FormatJsErrorFnHolder>(format_js_error_fn.clone()); state.put::<WorkerId>(worker_id.next().unwrap()); @@ -221,8 +198,6 @@ fn op_create_worker( worker, module_specifier, maybe_source_code, - preload_module_cb.0, - pre_execute_module_cb.0, format_js_error_fn.0, ) })?; |