Está en la página 1de 5

Node.

Js
¿Qué es?
Node.js es una plataforma basada en el motor de JavaScript V8 de Google que es utilizado en el
navegador Chrome. Está pensada para facilitar el desarrollo de aplicaciones basadas en red, rápidas
y fiables. Node.js utiliza un modelo I/O (entrada/salida) orientado a eventos y basado en el ‘no-
bloqueo’, que lo hace ligero y eficiente, ideal para aplicaciones en tiempo real que hagan uso de
datos intensivos y que se ejecuten a través de dispositivos distribuidos.

Al contrario que la mayoría del código JavaScript, en Node.js este código no se ejecuta en un
navegador, sino en el lado del servidor. Node.js implementa algunas especificaciones de
CommonJS. También incluye un entorno REPL para depuración interactiva.

Una aplicación para Node se programa sobre un solo hilo. Si en la aplicación existe una operación
bloqueante (I/O), Node.js crea entonces otro hilo en segundo plano, pero no lo hace por cada
conexión, como haría un servidor web como por ejemplo Apache o Nginx.

¿Para que sirve?


Node.js tiene como meta permitir a un programador construir aplicaciones altamente escalables y
escribir código que maneje decenas de miles de conexiones simultáneas en una sólo una máquina
física.

Node.js cambia la forma en que se realiza una conexión con el servidor. En lugar de generar un
nuevo hilo de OS para cada conexión (y de asignarle la memoria acompañante), cada conexión
dispara una ejecución de evento dentro del proceso del motor de Node. Node también afirma que
nunca se quedará en punto muerto, porque no se permiten bloqueos y porque no se bloquea
directamente para llamados E/S. Node afirma que un servidor que lo ejecute puede soportar decenas
de miles de conexiones concurrentes.

¿Cómo funciona?
El motor V8 permite a Node proporcionar 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.

Además de la alta velocidad de ejecución de Javascript, la verdadera magia detrás de Node.js es


algo que se llama Bucle de Eventos (Event Loop).
Para escalar grandes volúmenes de clientes, todas las operaciones intensivas I/O 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). Para evitar esta ineficiencia, así como la
dificultad conocida de las aplicaciones basadas en hilos, (programming threaded applications),
Node.js mantiene un event loop que gestiona todas las operaciones asíncronas.

Cuando una aplicación Node.js necesita realizar una operación de bloqueo (operaciones I/O como
trabajo con archivos…etc.) envía una tarea asíncrona al event loop, junto con un callback, y luego
continúa.

El event loop realiza un seguimiento de la operación asincrónica, y ejecuta el callback cuando


finalice, retornando los resultados a la aplicación. Esto le permite gestionar un gran número de
operaciones, tales como conexiones de clientes o cálculos, dejando que el event loop maneje
eficientemente el grupo de subprocesos.

Por supuesto, dejando esta responsabilidad al event loop hace la vida mucho más fácil para los
desarrolladores, quienes pueden enfocarse en la funcionalidad de la aplicación.

¿Qué necesita para funcionar?


Para poder utilizar Node.js, es tan simple como descargar el binario de la web oficial e instalarlo.
Luego de esto para generar una aplicación debemos crear nuestro .js de arranque, e invocar a node
en este para que nuestro servidor entre en marcha.

Ambiente de desarrollo
En cuanto al ambiente de desarrollo, Node.js acepta cualquier tipo de archivo javascript que cumpla
con los requerimientos y convenciones pautadas para Node.js.

Ambiente de prueba
Node.js viene con un Read-Eval-Print-Loop (REPL). El REPL es un entorno de programación de
computadoras simple e interactiva. Este provee una manera de ejecutar javascript e
interactivamente ver los resultados.

Al ejecutar node.js sin ningún argumento desde la linea de commando se activara el REPL.

En el REPL, el usuario introduce una o más expresiones (en lugar de una unidad de compilación
entera) y el REPL las evalúa y mostrar los resultados.
El nombre del read–eval–print loop viene de los nombres de las funciones primitivas Lisp que
implementan esta funcionalidad:

 La función de lectura (read) acepta una expresión por parte del usuario, y lo analiza en una
estructura de datos en la memoria.

 La función de evaluar (eval) toma esta estructura de datos interna y lo evalúa. En Lisp, la
evaluación de una expresión que comienza con el nombre de una función significa llamar
esa función en los argumentos que conforman el resto de la expresión.

 La función de impresión (print loop) toma el resultado arrojado por el eval, y lo imprime
para el usuario. Si se trata de una expresión compleja, puede ser impresa en modo basico
para que sea más fácil de entender.

Depuración de errores (debug)


El REPL también puede ser usado para la depuración de errores como para crear un ambiente de
prueba a través del cual ejecutar todas las variantes posibles de la aplicación.

Mientras estás en el interior del REPL, puede escribir cualquier código JavaScript y este se
ejecutará inmediatamente. Si desea escribir una función de varias líneas o algo, puede hacerlo de la
misma manera que lo haría en un editor de texto: normalmente cuando se pulse la tecla Enter, se
ejecuta el código, pero si no ha cerrado un corchete o un paréntesis, sólo vamos a crear una nueva
línea que comienza con puntos suspensivos (...) lo que significa que usted puede seguir escribiendo.
Básicamente, sólo trate a este casi exactamente del mismo modo que lo haría con una consola en el
navegador, con 2 diferencias muy distintas:

 El medio ambiente: no están en el navegador. Usted no tiene acceso a ningún tipo de


DOM. Usted incluso no tiene la ventana global. En lugar de ello hay varias variables
globales y todas las otras variables se localizan en los archivos / módulos.

 No se construyen en los comandos para el REPL que le permiten usar más como un
símbolo del sistema estándar. Si usted escribe. Ayudar, que es uno de los comandos, verá
una lista de comandos que se puede utilizar.

Comparativa con otros Frameworks de su categoría


En el caso de otros frameworks de su categoría, Apache crea un nuevo hilo por cada conexión
cliente-servidor. Esto funciona bien para pocas conexiones, pero crear nuevos hilos es algo costoso,
así como los cambios de contexto.

Como vemos en la siguiente gráfica, a partir de 400 conexiones simultáneas, el número de segundos
para atender las peticiones crece considerablemente. Podemos decir que Apache funciona bien pero
no es el mejor servidor para lograr máxima concurrencia (tener el número mayor de conexiones
abiertas posibles).

Uno de los puntos fuertes de Node es su capacidad de mantener muchas conexiones abiertas y
esperando.

En Apache por ejemplo el parámetro MaxClients por defecto es 256. Este valor puede ser
aumentado para servir contenido estático, sin embargo si se sirven aplicaciones web dinámicas en
PHP u otro lenguaje es probable que al poner un valor alto el servidor se quede bloqueado ante
muchas conexiones -esto dependerá del trabajo que la aplicación web de al servidor y de su
capacidad hardware-.

Mediante una serie de técnicas llamadas Comet, puedes hacer una aplicación que envíe datos al
usuario en tiempo real; es decir, que el navegador mantenga la conexión siempre abierta y reciba
continuamente nuevos datos cuando los haya.

Para servidores y aplicaciones clásicas que no estén preparadas para mantener muchas conexiones,
la forma más sencilla es solicitar desde el navegador un cada X segundos nueva información
(polling). Si tenemos muchos usuarios a la vez abriendo conexiones y haciendo peticiones a la BD
nos encontramos con que nuestro servidor no da más de sí y deja de atender peticiones.

También podría gustarte