Todos hemos oído hablar de Node.js como tecnología que permite trabajar con Javascript del lado del servidor. Poco a poco Node se está ganando un hueco en la comunidad. Sin embargo hay muchas dudas sobre su funcionamiento. Vamos a intentar en este artículo acercarnos un poco más a esta tecnología tan interesante.
El motor V8 de google
Node.js esta basado en el motor V8 de Javascript de Google. Este motor está diseñado para correr en un navegador y ejecutar el código de Javascript de una forma extremadamente rápida.
La tecnología que está detrás de Node.js permite ejecutar este motor en el lado del servidor abriendo un nuevo abanico de posibilidades en cuanto al mundo de desarrollo se refiere.
Para ello el entorno de Node.js ha desarrollado un conjunto amplio de librerías que no tienen nada que envidiar a otras plataformas. Por otro lado se han eliminado algunas funcionalidades que en el entorno de servidor no tenían sentido como por ejemplo el uso de Document Object Model.
Node.js y Threads
Node.js trabaja con un único hilo de ejecución que es el encargado de organizar todo el flujo de trabajo que se deba realizar.
La primera duda que nos surge es: ¿Qué sucede si ese hilo se pone a realizar una tarea que lleva X tiempo y queda bloqueado?. Esa es una buena pregunta y la respuesta es que Node.js gestiona todas sus tareas de una forma asincrona. Esto nos puede sonar mucho a AJAX. Ahora bien ¿Cómo funcionan esas peticiones asíncronas exactamente?.
Node y tareas asíncronas
Para poder trabajar de una forma óptima Node.js delega todo el trabajo en un pool de threads. Este pool de threads esta construido con la librería libuv. Esta librería dispone de su propio entorno multithread asíncrono. Node.js envía el trabajo que hay que realizar al pool.
Libuv realizará a través de alguno de sus threads el trabajo encomentado. Una vez que el trabajo haya sido completado libuv emitirá un evento que será recibido por Node.js.
Recibido el evento una función de callback se encargará de terminar de procesarlo. Por eso cuando trabajamos con Node.js practicamente toda la programación es asíncrona y se parece tanto a las clásicas llamadas AJAX que realizamos. Vamos a ver un sencillo ejemplo de código en el cual utilizamos Node.js para leer un fichero:
fs = require('fs') fs.readFile('fichero.txt', 'utf8', function (err,datos) { if (err) { return console.log(err); } console.log(datos); });
Como podemos ver incluso algo tan sencillo como leer un fichero se realiza de forma asíncrona y dispone de una función de callback ya que prácticamente todo el trabajo se delega.
En Genbeta Dev | Introducción a la programación con Node.js