Middle
Ispričaj mi o petlji događaja (event loop).
sobes.tech АИ
Одговор од АИ
Циклус догађаја је основа асинхроног рада у JavaScript-у. Он управља извршавањем кода, обрадом догађаја и интеракцијом са спољним светом.
Главне компоненте:
- Heap (Хејп): Област меморије за доделу објеката.
- Stack (Стек): Место где се чувају контексти извршавања функција. При позиву функције, она се поставља у стек, а при завршетку уклања.
- Web API: Интерфејси које пружа прегледач (DOM, AJAX, Timers итд.). Обрађују асинхроне операције.
- Callback Queue (Ред за повратне позиве): Ред порука везаних за догађаје. Web API-ји овде стављају callback-ове завршених асинхроног операција.
- Циклус догађаја (Event Loop): Континуирано прати стек и ред callback-ова. Ако је стек празан, узима први callback из реда и ставља га у стек за извршавање.
Процес:
- Синхронај код се извршава у стеку.
- Асинхроне операције (
setTimeout,fetch) се шаљу у Web API-је. - Када асинхрона операција заврши, њен callback се поставља у ред callback-ова.
- Циклус догађаја чека да стек постане празан.
- Када је стек празан, циклус узима први callback из реда и га ставља у стек, где се извршава.
Пример са setTimeout:
console.log('Почетак');
setTimeout(() => {
console.log('Унутар setTimeout');
}, 0);
console.log('Крај');
Излаз ће бити:
Почетак
Крај
Унутар setTimeout
Иако је timeout 0 мс, callback setTimeout се извршава након синхроног кода јер улази у ред и чека испразњење стека.
У Node.js-у такође постоји циклус догађаја, али са неким разликама у фазама обраде редова.