Angular SSR & Hydration
SSR சர்வரில் HTML-ஐ வழங்குகிறது, மற்றும் hydration கிளையண்டில் அந்த HTML-ஐ மீண்டும் பயன்படுத்துகிறது மாநிலம் மற்றும் கேட்போர்களை இணைப்பதன் மூலம்.
SSR & Hydration அத்தியாவசியங்கள்
SSR: வேகமான முதல் ஓவியம் மற்றும் SEO-க்காக சர்வரில் HTML-ஐ முன்கூட்டியே வழங்குகிறது.
Hydration: மாநிலம் மற்றும் கேட்போர்களை இணைப்பதன் மூலம் கிளையண்டில் சர்வர் HTML-ஐ மீண்டும் பயன்படுத்துகிறது (முழு மறு-வழங்கல் இல்லை).
Determinism: வழங்கல் வெளியீட்டைக் கணிக்கக்கூடியதாக வைத்திருங்கள்; விளைவுகளை idempotent-ஆக ஆக்குங்கள்.
கணிக்கக்கூடிய வழங்கல் எடுத்துக்காட்டு
// Deterministic render (no random IDs during render)
@Component({ template: `<div>Hello</div>` })
class App {}
Jassif Team குறிப்புகள்:
App Bootstrap, Router, and HTTP பற்றி காண்க.
விளைவுகளை idempotent-ஆக வைத்திருங்கள் மற்றும் மென்மையான hydration உறுதிப்படுத்த கணிக்க முடியாத வழங்கலைத் தவிர்க்கவும்.
Hydration-பாதுகாப்பான சரிபார்ப்புகள்
பிரௌசர்-மட்டும் APIs-ஐ பிரௌசரில் இயங்கும்போது மட்டுமே அழைக்கவும்.
அம்சக் கண்டறிதல் அல்லது தள சரிபார்ப்புகளுடன் பாதுகாக்கவும்.
அம்சக் கண்டறிதல்
// எளிய அம்சக் கண்டறிதல்
const isBrowser = typeof window !== 'undefined';
// Angular தள சரிபார்ப்பு
import { PLATFORM_ID, inject } from '@angular/core';
import { isPlatformBrowser } from '@angular/common';
const platformId = inject(PLATFORM_ID);
const onBrowser = isPlatformBrowser(platformId);
முழுமையான எடுத்துக்காட்டு
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);
எடுத்துக்காட்டு விளக்கம்:
isBrowser: குறியீடு பிரௌசரில் இயங்குகிறதா என்பதைச் சரிபார்க்க typeof window !== 'undefined' பயன்படுத்துகிறது.
Hydration-safe: சர்வர் வழங்கலின் போது பிரௌசர்-மட்டும் APIs-ஐ அணுகுவதைத் தவிர்க்கிறது; கிளையண்டில் hydration-க்குப் பிறகு மட்டுமே அவற்றைப் படிக்கிறது.
SSR → Hydration: சர்வர் ஆரம்ப HTML-ஐ வழங்குகிறது; கிளையண்ட் கேட்போர்கள்/மாநிலத்தை முழு பார்வையையும் மறுவழங்காமல் இணைக்கிறது.
வழிகாட்டுதல்கள்
SSR-ன் போது window/document-ஐ அணுகுவதைத் தவிர்க்கவும்.
முதலில் கிடைப்பதைச் சரிபார்க்கவும்.
பக்க விளைவுகளை (எ.கா., நிகழ்வு கேட்போர்கள், அளவீடுகள்) hydration-க்குப் பிறகு தள்ளுபடி செய்யவும்.
பயனர்-முகவர் சரிபார்ப்புகளை விட அம்சக் கண்டறிதலைப் பயன்படுத்தவும்.
SSR குறிப்புகள்
தூய, கணிக்கக்கூடிய டெம்ப்ளேட்டுகளைப் பயன்படுத்தவும் (வழங்கலின் போது சீரற்ற மதிப்புகளைத் தவிர்க்கவும்).
கனரக வேலையை post-hydration இயங்கும் விளைவுகளுக்குத் தள்ளுபடி செய்யவும்.
கிளையண்டில் SSR-பெறப்பட்ட தரவை மீண்டும் பயன்படுத்த TransferState பயன்படுத்தவும்.
TransferState எடுத்துக்காட்டு
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);
சிறந்த நடைமுறைகள்:
சர்வர் மற்றும் கிளையண்டில் IDs-ஐ உறுதிப்படுத்தவும் பொருந்தாமையைத் தவிர்க்க.
வழங்கலின் போது நேர-சார்ந்த சீரற்றத்தைத் தவிர்க்கவும்; தேவைப்படும் இடத்தில் hydration-க்குப் பிறகு கணக்கிடவும்.
இரட்டை-பெறுதலைத் தடுக்க SSR-பெறப்பட்ட தரவை TransferState மூலம் கேச் செய்யவும்.
SSR vs CSR ஒப்பீடு
| அம்சம் | SSR (Server-Side Rendering) | CSR (Client-Side Rendering) |
|---|---|---|
| ஆரம்ப ஏற்றம் | வேகமானது (சர்வரிலிருந்து HTML) | மெதுவானது (முதலில் JavaScript bundle) |
| SEO | சிறந்தது (தேடுபொறிகள் உள்ளடக்கத்தைக் காண்கின்றன) | மோசமானது (உள்ளடக்கத்திற்கு JS தேவை) |
| முதல் ஓவியம் | உடனடி | JS பதிவிறக்கம் & இயக்கத்திற்குப் பிறகு |
| Hydration | தேவைப்படுகிறது (கேட்போர்களை இணைக்கவும்) | பொருந்தாது |
| சர்வர் சுமை | அதிகமானது (ஒவ்வொரு கோரிக்கையையும் வழங்குகிறது) | குறைந்த (நிலையான கோப்புகள்) |