Wat is Event loop?

Het mechanisme waarmee een JavaScript-runtime wachtend werk een voor een oppakt en op één thread uitvoert. Werk dat ontstaat door klikken, timers, voltooide netwerkverzoeken en dergelijke wordt als task in een rij gezet, en als de huidige code klaar is, haalt de event loop de volgende task op. Promise-callbacks (microtasks) worden na elke task allemaal uitgevoerd, vóór de volgende task. Als één stuk werk lang duurt, stoppen de afhandeling van andere gebeurtenissen en het tekenen van het scherm.

Japanse benaming: イベントループ

“Event loop” komt voor in 1 oefenvragen uit 1 onderwerpen, bijv. Basis van webtechnologie.

Vakgebied: Basis van webtechnologie

Volgorde van uitvoering

Als bijvoorbeeld na console.log('A') de uitvoer van B met setTimeout en die van C met then van een Promise wordt ingepland, en ten slotte console.log('D') wordt uitgevoerd, is de volgorde van de uitvoer A, D, C, B. Eerst wordt alle synchrone code uitgevoerd, daarna de microtask C en ten slotte de task B. Zelfs met een vertraging van 0 ms wordt setTimeout niet direct uitgevoerd.

Waarom het scherm bevriest

De hoofdthread van de browser voert JavaScript uit, verwerkt gebeurtenissen zoals klikken en tekent het scherm. Als een berekening die enkele seconden duurt in één keer wordt uitgevoerd, kan de event loop in die tijd de volgende task niet ophalen, zodat knoppen niet reageren en het scherm niet wordt bijgewerkt. Zware berekeningen worden met een Web Worker naar een andere thread verplaatst, of in kleine stukken verdeeld en beetje bij beetje uitgevoerd.

Asynchrone invoer en uitvoer

Bij netwerkverzoeken en het lezen en schrijven van bestanden wordt de thread niet stilgezet tijdens het wachten op voltooiing; in plaats daarvan wordt de code geregistreerd die moet worden aangeroepen als het klaar is (een callback of een Promise). Bij voltooiing wordt die code als task in de rij gezet, en de event loop voert haar op haar beurt uit. Runtimes aan de serverkant zoals Node.js gebruiken hetzelfde idee: ze voeren JavaScript op één thread uit en verwerken tegelijk veel verbindingen.

Veelgestelde vragen

Wordt setTimeout met 0 ms direct uitgevoerd?

Nee. Na de opgegeven tijd wordt de functie als task in de rij gezet, en ze wordt pas uitgevoerd nadat de code die nu draait en de microtasks die tot dan toe zijn ingepland, klaar zijn. 0 ms betekent „zo snel mogelijk, maar na het huidige werk”.

Kan JavaScript parallel rekenen?

De JavaScript van de pagina zelf draait op één hoofdthread, maar met een Web Worker kan een script parallel op een andere thread draaien. Workers hebben geen directe toegang tot het DOM, dus ze wisselen berichten uit met de hoofdthread om resultaten door te geven.

“Event loop” in de toelichting

Vragen met “Event loop” (1)

  1. In welke volgorde worden de tekens op de console getoond als de bovenstaande JavaScript in een browser wordt uitgevoerd?

Verwante termen

Cookie (HTTP-cookie) CORS (cross-origin resource sharing) DOM (Document Object Model) HTTP (Hypertext Transfer Protocol) HTTP-methode HTTP-statuscode JSON (JavaScript Object Notation) JWT (JSON Web Token) OAuth REST-API

Naar de woordenlijst