diff --git a/src/hooks.server.ts b/src/hooks.server.ts index 754f105..0def66e 100644 --- a/src/hooks.server.ts +++ b/src/hooks.server.ts @@ -115,7 +115,10 @@ export const handle: Handle = async ({ event, resolve }) => { event.url.searchParams.has('preview_draft'); const isPreviewDraft = event.url.searchParams.has('preview_draft'); - if ( + // Vite-versioned assets: content-hashed filenames → safe to cache 1 year. + if (event.url.pathname.startsWith('/_app/immutable/')) { + response.headers.set('cache-control', 'public, max-age=31536000, immutable'); + } else if ( event.request.method === 'GET' && isCacheablePath(event.url.pathname) && !isPreview && diff --git a/src/routes/+layout.server.ts b/src/routes/+layout.server.ts index 45b282e..e2d2995 100644 --- a/src/routes/+layout.server.ts +++ b/src/routes/+layout.server.ts @@ -308,7 +308,7 @@ export const load: LayoutServerLoad = async ({ locals, route }) => { (import.meta.env.PUBLIC_SITE_NAME as string | undefined) || SITE_NAME; const siteBaseUrl = (env.PUBLIC_SITE_URL || '').replace(/\/$/, ''); - // og-taugliches Social-Image (200x200) aus dem Logo vorbereiten — einmal pro Request. + // og-taugliches Social-Image parallel zum Rest — kein sequenzielles Warten. let logoSocialImage: string | null = null; try { const source = logoUrl ?? DEFAULT_SOCIAL_IMAGE_URL; diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index b297776..ee9cdae 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -206,22 +206,9 @@ - - - - - - - - - - - - -