Angular SSR va hydration


SSR HTMLni serverda ko‘rsatadi va hidratsiya holat va tinglovchilarni biriktirish orqali mijozda HTMLni qayta ishlatadi.


ULASHISH

SSR va Hydration Essentials

  • SSR: tezroq birinchi bo‘yash va SEO uchun serverda HTMLni oldindan ko‘rsatadi.
  • Hidratsiya: holat va tinglovchilarni ulash orqali mijozda server HTML-dan qayta foydalanadi (to‘liq qayta ko‘rsatilmaydi).
  • Determinizm: render chiqishini bashorat qilish mumkin; effektlarni idempotent qilish.
// Deterministic render (no random IDs during render)
@Component({ template: `<div>Hello</div>` })
class App {}

Tegishli: App Bootstrap, Router va HTTP-ga qarang.

Maslahat: Effektlarni idempotent saqlang va silliq hidratsiyani ta’minlash uchun deterministik bo‘lmagan renderlashdan qoching.


Hidratsiya uchun xavfsiz tekshiruvlar

Faqat brauzerga xos API-larni kod brauzerda ishlayotgandagina chaqiring.

Xususiyatlarni aniqlash yoki platforma tekshiruvlari bilan qo‘riqlash.

// 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);

Misol

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);
<app-root></app-root>

Misolni ishga tushirish »

Misol tushuntirildi

  • isBrowser: Kod brauzerda ishlayotganligini tekshirish uchun typeof window !== 'undefined' dan foydalanadi.
  • Hidratsiya uchun xavfsiz: serverni ko‘rsatish paytida faqat brauzer API-lariga kirishdan qochadi; ularni faqat mijozga hidratsiyadan keyin o‘qiydi.
  • SSR → Hydration: server dastlabki HTML’ni render qiladi; mijoz (client) butun ko‘rinishni qayta render qilmasdan tinglovchilar (listener) va state’ni biriktiradi.

Ko‘rsatmalar:

  • Avoid accessing window/document during SSR.
  • Avval mavjudligini tekshiring.
  • Nojo‘ya ta’sirlarni (masalan, hodisa tinglovchilari, o‘lchovlar) hidratsiyadan keyin kechiktiring.
  • Foydalanuvchi-agent tekshiruvlari orqali xususiyatni aniqlashdan foydalaning.


SSR bo‘yicha maslahatlar

  • Sof, deterministik shablonlardan foydalaning (render paytida tasodifiy qiymatlardan qoching).
  • Og‘ir ishlarni hidratsiyadan keyingi effektlarga kechiktiring.
  • Mijozda SSR tomonidan olingan ma’lumotlarni qayta ishlatish uchun TransferState-dan foydalaning.
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);

Eng yaxshi amaliyotlar:

  • Mos kelmaslik uchun server va mijoz bo‘ylab identifikatorlarni barqarorlashtiring.
  • Render paytida vaqtga asoslangan tasodifiylikdan saqlaning; kerak bo‘lganda hidratsiyadan keyin hisoblang.
  • Ikki marta olishni oldini olish uchun TransferState orqali SSR tomonidan olingan ma’lumotlarni keshlang.


W3Schools Pathfinder

Yutuqlaringizni kuzating – bu bepul!