Agenda
- ¿Qué es NodeJS y para que sirve?
- Escalabilidad en NodeJS
- Operaciones asíncronicas
- La importancia de los eventos en NodeJS
- JavaScript como la base de su semántica
- Gestor de bibliotecas Node Package Manager
- Ventajas de NodeJS
- Desventajas de NodeJS
- Aplicación conversor de monedas.
- Bibliografía
¿Qué es NodeJS y para que sirve?
JavaScript es un sólo un lenguaje de programación del lado del cliente que se ejecuta en el navegador,Ahora ya no. Node.js es una forma de ejecutar JavaScript en el servidor, además de mucho más. Node.js es un entorno Javascript del lado del servidor, basado en eventos. Node ejecuta javascript utilizando el motor V8, desarrollado por Google para uso de su navegador Chrome. Aprovechando el motor V8 permite a Node proporciona un entorno de ejecución del lado del servidor que compila y ejecuta javascript a velocidades increíbles. El aumento de velocidad es importante debido a que V8 compila Javascript en código de máquina nativo, en lugar de interpretarlo o ejecutarlo como bytecode. Node es de código abierto, y se ejecuta en Mac OS X, Windows y Linux.
Node.js es una biblioteca y entorno de ejecución de E/S dirigida por eventos y por lo tanto asíncrona que se ejecuta sobre el intérprete de JavaScript creado por Google V8.
Lo cierto es que está muy de moda aunque no es algo nuevo ya que existen bibliotecas como Twisted que hacen exactamente lo mismo pero si es cierto que es la primera basada en JavaScript y que posee un gran rendimiento.
En resumen NodeJs es un entorno en tiempo de ejecución multiplataforma, de código abierto, para la capa del servidor basado en el lenguaje de programación ECMAScript, asíncrono, con I/O (entrada/salida) de datos en una arquitectura orientada a eventos y basado en el motor V8 de Google.
En resumen NodeJS nos sirve para para generar páginas dinámicas, crear, abrir, leer, escribir, borrar y cerrar archivos del servidor, recolectar datos de un formulario y operaciones transaccionales de base de datos. El mismo esta orientado a eventos, es decir, solicitudes que deben ser atendidas cuando alguien trata de accesar el puerto del servidor, esto implica que el servidor deba inicializarse antes de iniciar para que pueda procesarlas.
En resumen NodeJS nos sirve para para generar páginas dinámicas, crear, abrir, leer, escribir, borrar y cerrar archivos del servidor, recolectar datos de un formulario y operaciones transaccionales de base de datos. El mismo esta orientado a eventos, es decir, solicitudes que deben ser atendidas cuando alguien trata de accesar el puerto del servidor, esto implica que el servidor deba inicializarse antes de iniciar para que pueda procesarlas.
Escalabilidad en NodeJS
Node.js fue formulado para generar una sistema escalable y que tuviese la consistencia suficiente como para poder generar un elevado número de conexiones de forma simultánea con el servidor. Generalmente cuando se crea un gran número de conexiones el rendimiento y la velocidad de las aplicaciones y páginas web se ven perjudicados. Esto se debe a que la gran mayoría de tecnologías que trabajan desde el lado del servidor accionan las peticiones de forma aislada y mediante hilos independientes. Por eso, cuando la cantidad de solicitudes que se hacen van en incremento, los recursos y el consumo de los mismos también se incrementan.
A este tipo de limitaciones que se generan en el propio servidor también es necesario sumar todas aquellas que posee el cliente (desde la velocidad de su conexión a internet o la memoria RAM de su dispositivo por ejemplo). La cantidad de solicitudes así como los procesos entrantes y salientes se convierten en uno de los factores limitantes y Node.js ha sido concebido para optimizar este handicap.
Operaciones asíncronicas
Un servidor se encarga de ejecutar diferentes tareas para facilitar la comunicación con los diferentes clientes. Estas tareas se aglutinan bajo las siglas I/O que hacen referencia a aquellas que están destinadas a la entrada (input) y a la salida (output) de información. En los lenguajes clásicos de programación como Java este tipo de tareas se desarrollaban de una forma sincrónica. ¿Qué quiere decir esto? Que todas se ejecutaban de una forma lineal por lo que hasta que no se llevaba a cabo un proceso no se podía ejecutar el siguiente. Esto trae bastantes inconvenientes como por ejemplo el alargamiento innecesario de los procesos de trabajo y la tendencia a que se produzcan bloqueos. Sin embargo NodeJS emplea un I/O de tipo asíncrono. Esto significa que todas las tareas que se desarrollan por el servidor se hacen de forma paralela por lo que pueden efectuarse de forma simultánea y sin que se produzca ningún tipo de bloqueo en el flujo de trabajo.
El resultado es una ventaja competitiva considerable que proporciona a la arquitectura de las aplicaciones web una mayor potencia y velocidad de procesamiento.
Además de la alta velocidad de ejecución de JavaScript , el verdadero potencial de Node.js es algo que se llama Bucle de Eventos(Even Loop).
Al estar basado en un bucle, nuestra principal tarea como desarrolladores de Node.js es mantener ese bucle funcionando y sin procesos que lo ralenticen o que lo bloqueen.
Para escalar grandes vólumenes de clientes, todas las operaciones intensivas en Node.js se llevan a cabo de forma asíncrona. El enfoque tradicional para generar código asíncrono es engorroso y crea un espacio en memoria no trivial para un gran número de clientes(cada cliente genera un hilo, y el uso de memoria de cada uno se suma.)
La importancia de los eventos en NodeJS
Su arquitectura se basa en eventos y gracias a ella es posible generar un tipo de procesamiento asíncrono de operaciones de entrada y salida. Está basada en un único hilo de procesos capaz de contener todos los eventos que se producen. A medida que se van produciendo eventos su sistema es capaz de trabajar con ellos a diferentes niveles mediante su función callback.
Los diferentes procesos no se desarrollarán en un mismo nivel. De este modo, aunque todos los eventos formen parte de un mismo hilo de procesos, se trabajará con ellos mediante funciones paralelas dentro del mismo bucle. Cuando una tarea en segundo plano se ejecuta la función “callback” resuelve la entrega del resultado y puede ser entregado al cliente en un tiempo muy reducido.
JavaScript como base de su semántica
Para generar una conexión entre dos o más dispositivos lo más normal es que exista un elemento llamado servidor cuya función es mediar entre los diferentes usuarios que inician la conexión. Estos usuarios o clientes establecen una comunicación directa con el servidor y reciben una información que puede ser de cualquier tipo: Desde una página web a cualquier tipo de notificación o mensaje emitido por cualquier otro cliente.
Para gestionar y construir este tipo de conexiones existen diferentes tipos de lenguajes. Algunos de ellos se ejecutan directamente en el servidor (php es un ejemplo), mientras que otros se ejecutan del lado del cliente (por ejemplo JavaScript).
Gestor de bibliotecas Node Package Manager
Uno de los puntos fuertes de nodeJS es su Node Package Manager (uno de los paquetes NPM). Una especie de gestor que da acceso a un conjunto de librerías muy extenso que además son gratuitas y generadas a partir de la colaboración de los usuarios de su comunidad. Algunos de los paquetes más conocidos que podrás encontrar en su plataforma son React, Gulp, Browserify, Grunt-cli, Bower, Grunt, Express, Cordova o Forever.
NPM sebe instalarse en el computador (ya sea cuando se instala Node.js o por aparte)
NPM crea un folder llamado "node_modules", donde se alojan los paquetes descargados.
C:\Users\MyName\node_modules\upper-case
Se recomienda tener conocimiento previo en AJAX además de las otras tecnologías anteriormente mencionadas en el presente blog.
NPM sebe instalarse en el computador (ya sea cuando se instala Node.js o por aparte)
C:\Users\MyName\node_modules\upper-case
Resultado:
Se recomienda tener conocimiento previo en AJAX además de las otras tecnologías anteriormente mencionadas en el presente blog.
Para obtener más información al respecto consultar: npmjs
Ampliando un poco más sobre los módulos en Node js, estos son como bibliotecas en Javascript, se incluyen a través de la instrucción : require('nombreModulo').
Ejm: var http = require('http');
Se pueden crear módulos propios usando exports para que las funciones puedan usarse fuera del mismo.
Ejm: myFirtsModule.js
exports.myDateTime = function ()
{
return Date();
};
Ejm: var http = require('http');
Se pueden crear módulos propios usando exports para que las funciones puedan usarse fuera del mismo.
Ejm: myFirtsModule.js
exports.myDateTime = function ()
{
return Date();
};
Sobre el módulo URL
Permite dividir la línea de URL en partes legibles y manejables. Método parse retorna un objeto tipo URL con cada una de sus secciones como propiedades.
Método query que retorna los parámetros como un objeto con propiedades atributo-valor.
Ventajas de NodeJS
- Se puede utilizar en la gran mayoría de servidores.
- Linkedin y Paypal fueron desarrolladas a partir de NodeJS, las cuales son fieles indicadores de la calidad y la potencialidad.
- Garantiza un elevado rendimiento. No sólo puede arquitecturas sólidas y potentes sino que además reduce de una forma muy drástica el ratio de errores.
- Al estar inspirado en JavaScript cuenta con una semántica muy fácil de digerir, aprender y aplicar por cualquier programador.
- Capacidad de soportar miles de solicitudes a un único servidor de forma simultanea.
- Capacidad de gestionar grandes cantidades de información. Ejemplo Facebook.
- Comunidad bastante amplia que permite establecer lazos de colaboración.
Desventajas de NodeJS
- Dificultad de implementar en alojamientos existentes.
- Relativamente inestable, ya que usualmente en cada actualización se require de cambios en el código fuente para que se mantenga funcionando correctamente.
- Falta de una biblioteca estándar
- Falta de bibliotecas en general debido a su poca madurez.
Para profundizar más desde una perspectiva práctica consultar el siguiente video que muestra un curso introductorio de NodeJS para principiantes: Curso NodeJs
El siguiente ejemplo implementa una página que realiza una conversión de monedas, ingresando una modena de origen y luego la cantidad a convertir. En la misma esta realizada mediante el uso de HTML, CSS, Javascript con JQuery.
Conversor de divisas : Enlace para consultar la página de la aplicación.
Inicio de la aplicación:
Elegir moneda origen y luego la cantidad a convertir:
Luego se tiene la opción de otras monedas, para consultar todas las moneas vigentes en la actualidad:
Finalmente si no le gusta el tema negro se puede optar en la ventana incial seleccionar la opción de "Tema blanco" e ingresando otros parametros así tenemos:
Aplicación conversor de divisas
El siguiente ejemplo implementa una página que realiza una conversión de monedas, ingresando una modena de origen y luego la cantidad a convertir. En la misma esta realizada mediante el uso de HTML, CSS, Javascript con JQuery.
Inicio de la aplicación:
Elegir moneda origen y luego la cantidad a convertir:
Luego se tiene la opción de otras monedas, para consultar todas las moneas vigentes en la actualidad:
Finalmente si no le gusta el tema negro se puede optar en la ventana incial seleccionar la opción de "Tema blanco" e ingresando otros parametros así tenemos: