CodeVerce
64 subscribers
70 photos
6 videos
10 files
66 links
Darslar • Maqolalar • Kodlar
admin: @dinMuhammad05
Download Telegram
Forwarded from Brogrammist
Kod yozganda shunqa "tozalash" ishlarini qilishni yoqtiraman.

React bilan ishlaganda iloji boricha mantiqiy ifodalarni JSXdan ajratish kerak. Shunda kod ancha "o'qishli" va toza chiqadi.

Bu ideal kod emas, ammo hech bo'lmasa shunday "best practice"larni doim ishlatish kerak.
1.1 Client-Side Rendering (CSR)
Bu nima?
CSR — bu an'anaviy React ilovalarining ishlash usuli. Brauzer dastlab serverdan bo'sh HTML sahifa va katta JavaScript faylini yuklab oladi. JavaScript ishga tushgandan keyin, u ma'lumotlarni API dan oladi va sahifani to'ldiradi.

Next.js da qanday ishlatiladi?
App Router da barcha komponentlar sukut bo'yicha (default) Server Component hisoblanadi. CSR ni yoqish uchun faylning eng yuqori qismiga 'use client' direktivasini qo'shish kerak.

Qachon ishlatiladi?
Foydalanuvchi bilan faol aloqa (interaktivlik) kerak bo'lganda (tugmalar, formalar, onClick hodisalari).
Brauzerga xos API lar (window, document, localStorage) ishlatilganda.
React hooklari (useState, useEffect) kerak bo'lganda.
Afzalligi va Kamchiligi:
+ Yuklangandan so'ng sahifalar o'rtasida o'tish juda tez bo'ladi.
- Dastlabki yuklanish sekin bo'lishi mumkin (oq ekran muammosi).
- SEO uchun har doim ham ideal emas (garchi zamonaviy qidiruv tizimlari JS ni o'qisa ham).

1.2 Server-Side Rendering (SSR)
Bu nima?
SSR da har safar foydalanuvchi sahifaga kirganda, server sahifani noldan boshlab generatsiya qiladi (HTML hosil qiladi) va tayyor HTML ni brauzerga yuboradi.

Next.js da qanday ishlatiladi?
Agar siz ma'lumot olishda fetch funksiyasidan foydalanib, unga { cache: 'no-store' } opsiyasini bersangiz, Next.js bu sahifani har safar yangidan render qiladi.

Qachon ishlatiladi?

Ma'lumotlar juda tez-tez o'zgarganda (masalan, aksiyalar bozori, jonli sport natijalari).
Har bir foydalanuvchi uchun individual ma'lumot ko'rsatilganda (masalan, shaxsiy kabinet, savat).
Afzalligi va Kamchiligi:
+ Doimiy eng yangi ma'lumot.
+ SEO uchun juda yaxshi, chunki HTML to'liq keladi.
- Serverga katta yuk tushadi.
- TTFB (Time to First Byte) sekinroq bo'lishi mumkin, chunki server javob berishdan oldin ma'lumotlarni bazadan olib, HTML-ni yasashi kerak.


1.3 Static Site Generation (SSG)
Bu nima?

SSG — bu Next.js ning "super kuchi". Sahifalar loyihani qurish vaqtida (Build Time) bir marta generatsiya qilinadi va statik HTML fayllar sifatida saqlanadi. Foydalanuvchi kirganda, server hech qanday ish bajarmaydi, shunchaki tayyor faylni uzatadi.

Qachon ishlatiladi?

Bloglar, yangiliklar saytlari, hujjatlar (documentation), marketing sahifalari.
Ma'lumotlar har bir so'rovda o'zgarishi shart bo'lmagan joylarda.

Afzalligi va Kamchiligi:

+ Saytning ishlash tezligi maksimal darajada bo'ladi (CDN orqali tarqatish oson).
+ Serverga deyarli yuk tushmaydi.
- Ma'lumotni yangilash uchun butun loyihani qayta qurish (rebuild) kerak bo'ladi.



1.4 Incremental Static Regeneration (ISR) - "Yangilangan Sut" Analogiyasi:

Tasavvur qiling, siz sut do'koniga (web saytga) sut (ma'lumot) olish uchun keldingiz:
1. SSG (Static): Do'kon egasi faqat ertalab soat 6:00 da sigir sog'ib, sutni qadoqlab qo'ygan. Siz tushda kelsangiz ham, kechqurun kelsangiz ham o'sha ertalabki sutni olasiz. Bu juda tez, chunki sut tayyor, lekin vaqt o'tishi bilan "eski" bo'lib qoladi.

2. SSR (Server): Siz do'konga kelganingizda, sotuvchi orqa hovliga yugurib, sigirni sog'ib, sutni qaynatib, idishga solib olib keladi. Bu sut eng yangi (fresh), lekin siz kutib qolasiz. Agar 100 kishi kelsa, sotuvchi 100 marta yugurishi kerak.

3. ISR (Incremental): Sotuvchida muzlatgich bor. U ertalab sutni tayyorlab qo'yadi. Siz kelganda darhol muzlatgichdagi sutni beradi (tez). Lekin u o'ziga qoida qo'ygan: "Har 1 soatda sutni yangilayman".


Siz 12:00 da keldingiz, u sizga tayyor sutni berdi.

Siz 12:01 da yana keldingiz, u yana o'sha sutni berdi (chunki 1 soat o'tmadi).

13:05 da (1 soatdan keyin) kimdir keldi. Sotuvchi unga hali ham o'sha eski sutni beradi (kutirmaslik uchun), lekin orqa fonda yordamchisiga "Yangi sut olib kel!" deb buyruq beradi.

13:06 da kelgan keyingi xaridor endi mutlaqo yangi sutni oladi.




Texnik Amalga Oshirish:
Next.js da buni amalga oshirish juda oson. fetch funksiyasiga next: { revalidate: 60 } opsiyasini qo'shasiz. Bu "ma'lumotni 60 soniya davomida keshda saqlash, undan keyin yangilash" degan ma'noni anglatadi.

#nextjs
katta kompaniyalarda ham bug bo'lib to'radi 😁
Batch or Stream
Zamonaviy dasturiy ta'minot muhandisligi, xususan, backend tizimlarini loyihalashda biz ko‘pincha yuqori darajali abstraksiyalarga tayanamiz. NestJS kabi freymvorklar, TypeScript ning kuchli tiplashtirish tizimi va Node.js ning ekotizimi bizga murakkab biznes mantiqlarini tez va samarali qurish imkonini beradi. Biroq, Senior Software Engineer darajasiga ko‘tarilish, ushbu qulay abstraksiya pardasini ko‘tarib, uning ostida yotgan fundamental mexanizmlarni — Operatsion Tizim (OT) yadrosi, xotira boshqaruvi, jarayonlararo aloqa va tarmoq stekini chuqur tushunishni talab etadi. Kodimiz yozilgan tildan qat'i nazar, u oxir-oqibat apparat resurslarini boshqaruvchi operatsion tizim ustida bajariladi. NestJS ilovasi shunchaki dekoratorlar to‘plami emas; u V8 dvigateli tomonidan kompilyatsiya qilinadigan, Libuv orqali tizim chaqiruvlarini (system calls) amalga oshiradigan va Linux yadrosining rejalashtiruvchisi (scheduler) tomonidan boshqariladigan jarayondir.
Program vs Process vs Thread
Ko‘pchilik dasturchilar "Node.js bir oqimli" degan iborani noto‘g‘ri tushunadilar. Ha, siz yozgan JavaScript kodi (Controllerlar, Servislar) bitta oqimda bajariladi, lekin Node.js platformasining o‘zi ko‘p oqimlidir. Uning yuragi bo‘lgan Libuv kutubxonasi C tili da yozilgan bo‘lib, u operatsion tizimning asinxron imkoniyatlarini ta'minlaydi.
TCP qanday ulanadi? (Nazariya)

