Asinxron dasturlash

JavaScript bir vaqtda bitta vazifani bajaradi.

Bitta vazifa bajarilayotganda boshqa JavaScript kodi ishga tushmaydi. Agar vazifa uzoq vaqt talab qilsa, vazifa tugamaguncha brauzer foydalanuvchi harakatlariga javob bera olmaydi.

Asinxron dasturlash bu muammoni uzoq muddatli operatsiyalarni fonda bajarishga ruxsat berish orqali hal qiladi, shu bilan birga JavaScript boshqa kodni ishga tushirishda davom etadi.

ULASHISH

"Async" nimani anglatadi?

Async so‘zi bir vaqtning o‘zida emas degan ma’noni anglatadi.

Keyingisini boshlashdan oldin bitta vazifa tugashini kutish o‘rniga, JavaScript operatsiya tugashini kutayotganda boshqa kodni ishlatishni davom ettirishi mumkin.

Amaliyot tugagach, JavaScript natijani boshqaradigan kodni ishga tushirish orqali davom etadi.


Sinxron JavaScript

JavaScript kodni qatorma-qator bajaradi.

Odatiy bo‘lib, JavaScript ko‘rsatmalari (statements)ni birin-ketin bajaradi.

Har bir operator keyingi operator boshlanishidan oldin tugashi kerak.

Misol

let x = 5;
let y = x * 2;

Misol

myDisplayer("A");
myDisplayer("B");
myDisplayer("C");
O‘zingiz sinab ko‘ring »

Natija quyidagicha bo‘lishi kerak: A B C.


Boshqaruv oqimi

Boshqarish oqimi - bu dasturda operatorlarning bajarilishi tartibi.

Odatiy bo‘lib, JavaScript kodni yuqoridan pastga va chapdan o‘ngga ishlaydi.


Funksiyalar ketma-ketligi

JavaScript funksiyalari chaqirilgan ketma-ketlikda bajariladi. Ular belgilangan ketma-ketlikda emas.

Ushbu misolda "Salom xayr" ko‘rsatiladi, chunki funksiyalar shu tartibda chaqiriladi:

Misol

function myFirst() {
  myDisplayer("Hello");
}

function mySecond() {
  myDisplayer("Goodbye");
}

myFirst();
mySecond();

O‘zingiz sinab ko‘ring »

Ushbu misolda "Alvido salom" ko‘rsatiladi, chunki funksiyalar shu tartibda chaqiriladi:

Misol

function myFirst() {
  myDisplayer("Hello");
}

function mySecond() {
  myDisplayer("Goodbye");
}

mySecond();
myFirst();

O‘zingiz sinab ko‘ring »

Yuqoridagi misollar oddiy sinxron bajarilish oqimidir.


Bloklovchi kod

Uzoq davom etadigan vazifa JavaScript’ni bloklaydi.

JavaScript band bo‘lsa-da, u tugmalarni bosish, klaviatura kiritish yoki boshqa hodisalarga javob bera olmaydi.

Misol

wait() funksiyasi tugamaguncha brauzer javob bermayapti:

function wait() {
  let i = 2e9;
  while (--i > 0);
}

wait();
myDisplayer("Done!");


Nega asinxron dasturlash?

Ba’zi amallarni bajarish vaqt talab qiladi:

  • downloading data
  • reading files
  • voqealarni kutish
  • foydalanuvchi kiritishini kutish
  • taymerni kutish
  • Taymerlar belgilangan millisekundlar o‘tgach ishga tushadi
  • Hodisalar hodisa tufayli ishga tushadi
  • Tarmoq so‘rovlari ma’lumot kelganda ishga tushadi

Agar JavaScript ushbu vazifalarni kutsa, sahifa muzlab qoladi.

Qotib qolgan sahifa — buzilgan sahifa.

Sezgir bo‘lib qolish uchun JavaScript asinxron dasturlashdan foydalanishi mumkin.

