Introducció

Node.js és una plataforma de codi obert que permet executar JavaScript al servidor. La seva arquitectura única i eficient és una de les raons principals per la seva popularitat. En aquesta secció, explorarem els components clau de l'arquitectura de Node.js i com funcionen junts per proporcionar un entorn de desenvolupament ràpid i escalable.

Components Clau de l'Arquitectura de Node.js

  1. Motor V8 de Google Chrome

    • Node.js utilitza el motor V8 de Google Chrome per executar el codi JavaScript. V8 és conegut per la seva velocitat i eficiència, ja que compila el codi JavaScript directament a codi màquina natiu.
  2. Event Loop

    • L'Event Loop és el cor de Node.js. És un bucle que permet a Node.js realitzar operacions no bloquejants, gestionant múltiples operacions simultàniament sense necessitat de fils addicionals.
  3. Single-Threaded

    • Node.js és single-threaded, la qual cosa significa que utilitza un únic fil per executar el codi JavaScript. Això simplifica la programació i evita problemes de concurrència, però també significa que cal tenir cura de no bloquejar el fil principal.
  4. Callbacks i Promises

    • Node.js utilitza callbacks i promises per gestionar operacions asíncrones. Això permet que el codi continuï executant-se mentre s'esperen resultats d'operacions com la lectura de fitxers o les peticions de xarxa.
  5. Mòduls

    • Node.js té un sistema de mòduls integrat que permet dividir el codi en components reutilitzables. Els mòduls es poden importar i utilitzar fàcilment en altres parts de l'aplicació.

Funcionament de l'Event Loop

L'Event Loop és un concepte fonamental en Node.js. A continuació, es mostra una descripció detallada del seu funcionament:

  1. Timers

    • Gestiona les funcions setTimeout() i setInterval().
  2. I/O Callbacks

    • Gestiona les callbacks de les operacions d'I/O (Input/Output) que han completat.
  3. Idle, Prepare

    • Internament utilitzat per Node.js.
  4. Poll

    • Recupera nous I/O events; executa callbacks d'I/O (excepte close callbacks, timers i setImmediate()).
  5. Check

    • Executa callbacks de setImmediate().
  6. Close Callbacks

    • Gestiona les callbacks de tancament, com socket.on('close', ...).

Diagrama de l'Event Loop

+-------------------+
|      Timers       | <-- setTimeout(), setInterval()
+-------------------+
|   I/O Callbacks   | <-- I/O events
+-------------------+
| Idle, Prepare     | <-- Internal use
+-------------------+
|       Poll        | <-- Retrieve new I/O events
+-------------------+
|      Check        | <-- setImmediate()
+-------------------+
| Close Callbacks   | <-- socket.on('close', ...)
+-------------------+

Exemple Pràctic

A continuació, es mostra un exemple pràctic que il·lustra com funciona l'Event Loop en Node.js:

const fs = require('fs');

console.log('Inici del programa');

setTimeout(() => {
  console.log('Timeout de 0 ms');
}, 0);

fs.readFile('fitxer.txt', 'utf8', (err, data) => {
  if (err) throw err;
  console.log('Lectura del fitxer completada');
});

setImmediate(() => {
  console.log('setImmediate');
});

console.log('Final del programa');

Explicació del Codi

  1. Inici del programa: Es mostra immediatament.
  2. Final del programa: Es mostra immediatament després de l'inici.
  3. Timeout de 0 ms: Es mostra després de la finalització del codi sincrònic.
  4. Lectura del fitxer completada: Es mostra després que la lectura del fitxer es completi.
  5. setImmediate: Es mostra després de la finalització del codi sincrònic i abans de les operacions d'I/O.

Exercici Pràctic

Exercici

Escriu un programa en Node.js que faci el següent:

  1. Llegeixi un fitxer de text.
  2. Utilitzi setTimeout per mostrar un missatge després de 100 ms.
  3. Utilitzi setImmediate per mostrar un missatge immediatament després de la finalització del codi sincrònic.

Solució

const fs = require('fs');

console.log('Inici del programa');

setTimeout(() => {
  console.log('Timeout de 100 ms');
}, 100);

fs.readFile('fitxer.txt', 'utf8', (err, data) => {
  if (err) throw err;
  console.log('Lectura del fitxer completada');
});

setImmediate(() => {
  console.log('setImmediate');
});

console.log('Final del programa');

Resum

En aquesta secció, hem explorat l'arquitectura de Node.js, incloent-hi el motor V8, l'Event Loop, el model single-threaded, i l'ús de callbacks i promises. També hem vist com funciona l'Event Loop amb un exemple pràctic i hem proporcionat un exercici per reforçar els conceptes apresos. Amb aquesta base, estàs preparat per aprofundir en els conceptes bàsics de Node.js en el següent mòdul.

Curs de Node.js

Mòdul 1: Introducció a Node.js

Mòdul 2: Conceptes Bàsics

Mòdul 3: Sistema de Fitxers i I/O

Mòdul 4: HTTP i Servidors Web

Mòdul 5: NPM i Gestió de Paquets

Mòdul 6: Framework Express.js

Mòdul 7: Bases de Dades i ORMs

Mòdul 8: Autenticació i Autorització

Mòdul 9: Proves i Depuració

Mòdul 10: Temes Avançats

Mòdul 11: Desplegament i DevOps

Mòdul 12: Projectes del Món Real

© Copyright 2024. Tots els drets reservats