Sizning ilovangiz ma'lumotlar bazasi yoki boshqa serverga ulanishidan oldin, ular o'rtasida 3 qadamli salomlashish sodir bo'ladi. Bu dasturlashda juda mashhur bo'lgan 3-Way Handshake deyiladi:

SYN (Synchronize): Sizning tizimingiz serverga paket jo'natadi: "Salom, men sen bilan ulanmoqchiman, portlaring ochiqmi?"

SYN-ACK (Synchronize-Acknowledge): Server buni qabul qilib, javob qaytaradi: "Salom, ha, portlarim ochiq, gaplashishga tayyorman."

ACK (Acknowledge): Sizning tizimingiz tasdiqlaydi: "Ajoyib, unda ma'lumot almashishni boshladik!"

Shu uch qadam to'liq bajarilgandan keyingina sizning HTTP GET yoki POST so'rovingiz tarmoqqa chiqadi.
Ustozimiz aytar aytar edila: har qanday dastur (loyiha) og'riqdan kelib chiqiladi deb !

Loyiha qilmoqchi edim resurs qidirdim lekin ko'p site-larga Uzbekistondan to'rib kira olmadim va VPN ishlatishga to'g'ri keldi.
VPN ishlatar ekanman undagi reklamalar holdan toydirdi, reklamasiz ishlatish esa pullik edi shu vaqt hayolimga uzim uchun shaxsiy VPN yaratsam qanday bo'lar ekun degan fikr keldi, ishga kirishdim va buni udaladim 🎉
O'sish = Yashash


"Agar o'smayotgan bo'lsang, demak yashamayapsan"
Ta'rif: Ma'lumotlar bazasi (MB) – bu ma'lum bir tuzilishga ega bo'lgan, o'zaro bog'liq ma'lumotlarning tartiblangan to'plamidir. U ma'lumotlarni samarali saqlash, boshqarish, yangilash va ulardan foydalanishni ta'minlaydi. Oddiy qilib aytganda, bu ma'lumotlar uchun elektron "kartoteka" yoki "ombor".


Tarixiy fakt: "Ma'lumotlar bazasi" atamasi ilk bor 1960-yillarda, kompyuter texnologiyalari rivojlanishi bilan birga paydo bo'lgan. Dastlabki bazalar ierarxik va tarmoqli modellarga asoslangan edi.

#database@CodeVerce
MBBT (Ma'lumotlar Bazalarini Boshqarish Tizimi - DBMS)

Ta'rif: DBMS – bu ma'lumotlar bazasini yaratish, boshqarish va u bilan o'zaro aloqa qilish uchun mo'ljallangan dasturiy ta'minot. Foydalanuvchi yoki dasturlar MBBT orqali ma'lumotlar bilan ishlaydi. Mashhur MBBTlarga misollar: MySQL, PostgreSQL, Oracle Database, Microsoft SQL Server, SQLite.


PS: DBMS --> database management services.

#database@CodeVerce
Relatsion Ma'lumotlar Bazalari (Relational Databases)

Ta'rif:
Bu eng keng tarqalgan ma'lumotlar bazasi turi bo'lib, unda ma'lumotlar jadvallar (relations) ko'rinishida saqlanadi. Jadvallar satrlar (qaydlar/tuples) va ustunlar (maydonlar/attributes) dan iborat. Jadvallar o'zaro kalitlar yordamida bog'lanadi.

Tarixiy fakt: Relatsion model konsepsiyasini 1970-yilda IBM xodimi Edgar F. Kodd (Edgar F. Codd) taklif qilgan. Uning bu inqilobiy g'oyasi zamonaviy ma'lumotlar bazalarining poydevorini qo'ygan.

#database@CodeVerce