SSR vs CSR
SSR (Server-Side Rendering) va CSR (Client-Side Rendering) farqi, vaqt chizig'i orqali solishtirish, SEO va sekin internet uchun SSR'ning afzalligi, CSR'ning server yuki va sahifalar orasida tez o'tish afzalligi, Hydration tushunchasi va V8/brauzer darajasida DOM qurilishining farqi.
93-dars
SSR vs CSR
Sizga restoran menyusini olib kelish kerak. Ikki yo'l bor:
- Ofitsiant tayyor menyuni olib keladi — siz darhol o'qiy olasiz. (SSR)
- Sizga bo'sh qog'oz va retsept beriladi, o'zingiz yozib chiqasiz — biroz kutasiz, lekin keyin qog'oz allaqachon sizda, tez varaqlaysiz. (CSR)
SSR = Server-Side Rendering — HTML server tomonida tayyor holda yasaladi. CSR = Client-Side Rendering — HTML brauzerning o'zida, JavaScript orqali yasaladi.
1. CSR (masalan, oddiy React ilovasi)
Server sizga deyarli bo'sh HTML yuboradi:
<!DOCTYPE html>
<html>
<body>
<div id="root"></div>
<script src="bundle.js"></script>
</body>
</html>
bundle.js — bu 500KB-1MB hajmdagi JavaScript fayl. Brauzer:
- Bo'sh sahifani ko'rsatadi (
<div id="root"></div>— hech narsa yo'q) bundle.jsni yuklaydi (internet tezligiga bog'liq — sekin bo'lishi mumkin)- JS'ni ishga tushiradi
- JS
document.getElementById('root')ichiga HTML'ni o'zi yasab qo'shadi - Faqat shundan keyin foydalanuvchi biror narsa ko'radi
2. SSR (masalan, Next.js server-side)
Server sizga tayyor HTML yuboradi:
<!DOCTYPE html>
<html>
<body>
<div id="root">
<h1>Assalomu alaykum, Bekzod!</h1>
<p>Sizda 5 ta xabar bor</p>
</div>
<script src="bundle.js"></script>
</body>
</html>
Brauzer buni olgan zahoti — darhol matnni ekranga chiqaradi, hech qanday JS kutmasdan. bundle.js — bu yerda ham yuboriladi, lekin u keyinroq, faqat tugmalarni "jonlantirish" (masalan, click ishlashi) uchun kerak bo'ladi.
3. Vaqt chizig'i orqali solishtirish
CSR:
0ms -------- HTML keldi (bo'sh) -------- foydalanuvchi HECH NARSA ko'rmaydi
|
300ms ------ JS (bundle.js) yuklandi -------- hali bo'sh
|
500ms ------ JS ishga tushdi, DOM yasadi -------- ENDI ko'rinadi
SSR:
0ms -------- HTML keldi (TO'LIQ) -------- foydalanuvchi DARHOL ko'radi
|
300ms ------ JS yuklanmoqda -------- sahifa ko'rinadi, lekin tugmalar hali ishlamaydi
|
500ms ------ JS ishga tushdi -------- endi tugmalar ham ishlaydi
Muhim farq: SSR'da foydalanuvchi tezroq biror narsa ko'radi (bu ko'rsatkich First Contentful Paint — FCP deyiladi), lekin sahifa to'liq interaktiv bo'lishi (tugmalar ishlashi) — ikkalasida ham deyarli bir xil vaqt oladi, chunki JS baribir yuklanishi va ishga tushishi kerak.
4. Nega SSR kerak — 2 ta aniq sabab
Sabab 1: Qidiruv tizimlari (SEO)
Google botining ishlash tamoyili — u sahifani ochadi va HTML'ni o'qiydi (ba'zan JS'ni ham bajaradi, lekin sekinroq va ishonchsizroq).
CSR'da bot dastlabki HTML'ni o'qisa:
<div id="root"></div>
— hech narsa yo'q, bo'sh. Bot sizning kontentingizni "ko'rmasligi" mumkin.
SSR'da bot darhol to'liq matnni ko'radi — chunki HTML allaqachon tayyor. Shuning uchun blog, onlayn-do'kon kabi "Google orqali topilishi kerak" saytlar uchun SSR muhim.
Sabab 2: Sekin internet/qurilmalar
Agar foydalanuvchida sekin internet bo'lsa, CSR'da u uzoq vaqt bo'sh ekran ko'radi (JS yuklanguncha). SSR'da esa hech bo'lmaganda matnni darhol ko'radi, garchi tugmalar hali ishlamasa ham.
5. Nega CSR ham kerak — bekorga ixtiro qilinmagan
- Server yuki kamroq — SSR'da har bir so'rovda server HTML yasashi kerak (bu — protsessor vaqti). CSR'da server faqat statik fayllarni beradi, ishni brauzer qiladi.
- Sahifalar orasida o'tish tez — SPA (Single Page Application)da, bir marta
bundle.jsyuklangandan keyin, keyingi sahifalarga o'tish server bilan qayta gaplashmasdan, faqat JS orqali, juda tez bo'ladi (masalan, Gmail'da papkalar orasida o'tish — sahifa qayta yuklanmaydi). - Admin panel, ichki dashboard kabi — SEO kerak bo'lmagan joylarda CSR yetarli va soddaroq.
6. Muammo — SSR'ning o'zi ham to'liq yechim emas: Hydration
Diqqat qiling: SSR HTML yuboradi, lekin bu HTML — jonsiz. Tugmani bossangiz, hech narsa bo'lmaydi, chunki unga hali JavaScript "ulanmagan". Buni "jonlantirish" jarayoni — Hydration deyiladi (bu — keyingi mavzumiz bo'ladi, hozircha faqat nomini bilib turing).
SSR HTML keldi → ko'rinadi, lekin O'LIK (click ishlamaydi)
│
▼
JS yuklandi → Hydration boshlandi → React/Vue mavjud HTML'ga "click eventlarini ulaydi"
│
▼
Endi TO'LIQ jonli — click ishlaydi
7. V8 va brauzer darajasida — nega bu farq real
CSR'da V8 ichida nima bo'ladi
- Brauzer bo'sh HTML'ni parse qiladi — DOM tree deyarli bo'sh
bundle.jsyuklanadi — V8 uni parse qiladi (bu — o'zi vaqt oladi, katta fayl bo'lsa sezilarli)- V8 kodni bajaradi:
ReactDOM.render(...)chaqiriladi - Bu funksiya ichida minglab
document.createElement,appendChildchaqiriladi - Har bir shu chaqiruv — DOM'ga tegish, ya'ni reflow/repaintga sabab bo'lishi mumkin (agar batch qilinmasa)
- Faqat shundan keyin — ekranda rasm paydo bo'ladi
SSR'da V8 ichida nima bo'ladi
- Brauzer to'liq HTML'ni parse qiladi — DOM tree darhol to'liq quriladi (browser'ning HTML parser'i buni V8'dan tashqarida, C++ darajasida, juda tez bajaradi)
- Ekranda rasm darhol paydo bo'ladi — JS umuman kerak emas bu bosqichda
bundle.jsfonda yuklanadi, V8 uni parse qiladi- Hydration jarayoni ishga tushadi — lekin bu DOM yaratmaydi (u allaqachon bor), faqat mavjud elementlarga event listener'larni "ulaydi" (
addEventListenerchaqiradi) — bu, yangi DOM yaratishdan ancha arzon operatsiya
Asosiy V8 darajasidagi xulosa: CSR'da butun DOM daraxti JavaScript orqali, dinamik qurilishi kerak — bu ko'p createElement/appendChild chaqiruvi, ko'p reflow. SSR'da DOM daraxti brauzerning tez, ichki HTML parseri orqali quriladi (bu — V8'dan tashqari, alohida, optimallashtirilgan C++ kod), JS faqat keyinroq, tayyor daraxtga "ulanish" uchun ishlatiladi.
8. Xulosa jadvali
| CSR | SSR | |
|---|---|---|
| Server nima yuboradi | Deyarli bo'sh HTML + katta JS | To'liq tayyor HTML |
| Foydalanuvchi qachon ko'radi | JS yuklanib, ishga tushgandan keyin | Darhol |
| SEO | Yomon (bot bo'sh HTML ko'radi) | Yaxshi |
| Server yuki | Kam | Ko'p (har so'rovda HTML yasaydi) |
| Sahifalar orasida o'tish | Juda tez (server bilan gaplashmaydi) | Sekinroq (har safar serverga so'rov) |
| Qachon mos | Dashboard, admin panel, ilova-uslubidagi saytlar | Blog, onlayn-do'kon, marketing sayt |