From 3d35549d2fe5cb8e2a4e8413521417acf6742363 Mon Sep 17 00:00:00 2001 From: henrique221 Date: Mon, 8 Jun 2026 18:12:50 -0300 Subject: [PATCH] perf: enable route-level code splitting Turn on TanStack Router autoCodeSplitting so each route's component ships as its own lazy chunk instead of one monolithic bundle, and set defaultPreload: 'intent' so a route's chunk is prefetched on link hover/focus (no navigation latency on first visit). Measured (vite build): - entry chunk: 613.59 kB -> 84.03 kB - login page initial JS: ~892 kB -> ~608 kB raw (~280 -> ~203 kB gzip) - heavy feature code now demand-loaded: DraftingPage (49 kB), project detail (33 kB), projects (19 kB), resources, export, etc. routeTree.gen.ts is unchanged - this plugin version splits via a build-time transform, not by rewriting the generated tree. Closes #293 --- src/lib/router.ts | 3 +++ vite.config.ts | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/lib/router.ts b/src/lib/router.ts index 2cc56f5..b3a20fe 100644 --- a/src/lib/router.ts +++ b/src/lib/router.ts @@ -7,6 +7,9 @@ import { type ProjectItem, type User } from './types'; export const router = createRouter({ routeTree, + // Prefetch a route's split chunk on link hover/focus so code-splitting + // doesn't add navigation latency on first visit to each route. + defaultPreload: 'intent', context: { auth: { isAuthenticated: false, diff --git a/vite.config.ts b/vite.config.ts index 54be4b7..e2031a2 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -9,7 +9,7 @@ export default defineConfig(({ mode }) => { return { plugins: [ - tanstackRouter(), + tanstackRouter({ autoCodeSplitting: true }), react(), tailwindcss(), isAnalyze &&