
Node.js: pros, contras y algunas notas

Node es un intérprete Javascript cuya meta es permitir a un programador construir aplicaciones altamente escalables y escribir código que manejen montones conexiones simultáneas en una única máquina física.
PROS:
- El lenguaje de programación es Javascript, con lo que se utilizaría el mismo lenguaje en el servidor que en el cliente, lo que permite la especialización en un tipo de tecnología determinado.
- Es un tipo de servidor más veloz que otros, como por ejemplo apache utilizando mod_php (intérprete de PHP por defecto).
- Es una tecnología reciente, por lo que la especialización en un campo como este, sería una apuesta por una tecnología joven que ya ha captado la atención de una gran parte de desarrolladores.
- Existe una gran comunidad por detrás.
- Habría la posibilidad de hacer extensiones escritas en C/C++ para optimizar ciertas acciones que consuman muchos recursos.
- Es la implementación más cercana al planteamiento de los WebSockets
- Es utilizado en páginas web como http://www.craigslist.org/about/sites (una de las más importantes de EEUU), gmail o LinkedIn
- Cuando se hacen peticiones de muchos recursos a la misma vez, la filosofía de no bloquear hilos de node, permite atender a todas las peticiones de una forma más óptima.
- Si se cae otro tipo de servidor (apache, Tomcat, nginx, etc), o se pone en mantenimiento, sería completamente independiente a este servidor.
- Fácilmente escalable: http://stackoverflow.com/questions/4710420/scaling-node-js#answer-4710617
- Salvo casos excepcionales, no lanza errores, sino que excepciones, con lo que es dificil que caiga el servidor.
CONTRAS:
- Es una tecnología muy joven.
- Si no se cuida el código, puede ser muy complicado de depurar a posteriori (acordémonos que es Javascript, y el tratamiento de eventos difiere un poco con respecto a la filosofía de otros lenguajes de programación).
- Los puertos necesarios para el funcionamiento del servidor, pueden ser un handicap a la hora de decantarse por esta tecnología.
- Muchas de las partes de la API, no tienen el estado "locked" que implica que no va a haber cambios en una determinada funcionalidad (parámetros, datos devueltos, etc).
- El envío de imágenes o archivos CSS muy pesados va a funcionar igual o un poco peor que otros servidores del mercado.
- Si la aplicación está detrás de un proxy, puede complicar el desarrollo.
- Si se cae en un nodo el manejador de eventos, implica que el servidor no podrá aceptar ni enviar peticiones.
NOTAS:
- Véase la utilización en el mercado de Ruby para aplicaciones web (más específicamente utilizando el framework "on rails").
- Acordémonos de lo extendido que estaba anteriormente un lenguaje también conocido por lo complicado de leer como era Perl.
- El desarrollo en un lenguaje como es Java, implica normalmente un mayor tiempo.
- La utilización de un lenguaje como PHP, hace caer el rendimiento cuando muchos usuarios consultan muchos archivos, y eso posiblemente nos obligaría a escalar la aplicación en una etapa muy temprana del producto.
- Véase el análisis de esta tecnología por parte de LinkedIn: http://blog.appfog.com/linkedin-brings-some-sanity-to-the-node-js-debate/
- Véase una comparativa entre varios servidores y lenguajes: http://www.techempower.com/benchmarks/#section=data-r6&hw=i7&test=json&l=134&p=2o&w=7&f=zik0z3-zi4ukb-34f
- Mejoras en Javascript con ECMASCRIPT 6: http://www.nczonline.net/blog/2012/07/24/thoughts-on-ecmascript-6-and-new-syntax/
- Proyectos que utilizan node: https://github.com/joyent/node/wiki/Projects,-Applications,-and-Companies-Using-Node
- Cabe destacar el proyecto BrowserQuest (https://github.com/mozilla/BrowserQuest/tree/master/server) desarrollado por parte de Mozilla, para demostrar el potencial de HTML5.