Cuando se trata de construir servicios BackEnd, NodeJs es una de las mejores opciones. Este entorno de ejecución de JavaScript back-end, multiplataforma y de código abierto resulta ideal cuando se quiere dar poder a aplicaciones que se ejecutan dentro de un navegador web o de un dispositivo móvil.
Las aplicaciones construidas con Node son escalables y esto es debido a su naturaleza asincrónica. ¿Qué signifíca esto? Por ejemplo, imagina que en un restaurante, el mesonero toma tu orden y la lleva a la cocina, luego siguen a la siguiente mesa mientras el chef prepara la comida de la primera mesa, así que puede atender varias mesas mientras van preparando la comida de las demás, esto es lo que se llama asincronía.
Cuando pasamos esta metáfora al campo práctico de las aplicaciones NodeJs, el mesonero es como un hilo conectado para manejar un pedido, así que un solo hilo es utilizado para manejar varios pedidos.
Cuando el servidor recibe un pedido, el hilo se encargará de ello. Si necesita crear una base de datos, el hilo no debe esperar hasta que esta sea creada para atender otro pedido, lo hace mientras se crea la base de datos.
Cuando la base de datos ya tiene lo solicitado en el pedido, se envía un mensaje a lo que se conoce como una "cola de eventos". Node continuamente está monitoreando esta cola en segundo plano, cuando consigue un evento listo, lo saca y lo procesa.
Esta arquitectura, hace a NodeJs ideal para construir aplicaciones que incluyan acceso a discos o redes. Se pueden ejecutar más tareas y pedidos sin la necesidad de incluir hardaware extra y por eso estas aplicaciones son altamente escalables.
NodeJs no se debe utilizar para aplicaciones con un cpu intensivo, por ejemplo para codificación de video. En este tipo de aplicaciones se deben hacer muchos cálculos mediante el cpu y pocas operaciones que tocan el sistema de archivo o la red.
Ya que las aplicaciones de Node son de un único hilo, cuando hacen los cálculos para servir a un cliente, los demás tienen que esperar, y por eso no debe usarse para aplicaciones con un cpu intensivo o donde se deban realizar varios procesos de cálculo.