L'Event Loop de JavaScript: De la Confusió al Domini

Domina l'Event Loop de JavaScript. Aprèn per què setTimeout(0) no és 0ms, com les microtasques tenen prioritat i com Node.js escala amb un sol fil.

domingo, 26 de julio de 2026 • 3 min de lectura • Equip Q2BSTUDIO

Entiende el Event Loop: Async, Microtareas y Macrotareas

Quan parlem de JavaScript, sovint sentim frases com 'és monofil però asíncron'. Aquesta aparent contradicció és possible gràcies al Event Loop, un mecanisme que orquestra l'execució sense bloquejar el fil principal. Entendre'l no només et converteix en un millor desenvolupador, sinó que et permet dissenyar aplicacions més ràpides, fiables i escalables. A Q2BSTUDIO, apliquem aquest coneixement diàriament en projectes de aplicacions a mida, intel·ligència artificial, ciberseguretat i cloud.

El cor de JavaScript és la Call Stack (pila de crides), on s'apilen les funcions a mesura que s'executen. Com que JavaScript és monofil, només pot fer una cosa alhora. Si una tasca triga molt —com llegir un fitxer o esperar una resposta HTTP—, el fil es bloqueja i la interfície es congela. Per evitar-ho, l'entorn d'execució (navegador o Node.js) proporciona API asíncrones que deleguen les operacions pesades a altres fils del sistema operatiu, mentre el fil principal resta lliure.

L'Event Loop actua com un supervisor incansable: verifica constantment si la pila de crides està buida. Quan ho està, pren la següent tasca de les cues d'espera i l'empeny a la pila per executar-la. Aquest bucle infinit és el secret de la naturalesa no bloquejant de JavaScript. No forma part del motor V8, sinó del runtime que l'allotja: el navegador o libuv a Node.js.

Hi ha dos tipus principals de cues: Macrotasques (setTimeout, setInterval, I/O) i Microtasques (Promeses, queueMicrotask, MutationObserver). La regla d'or és que, a cada cicle de l'Event Loop, es buida primer tota la cua de microtasques abans de processar una sola macrotasca. Això explica per què una Promesa resolta sempre s'executa abans que un setTimeout amb retard zero, fins i tot si es programa després.

Precisament, setTimeout(fn, 0) no executa la funció en 0 mil·lisegons. Només la col·loca a la cua de macrotasques amb la prioritat més baixa. Primer s'han de buidar la pila i totes les microtasques pendents. A més, l'estàndard HTML imposa un retard mínim de 4 ms quan hi ha crides niades. Per tant, no és una manera fiable de retardar codi; serveix per cedir el control a l'Event Loop i permetre que altres processos (com renderitzat o esdeveniments d'usuari) siguin atesos.

Aquest model evita les condicions de carrera de memòria típiques dels llenguatges multifil, però introdueix condicions de carrera lògiques. Si dues peticions asíncrones es llancen sense control, l'ordre de finalització pot variar i provocar errors difícils de depurar. La solució passa per usar Promise.all, execució seqüencial o guardes d'estat. A Q2BSTUDIO, quan desenvolupem solucions de cloud AWS/Azure, dissenyem aquestes orquestracions amb cura per garantir la integritat de les dades.

Una altra tècnica avançada és el task chunking: dividir tasques llargues en fragments executats mitjançant setTimeout, permetent que l'Event Loop atengui la interfície d'usuari entre fragments. Així evitem que el navegador es congeli durant operacions intenses. És crucial en aplicacions de Business Intelligence amb Power BI, on grans volums de dades s'han de processar sense perdre la fluïdesa visual.

Node.js porta aquest model a l'extrem. Amb un sol fil de JavaScript i un pool de fils C++ (libuv), pot atendre desenes de milers de connexions simultànies sense consumir enormes quantitats de memòria. Això el converteix en la plataforma ideal per a API d'alt trànsit, sistemes de temps real i microserveis al núvol. A Q2BSTUDIO, combinem Node.js amb agents d'IA per crear assistents intel·ligents i xatbots que responen en mil·lisegons.

També apliquem aquests principis en l'àmbit de la ciberseguretat: en entendre com fluïx l'execució asíncrona, podem identificar vulnerabilitats com fuites d'informació a través de temporitzadors o promeses mal gestionades. Un event loop ben dissenyat és clau per evitar atacs de temporització i garantir que les tasques crítiques s'executin en l'ordre esperat.

En resum, dominar l'Event Loop de JavaScript és fonamental per a qualsevol desenvolupador que vulgui construir programari modern, ràpid i fiable. Ja sigui que treballis al frontend o al backend, aquest coneixement et permetrà prendre decisions encertades sobre concurrència, rendiment i escalabilitat. A Q2BSTUDIO, integrem aquestes pràctiques a cada projecte de desenvolupament d'aplicacions a mida, assegurant que els nostres clients obtinguin solucions robustes preparades per al futur.

UNA PAUSA?

Juga una estona abans de marxar

ELS NOSTRES SERVEIS

Com et podem ajudar

Tens un projecte en ment?

Explica'ns la teva visió i la convertim en una solució de programari. Sigui quin sigui l'abast, fem realitat la teva idea.