diff --git a/.changeset/violet-dryers-nail.md b/.changeset/violet-dryers-nail.md new file mode 100644 index 000000000000..bb47025bb992 --- /dev/null +++ b/.changeset/violet-dryers-nail.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +perf: only have Vite generate relative paths when required diff --git a/packages/kit/src/exports/vite/index.js b/packages/kit/src/exports/vite/index.js index a26ca5ba3805..bd5bb27f61db 100644 --- a/packages/kit/src/exports/vite/index.js +++ b/packages/kit/src/exports/vite/index.js @@ -541,8 +541,14 @@ function kit({ svelte_config }) { // see the kit.output.preloadStrategy option for details on why we have multiple options here const ext = kit.output.preloadStrategy === 'preload-mjs' ? 'mjs' : 'js'; + // We could always use a relative asset base path here, but it's better for performance not to. + // E.g. Vite generates `new URL('/asset.png', import.meta).href` for a relative path vs just '/asset.png'. + // That's larger and takes longer to run and also causes an HTML diff between SSR and client + // causing us to do a more expensive hydration check. + const client_base = kit.paths.relative || kit.paths.assets ? './' : kit.paths.base || '/'; + new_config = { - base: ssr ? assets_base(kit) : './', + base: ssr ? assets_base(kit) : client_base, build: { copyPublicDir: !ssr, cssCodeSplit: true,