# Async Component Lazy Hydration Strategies (Vue 3.5+) ## Rule In Vue 3.5+, use hydration strategies with async components to control when SSR-rendered components become interactive. Import hydration strategies individually for tree-shaking. ## Why This Matters In SSR applications, hydrating all components immediately can block the main thread and delay interactivity. Lazy hydration allows non-critical components to become interactive only when needed, improving Time to Interactive (TTI) metrics. ## Available Hydration Strategies ### hydrateOnIdle Hydrates when the browser is idle using `requestIdleCallback`: ```vue ``` ### hydrateOnVisible Hydrates when element enters the viewport via `IntersectionObserver`: ```vue ``` ### hydrateOnMediaQuery Hydrates when a media query matches: ```vue ``` ### hydrateOnInteraction Hydrates when user interacts with the component: ```vue ``` **Note**: The triggering event is replayed after hydration completes, so user interaction is not lost. ## Custom Hydration Strategy ```typescript import { defineAsyncComponent, type HydrationStrategy } from 'vue' const hydrateAfterAnimation: HydrationStrategy = (hydrate, forEachElement) => { // Wait for page load animation to complete const timeout = setTimeout(hydrate, 1000) return () => clearTimeout(timeout) // Cleanup } const AsyncWidget = defineAsyncComponent({ loader: () => import('./Widget.vue'), hydrate: hydrateAfterAnimation }) ``` ## Key Points 1. Hydration strategies only apply to SSR - they have no effect in client-only apps 2. Import strategies individually: `import { hydrateOnIdle } from 'vue'` 3. `hydrateOnInteraction` replays the triggering event after hydration 4. Use `hydrateOnVisible` for below-the-fold content 5. Use `hydrateOnIdle` for non-critical components 6. Use `hydrateOnMediaQuery` for device-specific components ## Strategy Selection Guide | Component Type | Recommended Strategy | |----------------|---------------------| | Footer, related content | `hydrateOnIdle` | | Below-the-fold sections | `hydrateOnVisible` | | Interactive widgets | `hydrateOnInteraction` | | Mobile-only components | `hydrateOnMediaQuery` | | Critical above-the-fold | No strategy (immediate) | ## References - [Vue.js Async Components Documentation](https://vuejs.org/guide/components/async)