Skip to content

Commit

Permalink
docs: async
Browse files Browse the repository at this point in the history
  • Loading branch information
KostaD02 committed Jul 20, 2024
1 parent d866ebd commit 2736580
Show file tree
Hide file tree
Showing 5 changed files with 89 additions and 0 deletions.
89 changes: 89 additions & 0 deletions src/content/guides/javascript/async-programming.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
---
title: 'ასინქრონული პროგრამირება'
description: 'ასინქრწონული პროგრამირება JavaScript-ში'
keywords: 'სინქრონული, ასინქრონული, async, sync, promise, callback'
---

პროგრამირებაში ხშირია მომენტი, როცა გვჭირდება კოდი გაეშვას კონკრეტული თანმიმდევრობით ან კოდის გაშვების პარალელურად ვუშვებდეთ სხვადასხვა მოქმედებებს.

## რა არის სინქრონული პროგრამირება

სინქრონულ პროგრამირებაში მოისაზღება კოდის გაშვება ხაზობრივად. კოდი იწყებს გაშვებას ზემოდან და ნელ-ნელა მიჰყვება სხვადასხვა ხაზებს. სანამ კონკრეტული ხაზის მოქმედებას არ დაამთავრებს მანამდე არ დაიწყებს ახალი ხაზის განხილვას.

მაგალითისთვის განვიხილოთ შემდგომი კოდი:

```js
console.log('დასაწყისი');

wait(2000);

console.log('დასასრული');

function wait(ms) {
const start = Date.now();
let now = start;
while (now - start < ms) {
now = Date.now();
}
}
```

არსებულ მაგალითში გვაქვს ფუნქცია `wait`, რომელიც ჩვენს კოდს სინქრონულად შეაყოვნებს გადაცემული მილიწამების მიხედვით. ჯერ კოდში დაილოგება **დასაწყისი** და 2 წამის შემდგომ დაილოგება **დასასრული**.

ამრიგად სინქრონულ პროგრამირებაში კოდის ერთი ბლოკი სანამ არ დამთავრდება მანამდე არ გადაინაცვლებს შემდგომზე.

ძირითადი მცნებები სინქრონული პროგრამირების:

- **ბლოკზე დამოკიდებული**: ყოველი კოდის ბლოკი უცდის წინა ბლოკის დასრულებას. თუ რომელიმე კოდის ბლოკს სჭირდება დიდი დრო შესასრულებლად, მთლიანი კოდის გაშვება გადაიდება მანამ სანამ ის ბლოკი არ დასრულდება.
- **პროგნოზირება**: სინქრონულ კოდში მთლიანი ნაკადი პროგნოზირებადია, რადგან ვიცით თუ რა კოდის შემდგომ რა უნდა გაეშვას.
- **მარტივი შემოწმება**: რადგანაც კოდი ეშვება წრფივად (ზემოდან ქვემოთ), მისი შემოწმება (debug) საკმაოდ მარტივია.

### უარყოფითი მხარეები სინქრონული პროგრამირების

სინქრონული პროგრამირების დროს შესაძლებელია ხშირად წავაწყდეთ პერფორმანსის პრობლემებს, რომელიც გულისხმობს, გრძელი ოპერაციების სინქრონულად შესრულებას. ამ დროს შესაძლებელია აპლიკაცია გადავიდეს ურეაქციო მდგომარეობაში, რომელიც მომხარებლისთვის არის ძალიან ცუდი.

### როდის უნდა გამოვიყენოთ სინქრონული პროგრამირება ?

სინქრონული პროგრამირება გამოსადეგია მაშინ, როცა გვსურს მარტივი სკრიპტის გაშვება, სადაც არ არის ასინქრონული პროცესები გასაშვები. ამავდროულად კარგია კოდის ინიციალიზებისთვის, როცა გვსურს საწყისი მნიშვნელობების განსაზღვრა კონკრეტული state-სთვის.

## რა არის ასინქრონული პროგრამირება

