SSR (Server-Side Rendering)
Priority: P2 (MEDIUM)
1. Enable Hydration
- Run
ng add @angular/ssr. - Add
provideClientHydration(withEventReplay())toapp.config.tsproviders.
See hydration examples for app config and hydration setup.
2. Guard Browser-Only Code
- Use
afterNextRender(() => { /* window access */ })for one-time browser-only code. - For recurring checks, inject
PLATFORM_IDand useisPlatformBrowser(platformId).
3. Prevent Double-Fetching
- Use
withHttpTransferCacheOptions()or manualTransferStateto cache server responses for client replay.
4. Configure Render Modes (Angular 17+)
Export ServerRoute[] in app.routes.server.ts:
- RenderMode.Prerender — Static HTML at build time (blogs, marketing).
- RenderMode.Server — Dynamic SSR per request (user-specific pages).
- RenderMode.Client — Client-only SPA (authenticated dashboards).
5. Incremental Hydration (Angular 19+)
- Defer hydration with
@defer (hydrate on viewport). - Triggers:
viewport,interaction,idle,timer(ms),immediate,never. - Add
withEventReplay()to capture user events before hydration completes.
Anti-Patterns
- No direct window/document access: Use
afterNextRender()orPLATFORM_IDcheck. - No double-fetching: Use
withHttpTransferCacheOptions()orTransferState. - No SSR for auth-gated pages: Set
RenderMode.Clientfor authenticated dashboards.