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 மூலம் கேச் செய்யவும்.
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) |