NodeJS fue creado en 2009 por Ryan Dahl. Antes de eso, Dahl había estado trabajando como desarrollador usando Ruby on Rails. El concepto básico de NodeJS se le ocurrió mientras usaba Flickr (una web para subir y compartir imágenes) y se dio cuenta de que había una barra de progreso que le indicaba el estado de la subida de su imagen. Parece una característica muy básica ahora, pero antes del 2010 este comportamiento de ‘servidor-informando-continuamente’ era nuevo y poco habitual. Esto era porque entonces, los servidores en realidad no tenían la capacidad necesaria para realizar multiples procesos a la vez, como por ejemplo subir un fichero y manejar otras peticiones del mismo usuario, lo que se conoce como concurrencia.
Ver esta interacción entre el navegador y el servidor llamó la atención a Dahl. Se dio cuenta de que un servidor web debe ser capaz de procesar múltiples tareas a la vez. El viejo método de ‘recibe una petición/envía una respuesta’ estaba desfasado. Para verlo más claro, lo podemos representar en una imagen:
Entra una petición (request) en este caso para subir un fichero (upload file) y mientras se procesa esa petición (línea de la derecha) se manejan otras peticiones antes de devolver finalmente una respuesta (response) a la petición principal. Este es el concepto de concurrencia en el que se basa NodeJS.
Fues construido por Dahl (entre otros) en JavaScript usando una magnífica implementación tecnológica, en la forma del motor Google V8. Este motor toma código JavaScript y lo compila en C++, que se ejecuta a gran velocidad. V8 hace esto ‘al vuelo’, y se compila rápidamente en tiempo de ejecución. Esto es, en parte, lo que consigue poner a NodeJS por encima de otros lenguajes y frameworks cuando comparamos su velocidad.
NodeJS no era entonces, y sigue sin ser, un servidor web por defecto. Cuando descargas NodeJS, sin modificar, no arranca un servidor web. Los desarrolladores deben utilizar, o bien frameworks o escribir su lógica directamente sobre NodeJS, para que llegue al servidor web.
Entonces, ¿por qué no es NodeJS un servidor web por defecto, si se inventó para eso? Porque NodeJS se inventó para resolver un problema mayor que el de multiples peticiones a una web, se construyó para resolver la idea de peticiones múltiples y el procesado de múltiples tareas a la vez. Esa es en parte la razón por la que NodeJS es muy popular, porque puede hacer mucho más que ser un servidor web.
NodeJS se usa para los ya mencionados servidores web, pero también es un sistema operativo (artículo en inglés), una herramienta de logging (para registrar, por ejemplo, peticiones http o comportamientos de usuario en aplicaciones) , una lenguaje general de scripting, y yo personalmente lo he usado para redes neuronales y aprendizaje automático (artículo en inglés). Pero como es de lejos más usado para servidores web, nos centramos sobre todo en este aspecto.
En cualquier caso, vayamos a NodeJs en 2018. Actualmente su uso más habitual es el desarrollo Backend, referido a la parte de una web que no vemos, toda la lógica que hace que una web funcione. Sin embargo, comúnmente se empareja con los frameworks frontend más importantes (la parte que sí vemos e interactuamos con ella) para hacer lo que llamamos un entorno Full-Stack. Esto incluye Angular, Vue y React, por nombrar alguno de los frameworks más populares. Profundizaremos más en el desarrollo full-stack en posteriores artículos.
NodeJS se entrega con un recurso llamado NPM vinculado a él. NPM permite al desarrollador gestionar paquetes, que son funciones JavaScript y añadirlos a cualquier proyecto NodeJS. Usar paquetes acelera el desarrollo y permite al desarrollador olvidares de ciertos desarrollos engorrosos, que permite entregas más rápidas.
En resumen, NodeJS es un framework JavaScript, construido con el motor Google V8 y creado para dar solución a la necesidad de procesar multiples peticiones a la vez. Se ha convertido en uno de los frameworks más populares para desarrollar webs gracias a ello. Finalmente, los desarrolladores pueden usar el NPM incorporado para añadir otras librerías o frameworks JavaScript, para acelerar su desarrollo. Eso es todo acerca de NodeJS por hoy, ¡espero que os haya gustado!
Puedes ver el texto original en inglés en https://medium.com/@kieranmaher13/nodejs-in-three-ish-minutes-4c4401b43b2c