From d24c6ea27f7dea57e3bc0cda342d6cbe59782f7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Wed, 8 Mar 2023 07:43:26 -0400 Subject: refactor(runtime): conditionally register Extension with source files (#18068) Since we are snapshotting extension source at build time, there's no need to define list of sources for the extension at runtime. This commit changes "deno_node" extension by removing "init_polyfill" function in favor of "init_polyfill_ops_and_esm()" and "init_polyfill_ops()". The former is used during snapshot and when "deno_runtime" is compiled with "dont_create_runtime_snapshot" cargo feature flag. The latter is used when running a worker from an existing snapshot. This is a start of a bigger refactor to all extensions - thanks to this change, we don't have to iterate over all defined source files for extension at runtime, and because of that we don't have to create a filepath for each of the source files. It's not a big deal, but we are iterating over 300 files on each start, and concatenating 3 strings before creating a "PathBuf" for ~200 of them. This is already visible on the startup flamegraphs and should be avoided. --- ext/node/lib.rs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'ext/node/lib.rs') diff --git a/ext/node/lib.rs b/ext/node/lib.rs index 411151f2f..c492d93d8 100644 --- a/ext/node/lib.rs +++ b/ext/node/lib.rs @@ -95,7 +95,19 @@ fn op_node_build_os() -> String { .to_string() } -pub fn init_polyfill() -> Extension { +pub fn init_polyfill_ops() -> Extension { + Extension::builder(env!("CARGO_PKG_NAME")) + .ops(vec![ + crypto::op_node_create_hash::decl(), + crypto::op_node_hash_update::decl(), + crypto::op_node_hash_digest::decl(), + crypto::op_node_hash_clone::decl(), + op_node_build_os::decl(), + ]) + .build() +} + +pub fn init_polyfill_ops_and_esm() -> Extension { let esm_files = include_js_files!( dir "polyfills", "_core.ts", -- cgit v1.2.3