Angular SSR & Hydration

Server-Side Rendering மற்றும் Hydration-ஐக் கற்றுக்கொள்ளுங்கள்

Angular SSR & Hydration

SSR சர்வரில் HTML-ஐ வழங்குகிறது, மற்றும் hydration கிளையண்டில் அந்த HTML-ஐ மீண்டும் பயன்படுத்துகிறது மாநிலம் மற்றும் கேட்போர்களை இணைப்பதன் மூலம்.

SSR & Hydration Essentials

SSR: வேகமான முதல் ஓவியம் மற்றும் SEO-க்காக சர்வரில் HTML-ஐ முன்கூட்டியே வழங்குகிறது.

Hydration: மாநிலம் மற்றும் கேட்போர்களை இணைப்பதன் மூலம் கிளையண்டில் சர்வர் HTML-ஐ மீண்டும் பயன்படுத்துகிறது (முழு மறு-வழங்கல் இல்லை).

Determinism: வழங்கல் வெளியீட்டைக் கணிக்கக்கூடியதாக வைத்திருங்கள்; விளைவுகளை idempotent-ஆக ஆக்குங்கள்.

Deterministic Render Example

// Deterministic render (no random IDs during render)
@Component({ template: `<div>Hello</div>` })
class App {}

💡Jassif Team Tips:

App Bootstrap, Router, and HTTP பற்றி காண்க.

விளைவுகளை idempotent-ஆக வைத்திருங்கள் மற்றும் மென்மையான hydration உறுதிப்படுத்த கணிக்க முடியாத வழங்கலைத் தவிர்க்கவும்.

Hydration-safe Checks

பிரௌசர்-மட்டும் APIs-ஐ பிரௌசரில் இயங்கும்போது மட்டுமே அழைக்கவும்.

அம்சக் கண்டறிதல் அல்லது தள சரிபார்ப்புகளுடன் பாதுகாக்கவும்.

Feature Detection

// Simple feature detection
const isBrowser = typeof window !== 'undefined';

// Angular platform check
import { PLATFORM_ID, inject } from '@angular/core';
import { isPlatformBrowser } from '@angular/common';

const platformId = inject(PLATFORM_ID);
const onBrowser = isPlatformBrowser(platformId);

Complete Example

import { bootstrapApplication } from '@angular/platform-browser';
import { Component } from '@angular/core';

@Component({
  selector: 'app-root',
  standalone: true,
  template: `
    <h3>SSR & Hydration</h3>
    <p>Is Browser: {{ isBrowser }}</p>
  `
})
class App {
  isBrowser = typeof window !== 'undefined';
}

bootstrapApplication(App);

⚠️Example Explained:

isBrowser: குறியீடு பிரௌசரில் இயங்குகிறதா என்பதைச் சரிபார்க்க typeof window !== 'undefined' பயன்படுத்துகிறது.

Hydration-safe: சர்வர் வழங்கலின் போது பிரௌசர்-மட்டும் APIs-ஐ அணுகுவதைத் தவிர்க்கிறது; கிளையண்டில் hydration-க்குப் பிறகு மட்டுமே அவற்றைப் படிக்கிறது.

SSR → Hydration: சர்வர் ஆரம்ப HTML-ஐ வழங்குகிறது; கிளையண்ட் கேட்போர்கள்/மாநிலத்தை முழு பார்வையையும் மறுவழங்காமல் இணைக்கிறது.

Guidelines

SSR-ன் போது window/document-ஐ அணுகுவதைத் தவிர்க்கவும்.

முதலில் கிடைப்பதைச் சரிபார்க்கவும்.

பக்க விளைவுகளை (எ.கா., நிகழ்வு கேட்போர்கள், அளவீடுகள்) hydration-க்குப் பிறகு தள்ளுபடி செய்யவும்.

பயனர்-முகவர் சரிபார்ப்புகளை விட அம்சக் கண்டறிதலைப் பயன்படுத்தவும்.

SSR Tips

தூய, கணிக்கக்கூடிய டெம்ப்ளேட்டுகளைப் பயன்படுத்தவும் (வழங்கலின் போது சீரற்ற மதிப்புகளைத் தவிர்க்கவும்).

கனரக வேலையை post-hydration இயங்கும் விளைவுகளுக்குத் தள்ளுபடி செய்யவும்.

கிளையண்டில் SSR-பெறப்பட்ட தரவை மீண்டும் பயன்படுத்த TransferState பயன்படுத்தவும்.

TransferState Example

import { TransferState, makeStateKey } from '@angular/platform-browser';

const DATA_KEY = makeStateKey('initial-data');
// Server: state.set(DATA_KEY, data)
// Client: const cached = state.get(DATA_KEY, null);

🚀Best Practices:

சர்வர் மற்றும் கிளையண்டில் IDs-ஐ உறுதிப்படுத்தவும் பொருந்தாமையைத் தவிர்க்க.

வழங்கலின் போது நேர-சார்ந்த சீரற்றத்தைத் தவிர்க்கவும்; தேவைப்படும் இடத்தில் hydration-க்குப் பிறகு கணக்கிடவும்.

இரட்டை-பெறுதலைத் தடுக்க SSR-பெறப்பட்ட தரவை TransferState மூலம் கேச் செய்யவும்.

Server-Side: தூய மற்றும் கணிக்கக்கூடிய கூறு வழங்கலை உறுதிப்படுத்தவும்
Hydration: மாநிலம் மற்றும் நிகழ்வு கட்டுப்பாடுகளை மென்மையாக இணைக்கவும்
Data Transfer: இரட்டை API கோரிக்கைகளைத் தடுக்க TransferState பயன்படுத்தவும்

SSR vs CSR Comparison

Aspect SSR (Server-Side Rendering) CSR (Client-Side Rendering)
Initial Load Faster (HTML from server) Slower (JavaScript bundle first)
SEO Better (search engines see content) Poorer (JS required for content)
First Paint Immediate After JS download & execution
Hydration Required (attach listeners) Not applicable
Server Load Higher (renders each request) Lower (static files)

SSR & Hydration Quiz

What does hydration do in an Angular SSR setup?

Replaces server HTML with brand new client HTML
✗ Incorrect! Hydration reuses server HTML, doesn't replace it
Reuses server-rendered HTML and wires up event listeners/state
✓ Correct! Hydration attaches Angular's runtime to existing server HTML without re-rendering
Disables client-side routing
✗ Incorrect! Hydration works with client-side routing; it doesn't disable it
அடுத்தது