Skip to content

Commit e69a05d

Browse files
authored
perf(ext/node): convert child_process, cluster, console to lazy-loaded JS (#33925)
- Convert 9 internal polyfill modules from ESM to IIFE lazy-loaded scripts to reduce startup overhead - Converted: `internal/child_process.ts`, `internal/cluster/{child,linkedlist,primary,round_robin_handle,shared_handle,utils,worker}.ts`, `internal/console/constructor.mjs` - Update consumers (`child_process.ts`, `cluster.ts`, `console.ts`, `01_require.js`) to use `core.loadExtScript` instead of ESM imports - Move file registrations in `lib.rs` from `esm_modules` to `lazy_loaded_esm_sources`
1 parent ffbc071 commit e69a05d

14 files changed

Lines changed: 317 additions & 383 deletions

File tree

ext/node/lib.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -425,15 +425,6 @@ deno_core::extension!(deno_node,
425425
"_fs/_fs_readdir.ts",
426426
"_process/streams.mjs",
427427
"internal_binding/udp_wrap.ts",
428-
"internal/child_process.ts",
429-
"internal/cluster/child.ts",
430-
"internal/cluster/linkedlist.ts",
431-
"internal/cluster/primary.ts",
432-
"internal/cluster/round_robin_handle.ts",
433-
"internal/cluster/shared_handle.ts",
434-
"internal/cluster/utils.ts",
435-
"internal/cluster/worker.ts",
436-
"internal/console/constructor.mjs",
437428
"internal/dgram.ts",
438429
"internal/dns/utils.ts",
439430
"internal/event_target.mjs",
@@ -613,6 +604,15 @@ deno_core::extension!(deno_node,
613604
"internal/crypto/sig.ts",
614605
"internal/crypto/util.ts",
615606
"internal/crypto/x509.ts",
607+
"internal/child_process.ts",
608+
"internal/cluster/child.ts",
609+
"internal/cluster/linkedlist.ts",
610+
"internal/cluster/primary.ts",
611+
"internal/cluster/round_robin_handle.ts",
612+
"internal/cluster/shared_handle.ts",
613+
"internal/cluster/utils.ts",
614+
"internal/cluster/worker.ts",
615+
"internal/console/constructor.mjs",
616616
"internal/deps/undici/undici.js",
617617
"internal/dtrace.ts",
618618
"internal/events/abort_listener.mjs",

ext/node/polyfills/01_require.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,9 @@ import inspectorPromises from "node:inspector/promises";
119119
const internalAssertMyersDiff = core.loadExtScript(
120120
"ext:deno_node/internal/assert/myers_diff.js",
121121
);
122-
import internalCp from "ext:deno_node/internal/child_process.ts";
122+
const internalCp = core.loadExtScript(
123+
"ext:deno_node/internal/child_process.ts",
124+
).default;
123125
const internalCryptoCertificate = core.loadExtScript(
124126
"ext:deno_node/internal/crypto/certificate.ts",
125127
).default;
@@ -197,7 +199,9 @@ const internalUtilInspect = core.loadExtScript(
197199
const internalValidators = core.loadExtScript(
198200
"ext:deno_node/internal/validators.mjs",
199201
);
200-
import internalConsole from "ext:deno_node/internal/console/constructor.mjs";
202+
const internalConsole = core.loadExtScript(
203+
"ext:deno_node/internal/console/constructor.mjs",
204+
).default;
201205
import net from "node:net";
202206
const os = core.loadExtScript("ext:deno_node/os.ts").default;
203207
import pathPosix from "node:path/posix";

ext/node/polyfills/child_process.ts

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,15 @@ import {
1313
op_node_translate_cli_args,
1414
} from "ext:core/ops";
1515

16-
import {
16+
const {
1717
ChildProcess,
1818
ChildProcessOptions,
1919
normalizeSpawnArguments,
2020
setupChannel,
21-
type SpawnOptions,
22-
type SpawnSyncOptions,
23-
type SpawnSyncResult,
2421
stdioStringToArray,
2522
validateNullByteNotInArg,
26-
} from "ext:deno_node/internal/child_process.ts";
27-
import internalChildProcess from "ext:deno_node/internal/child_process.ts";
23+
default: internalChildProcess,
24+
} = core.loadExtScript("ext:deno_node/internal/child_process.ts");
2825
const {
2926
validateAbortSignal,
3027
validateFunction,

ext/node/polyfills/cluster.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,12 @@
1313

1414
import { core, internals } from "ext:core/mod.js";
1515
const { EventEmitter } = core.loadExtScript("ext:deno_node/_events.mjs");
16-
import { init as initPrimary } from "ext:deno_node/internal/cluster/primary.ts";
17-
import { init as initChild } from "ext:deno_node/internal/cluster/child.ts";
16+
const { init: initPrimary } = core.loadExtScript(
17+
"ext:deno_node/internal/cluster/primary.ts",
18+
);
19+
const { init: initChild } = core.loadExtScript(
20+
"ext:deno_node/internal/cluster/child.ts",
21+
);
1822

1923
const cluster: any = new EventEmitter();
2024
initPrimary(cluster);

ext/node/polyfills/console.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
// Copyright 2018-2026 the Deno authors. MIT license.
22

3-
import { primordials } from "ext:core/mod.js";
4-
import { Console } from "ext:deno_node/internal/console/constructor.mjs";
3+
import { core, primordials } from "ext:core/mod.js";
4+
const { Console } = core.loadExtScript(
5+
"ext:deno_node/internal/console/constructor.mjs",
6+
);
57
import { windowOrWorkerGlobalScope } from "ext:runtime/98_global_scope_shared.js";
68
// Don't rely on global `console` because during bootstrapping, it is pointing
79
// to native `console` object provided by V8.

0 commit comments

Comments
 (0)