diff --git a/nginx.conf b/nginx.conf index 555c4dede..270705bd3 100644 --- a/nginx.conf +++ b/nginx.conf @@ -23,6 +23,15 @@ server { gzip_vary on; gzip_types application/json application/javascript text/css text/plain image/svg+xml; + # Vite assets use content hashes, so they are safe to cache across deployments. + # Keep index.html uncached below so it always points to the current asset manifest. + location ^~ /assets/ { + access_log off; + try_files $uri =404; + expires 1y; + add_header Cache-Control "public, max-age=31536000, immutable" always; + } + location ^~ /api/public/canvas-shares/ { access_log off; proxy_pass http://backend:8080; diff --git a/web/vite.config.ts b/web/vite.config.ts index 2b8777311..e176694de 100644 --- a/web/vite.config.ts +++ b/web/vite.config.ts @@ -40,8 +40,10 @@ export default defineConfig({ output: { strictExecutionOrder: true, codeSplitting: { - includeDependenciesRecursively: true, - minSize: 20 * 1024, + // Keep route-level lazy imports isolated. Recursively merging dependencies + // pulls unrelated pages into the initial modulepreload graph. + includeDependenciesRecursively: false, + minSize: 40 * 1024, groups: [ { name: "vendor-react", @@ -62,14 +64,6 @@ export default defineConfig({ entriesAware: true, entriesAwareMergeThreshold: 80 * 1024, }, - { - name: "app-shared", - test: /[\\/]src[\\/]/, - priority: 5, - minShareCount: 2, - entriesAware: true, - entriesAwareMergeThreshold: 48 * 1024, - }, ], }, },