From 19bbf83e47e4f98a45fe1c735dd2cdab80b99eca Mon Sep 17 00:00:00 2001 From: David Sherret Date: Mon, 18 Nov 2024 15:44:17 -0500 Subject: [PATCH] perf(windows): delay load webgpu and some other dlls (#26917) Before: ~100ms, After: ~40ms for a hello world Closes https://github.com/denoland/deno/issues/26914 --- cli/build.rs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/cli/build.rs b/cli/build.rs index 2678a8dbb0..3d98661284 100644 --- a/cli/build.rs +++ b/cli/build.rs @@ -400,6 +400,24 @@ fn main() { println!("cargo:rustc-env=TARGET={}", env::var("TARGET").unwrap()); println!("cargo:rustc-env=PROFILE={}", env::var("PROFILE").unwrap()); + if cfg!(windows) { + // these dls load slowly, so delay loading them + let dlls = [ + // webgpu + "d3dcompiler_47", + "OPENGL32", + // network related functions + "iphlpapi", + ]; + for dll in dlls { + println!("cargo:rustc-link-arg-bin=deno=/delayload:{dll}.dll"); + println!("cargo:rustc-link-arg-bin=denort=/delayload:{dll}.dll"); + } + // enable delay loading + println!("cargo:rustc-link-arg-bin=deno=delayimp.lib"); + println!("cargo:rustc-link-arg-bin=denort=delayimp.lib"); + } + let c = PathBuf::from(env::var_os("CARGO_MANIFEST_DIR").unwrap()); let o = PathBuf::from(env::var_os("OUT_DIR").unwrap());