Asinxron oqim JavaScript-ning qanday qilib ma’lum operatsiyalarni fonda ishlashiga va ularning natijalari tayyor bo‘lganda qayta ishlanishiga imkon berishini anglatadi.


Asinxron tushunchalar

JavaScript handles asynchronus programming using different core concepts.

ConceptTavsif
SynchronusJavaScript’ning standart oqimi kodni qatorma-qator bajarishdir.
TimersBoshqa kod kutayotganda kodni ishga tushirishga ruxsat beradi.
CallbacksCallback-lar asinx JavaScript uchun birinchi yechim edi.
HodisalarBajarilishini kutayotgan callback funksiyalarni saqlaydi.
PromisesAsinxron amallarni toza boshqarish vositalari.
Async/AwaitAsinx kodni boshqarishning toza va zamonaviy usuli.

Keng tarqalgan asinxron amallar

Operatsiya Misol
Timer setTimeout()
Network request fetch()
User interaction click events
Animation requestAnimationFrame()
Web Workers Background processing

Asinxron natijalarni qayta ishlash usullari

JavaScript’da asinxron natijalarni qayta ishlashning bir necha usuli mavjud.

  • Callbacks
  • Promises
  • Async funksiyalar va await

Keyingi boblarda har bir usul tushuntiriladi.


Xulosa

  • JavaScript bir vaqtda bitta vazifani bajaradi.
  • Uzoq muddatli vazifalar brauzerdagi sahifani bloklashi mumkin.
  • Asynchronous operations can prevent blocking.
  • Asynchronous programming keeps applications responsive.
  • Asinxron xatti-harakatlar brauzer va JavaScript API-lar tomonidan taqdim etiladi, masalan, Callback-lar, Promiselar, asinxron va kutish.

Asinxron va parallel

Parallel turli protsessorlarda bir vaqtning o‘zida bir nechta ishlarni bajarishni anglatadi.

Asinxron vazifalar o‘rtasida almashishni anglatadi, lekin ularni bir vaqtning o‘zida bajarish shart emas.

Bir oqimli JavaScript dvigateli asinxron vazifalarni bir nechta protsessor yadrosidan foydalanish o‘rniga, ular o‘rtasida almashish uchun hodisalar sikli (event loop) yordamida boshqaradi. Vazifa tugagach, u natijani qayta ishlash uchun asosiy oqimga (callback, promise yoki hodisa orqali) signal beradi.

XususiyatAsync (Deferred)Parallel (Simultaneous)
GoalResponsiveness (Don’t freeze)Unumdorlik (ishni tezroq bajarish)
ExecutionBloklamaslik (I/O’ni kutish)Simultaneous (crunching many numbers)
Hardware1 ta protsessorda ishlay oladiRequires multiple processors
MisolFoydalanuvchi sahifani aylantirayotganda kodni bajarishProcessing 10,000 images at once

Qisqasi, asinxronlik tizimga shuni aytadi:

  1. Bu vazifani hozir boshla
  2. I don’t need the result immediately
  3. Tugagach, keyinroq menga xabar ber

Analogy:

Restoranda ovqat buyurtma qilish.

  1. Buyurtma berasiz (asinxron chaqiruv)
  2. Oshpaz tayyorlagancha o‘tiring va boshqa narsalarni qiling
  3. Ofitsiant ovqatni olib keladi (callback)

Siz nimani o‘rganasiz

Ushbu o‘quv qo‘llanma asenkron dasturlash tushunchasini bosqichma-bosqich rivojlantiradi:

  • Taym-autlar nima.
  • Why callbacks were created.
  • Qanday qilib Promiselar kelajak qadriyatlarini ifodalaydi.
  • Nima uchun async va await afzal ko‘riladi.
  • Asinxron kodni qanday debug qilish kerak.

Ushbu vositalarning har biri oldingi vositadagi muammolarni hal qilish uchun yaratilgan.

Callback-lar asinxron JavaScript uchun birinchi yechim edi.


W3Schools Pathfinder

Yutuqlaringizni kuzating – bu bepul!