Skip to main content

Синхронний VS асинхронний код

Коротко

Тип кодуЩо робить
Синхронний (synchronous)Виконує операції строго по порядку, одна за одною. Наступний рядок не почнеться, поки не завершиться попередній.
Асинхронний (asynchronous)Дозволяє продовжувати виконання програми, не чекаючи завершення довгих операцій (мережевих запитів, таймерів тощо).

Приклад синхронного коду

javascript
console.log('1'); console.log('2'); console.log('3');

Вивід:

javascript
1 2 3

Все виконується порядково, наступна команда не почнеться, поки не завершиться попередня. Це - синхронне виконання.


Приклад асинхронного коду

javascript
console.log('1'); setTimeout(() => { console.log('2'); // виконається пізніше }, 1000); console.log('3');

Вивід:

javascript
1 3 2

Чому?

  • setTimeout - асинхронна операція: вона планується на майбутнє.
  • JavaScript не чекає її завершення - він іде далі.
  • Коли таймер спрацює, функція потрапить у чергу подій (event queue) і виконається пізніше, коли стек викликів звільниться.

Як це працює під капотом

JS має один потік (single thread), але завдяки Event Loop (циклу подій) може працювати асинхронно і неблокуюче.

Синхронно:

  • Все йде підряд.
  • Поки одна операція виконується - інші чекають.

Асинхронно:

  • Довгі операції (наприклад, fetch, setTimeout, I/O) передаються у зовнішні API.
  • JS продовжує виконувати решту коду.
  • Коли операція завершена - результат повертається в чергу колбеків, і виконується пізніше.

Візуально

Синхронний:

javascript
[ Задача 1 ] → [ Задача 2 ] → [ Задача 3 ]

Асинхронний:

javascript
[ Задача 1 (асинхронна) ] → [ Задача 2 ] ↓ (результат повернеться пізніше)

Реальні приклади

СитуаціяСинхронний кодАсинхронний код
Читання файлуJS чекає, поки файл повністю прочитаєтьсяJS передає завдання API і продовжує роботу
Запит на серверКод "заморожується" до відповідіКод іде далі, відповідь обробляється пізніше
Цикл із мільйоном ітерацій"Підвішує" інтерфейсВиконується у фоні (через Web Worker або асинхронно)

Асинхронність у JavaScript реалізується через:

МеханізмПриклад
Callbacks (колбеки)setTimeout(() => {...}, 1000)
Promisesfetch('/data').then(...)
async / awaitconst data = await fetch('/data')
Event listenersbutton.addEventListener('click', ...)

Приклад з fetch (реальна асинхронність)

javascript
console.log('Початок'); fetch('https://api.example.com/user') .then(res => res.json()) .then(data => console.log('Відповідь отримано:', data)); console.log('Кінець');

Вивід:

javascript
Початок Кінець Відповідь отримано: {...}

Поки сервер відповідає - JavaScript не чекає, а йде далі і повертається до колбека, коли дані готові.


ПІДСУМОК

ВідмінністьСинхронний кодАсинхронний код
ВиконанняПослідовно, блокуючеПаралельно (через події), неблокуюче
ЗатримкиБлокують програмуНе заважають виконанню
Використовується дляПростих і коротких операційЗапитів, таймерів, файлів, API
Прикладconsole.log()setTimeout(), fetch()
МеханізмСтек викликівEvent Loop і черги завдань

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.