Asinxron Dasturlash haqida
Asinxron kod dasturga uzoq davom etadigan vazifani (masalan, faylni yuklash yoki serverga so'rov yuborish) boshlash va u tugashini kutmasdan boshqa ishlarni davom ettirish imkonini beradi.
Nega asinxronlik kerak?
Asinxron kod ilovaning "muzlab qolishini" (freezing) oldini oladi. Agar sahifa bitta rasmni yuklash uchun butunlay to'xtab qolsa, foydalanuvchi tajribasi juda yomon bo'ladi.
Boshqaruv oqimi (Control Flow)
Control Flow — bu dasturdagi buyruqlarning bajarilish tartibidir. Odatda JavaScript kodni yuqoridan pastga va chapdan o'ngga qarab bajaradi. Asinxron dasturlash esa bu tartibni o'zgartirishi mumkin.
Sinxron vs Asinxron
Sinxron oqimda har bir qator o'zidan oldingisi tugashini kutadi.
Sinxron misol:
console.log('A')
console.log('B')
console.log('C')
// Natija har doim: A B CAsinxron misol:
console.log('A')
setTimeout(() => {
console.log('B')
}, 1000)
console.log('C')
// Natija: A C BDiqqat qiling!
Yuqoridagi misolda "B" bir soniyadan keyin chiqadi, ungacha esa JavaScript "C" ni chiqarib bo'ladi. Bu asinxronlikning oddiy namunasidir.
Yangi boshlovchilarning xatosi
Ko'pincha dasturchilar asinxron natijani darhol olishni kutishadi:
let result
setTimeout(() => {
result = 5
}, 1000)
console.log(result) // natija: undefinedresult o'zgaruvchisi undefined bo'ladi, chunki bir soniya vaqt o'tmasdan turib console.log ishga tushib bo'lgan.
Asinxronlik vs Parallelizm
- Parallelizm (Parallel) — bir vaqtning o'zida bir nechta protsessor yordamida bir nechta ishni bajarish.
- Asinxronlik (Asynchronous) — vazifalar orasida almashib turish (Switching).
JavaScript asosan bitta oqimli (single-threaded) dvigatelda ishlaydi, u asinxron vazifalarni Event Loop orqali boshqaradi.
| Xususiyat | Asinxron (Kechiktirilgan) | Parallel (Bir vaqtda) |
|---|---|---|
| Maqsad | Sahifa qotib qolmasligi | Ishni tezroq bitirish |
| Bajarilishi | Navbatma-navbat almashish | Bir paytda bir nechta amal |
| Uskuna | 1 ta protsessorda ham bo'ladi | Bir nechta protsessor kerak |
Tutorial davomida nima o'rganamiz?
Biz asinxron dasturlashni bosqichma-bosqich o'rganamiz:
- Taymerlar (Timeouts) nima?
- Nima uchun callbacklar yaratilgan?
- Promislar kelajakdagi qiymatni qanday ifodalaydi?
- Nima uchun
asyncvaawaiteng yaxshi tanlov? - Asinxron kodni qanday debug qilish kerak?
Restoran analogiyasi:
Ovqatga buyurtma berdingiz (async call). Oshpaz ovqatni tayyorlaguncha siz joyingizga o'tirib boshqa ishlar bilan shug'ullanasiz. Ofitsiant ovqatni olib kelganida (callback), siz ovqatlanishni boshlaysiz.