ასინქრონული პროგრამირების დროს, შეგვიძლია სხვადასხვა პროცესები ისე გავუშვათ, რომ არ დავბლოკოთ მთავარი ნაკადი სინქრონული პროგრამირებისგან განსხვავებით. მსაგვსი მოქმედებები ხშირად არის სერვერიდან ინფორმაციის მოთხოვნა ან ჩაწერა, სხვადასხვა state-ების ამუშავება და ა.შ.

ძირითადი ცნებები ასინქრონულ პროგრამირებაში:

- **დაუბლოკავი / თავისუფალი**: კოდის გაშვება შესაძლებებლია სხვადასხვა თანმიმდევრობით, ისე რომ მთავარი ნაკადი არ იყოს დაკავებული. ხშირ შემთხვევაში მომხარებლის ინტერფეისთან მუშაობის დროს, ბევრი ფრაგმენეტები ერთმანეთისგან დამოუკიდებლად უნდა გაეშვას. JavaScript არის ერთ-ნაკადიანი პროგრამული ენა, თუმცა მას მაინც შეუძლია პროცესების ცალ-ცალკე გაშვება.
- **Callback** ფუნქციების არსებობა, რომელიც გაეშვება საჭირო დროს, როცა კონკრეტული პროცესი დაიწყება ან შესრულდება.
- **Promise** ობიექტები, რომლებიც წარმოადგენს შესაძლო შესრულებას (ან ვერ შესრულებას) ასინქრონული ოპერაციის.
- **Async/Await**: სინტაქსი, რომელიც საშუალებას გვაძლევს ასინქრონული პროცესები ჩავწეროთ სინქრონულად.

ასინქრონული კოდის მაგალითი `callback` გამოყენებით:

```js
console.log('დასაწყისი');

setTimeout(() => {
console.log('პროცესი შესრულდა');
}, 2000);

console.log('დასასრული');
```

ამ შემთხვევაში ჯერ დაილოგება `დასაწყისი` შემდგომ `დასასრული` და 2 წამის შემდგომ `პროცესი შესრულდა`. `setTimeout` არის ფუნქცია, რომელიც მასში გადაცემულ `callback` ფუნქციას გამოიძახებს მეორე პარამეტრის მიხედვით. [`setTimeout`](./doc/guides/javascript/canvas/basic-animations#დაგეგმილი_განახლებები) განვიხილეთ კანვასის სტატიაში.

### დადებითი მხარეები ასინქრონული პროგრამირების დროს

ასინქრონული პროგრამირების დროს, თქვენი კოდი მუშაობის სისწრაფე გაუმჯობესებულია, რადგან ბევრ ოპერაციას ამუშავებთ სინქრონულად, ისე რომ არ იბლოკება არცეთი. უკეთესი სამომხარებლო ინტერფეისი და სამუშაო გარემო.

### როდის უნდა გამოვიყენოთ ასინქრონული პროგრამირება ?

სერვერთან კავშირის დროს, ხშირ შემთხვევაში დაგვჭირდება ასინქრონული ოპერაციები ([`REST API` მოთხოვნები](./doc/guides/javascript/rest-api)). ასევე ფაილებთან მუშაობის დროს, დაგვიანებული ან განმეორებადი ოპერაციების დროს და სხვადასხვა ივენთების გაშვების დროს.

## შეჯამება

ხშირ შემთხვევაში ორივე მიდგომას გამოიყენებთ წერის დროს, მთავარია კარგად გვესმოდეს თუ რა დროს რომელი გვჭირდება. შემდგომი სტატიებში განხილული იქნება ის ხელსაწყოები, რომლებიც დაგვეხმარება ასინქრონული პროგრამირებისთვის:

- [`Promise`](./doc/guides/javascript/async-programming/promise)
- [`Async-Await`](./doc/guides/javascript/async-programming/async-await)
- [`Try-Catch`](./doc/guides/javascript/async-programming/try-catch)
- [შეჯამება](./doc/guides/javascript/async-programming/summary)
Empty file.
Empty file.
Empty file.
Empty file.

0 comments on commit 2736580

Please sign in to comment.