diff options
Diffstat (limited to 'cli')
-rw-r--r-- | cli/Cargo.toml | 2 | ||||
-rw-r--r-- | cli/build.rs | 15 | ||||
-rw-r--r-- | cli/tsc/mod.rs | 28 |
3 files changed, 42 insertions, 3 deletions
diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 11110a78f..f9214c999 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -32,6 +32,7 @@ deno_core = { workspace = true, features = ["include_js_files_for_snapshotting"] regex.workspace = true serde.workspace = true serde_json.workspace = true +zstd.workspace = true glibc_version = "0.1.2" [target.'cfg(windows)'.build-dependencies] @@ -105,6 +106,7 @@ twox-hash = "=1.6.3" typed-arena = "=2.0.1" uuid = { workspace = true, features = ["serde"] } walkdir = "=2.3.2" +zstd.workspace = true [target.'cfg(windows)'.dependencies] fwdansi.workspace = true diff --git a/cli/build.rs b/cli/build.rs index 251b30de2..ecd7ed1be 100644 --- a/cli/build.rs +++ b/cli/build.rs @@ -270,7 +270,22 @@ mod ts { build_libs, path_dts, )], + + // NOTE(bartlomieju): Compressing the TSC snapshot in debug build took + // ~45s on M1 MacBook Pro; without compression it took ~1s. + // Thus we're not not using compressed snapshot, trading off + // a lot of build time for some startup time in debug build. + #[cfg(debug_assertions)] compression_cb: None, + + #[cfg(not(debug_assertions))] + compression_cb: Some(Box::new(|vec, snapshot_slice| { + eprintln!("Compressing TSC snapshot..."); + vec.extend_from_slice( + &zstd::bulk::compress(snapshot_slice, 22) + .expect("snapshot compression failed"), + ); + })), snapshot_module_load_cb: None, }); } diff --git a/cli/tsc/mod.rs b/cli/tsc/mod.rs index 60ef1c5d6..43fccb37e 100644 --- a/cli/tsc/mod.rs +++ b/cli/tsc/mod.rs @@ -52,8 +52,30 @@ pub use self::diagnostics::DiagnosticMessageChain; pub use self::diagnostics::Diagnostics; pub use self::diagnostics::Position; -pub static COMPILER_SNAPSHOT: &[u8] = - include_bytes!(concat!(env!("OUT_DIR"), "/COMPILER_SNAPSHOT.bin")); +pub static COMPILER_SNAPSHOT: Lazy<Box<[u8]>> = Lazy::new( + #[cold] + #[inline(never)] + || { + static COMPRESSED_COMPILER_SNAPSHOT: &[u8] = + include_bytes!(concat!(env!("OUT_DIR"), "/COMPILER_SNAPSHOT.bin")); + + // NOTE(bartlomieju): Compressing the TSC snapshot in debug build took + // ~45s on M1 MacBook Pro; without compression it took ~1s. + // Thus we're not not using compressed snapshot, trading off + // a lot of build time for some startup time in debug build. + #[cfg(debug_assertions)] + return COMPRESSED_COMPILER_SNAPSHOT.to_vec().into_boxed_slice(); + + #[cfg(not(debug_assertions))] + zstd::bulk::decompress( + &COMPRESSED_COMPILER_SNAPSHOT[4..], + u32::from_le_bytes(COMPRESSED_COMPILER_SNAPSHOT[0..4].try_into().unwrap()) + as usize, + ) + .unwrap() + .into_boxed_slice() + }, +); pub fn get_types_declaration_file_text(unstable: bool) -> String { let mut assets = get_asset_texts_from_new_runtime() @@ -115,7 +137,7 @@ fn get_asset_texts_from_new_runtime() -> Result<Vec<AssetText>, AnyError> { } pub fn compiler_snapshot() -> Snapshot { - Snapshot::Static(COMPILER_SNAPSHOT) + Snapshot::Static(&COMPILER_SNAPSHOT) } macro_rules! inc { |