Desde hace algún tiempo atrás, estoy viendo que en muchas empresas tecnológicas se implementa la tecnología Node JS. Sinceramente considero que es una apuesta a futuro y una muy buena práctica. Pero, me llama mucho la atención cuando pregunto: ¿por qué debemos implementar Node JS?… y en la mayoría de casos las respuestas son: Paypal y Netflix hacen uso de ello, también LinkedIn y eBay entre otras. Veamos, claro queda que Node JS es una muy buena opción para algunos desarrollos y es una tecnología del momento. Con tecnología del momento quiero decir que a pesar de haber sido lanzada en el año 2009, hoy en día es una de las preferidas por los técnicos y a su vez por las empresas. Si empresas tan sonadas como Paypal, Netflix, LinkedIn, eBay, etc hacen uso de ello, ya partimos con una razón de peso. Pero antes de implementar una nueva tecnología en nuestra empresa, debemos preguntarnos dos cosas: ¿Es realmente necesario? y ¿qué ventajas vamos a obtener por ello? En la entrada de hoy y siendo esta la primera entrada creada en la nueva categoría de Node JS de mi blog, voy a intentar orientaros de cuando es realmente una ventaja hacer uso de Node JS. A su vez, crearé una serie de puntos explicativos y veremos el Node JS vs PHP. En cuanto a explicaciones sobre PHP poco entraremos en detalle ya que es un lenguaje de programación muy rodado y casi todos sabemos más o menos acerca de él.
Índice
Node JS, qué es
Node.js es un entorno de tiempo de ejecución. Exactamente es código abierto de JavaScript para la creación de aplicaciones de red. Permite a los desarrolladores ejecutar el código en el lado del servidor. Por lo tanto, Node.js es una forma ligera, escalable y rápida de escribir scripts. Node.js está principalmente en uso para crear aplicaciones web en tiempo real. Sin embargo, el desarrollo de aplicaciones móviles también es posible, gracias a todo el ecosistema de Node.js. Y su gestor de paquetes – NPM, en particular.
Node JS, qué no es
A pesar de que Node es un programa de servidor, cabe destacar que no tiene nada que ver con Apache o Tomcat. Estos mismos, son instalados en servidores para implementar aplicaciones instantáneamente. Y en realidad, podemos tener listo y operativo un servidor web en pocos minutos para poder hacer uso de él. Apache puede agregar un módulo PHP para permitir a los desarrolladores crear páginas Web dinámicas, y un módulo SSL para conexiones seguras. Node JS también dispone del mismo concepto de módulos que se pueden agregar a su núcleo, pero… Node definitivamente no es Apache. Quiero decir de una forma atrevida, que un gran número de personas están confundidas o tienen falta de información acerca de lo que es y no es Node JS. Ellas están, y es comprensible, pensando en modo Apache (un servidor es una aplicación en la que usted descarga sus archivos HTML y todo funciona) y realmente esto no es así. Sigamos concretando más acerca de Node JS.
¿Cuándo debemos aplicar Node JS?
El principal objetivo de este entorno de trabajo, es poder desarrollar programas de red escalables y por supuesto peticiones multi-hilo. Tengamos en cuenta que con lenguajes como PHP, cada conexión genera un nuevo hilo que potencialmente viene acompañado de 2 MB de memoria. En un sistema que tiene 4 GB de RAM, esto da un número máximo teórico de conexiones concurrentes de cerca de 2.000 usuarios. Llegado el caso en que nuestra aplicación obtuviera un mayor número de conexiones simultáneas, el servidor se colapsaría y mostraría un error 500. En este momento la única solución a la que se podría optar para poder manejar un número mayor de conexiones, sería ampliar RAM y por lo tanto, un coste mayor económicamente hablando. Node JS resuelve este problema cambiando 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 correspondiente, cada conexión dispara una ejecución de evento dentro del proceso del motor de Node JS. Con Node JS también podemos tener en cuenta que no se quedará nunca la aplicación en punto muerto, recordemos que los bloqueos están descartados. Además, Node JS nos asegura poder realizar decenas de miles de conexiones concurrentes y esto es un dato muy a tener en cuenta. Como hemos podido ver hasta el momento, Node Js es muy bueno para sitios donde esperamos una gran cantidad de tráfico y donde la lógica del lado del servidor y el procesamiento requeridos, no sean necesariamente grandes antes de responder al cliente. Resumiendo: Node JS debe ser utilizado para crear micro-servicios y aplicaciones RESTful. Vamos a detallar algunos puntos:
API RESTful con Node JS
Pongamos el hipotético caso de proyecto donde recibimos una petición con una serie de parámetros, realizamos una consulta a la base de datos, obtenemos un resultado, y este es devuelto como respuesta JSON. Esto sería un escenario ideal donde poder sacar una ventaja increíble a Node Js. Recordemos que Node Js es capaz de tratar multitud de peticiones de forma asíncrona sin llegar a sobrecargar el servidor.
Cola de peticiones.
Pensemos en una aplicación como Whatsapp donde la cola de mensajes es infinita (somos muchos los usuarios que hacemos uso de esta aplicación). Si gestionamos los mensajes uno a uno de forma síncrona, tengamos por seguro que tendríamos un lag (retardo en la entrega) increíblemente alto. Si esto lo gestionamos con Node Js podemos procesar miles de mensajes al mismo tiempo, y es aquí donde obtenemos un gran beneficio de su uso.
Estadísticas.
Otro fuerte donde podemos explotar al máximo Node Js es a nivel estadístico, si tenemos que generar informes de forma recurrente y a tiempo real, consultando muchas tablas en base de datos, deberíamos plantearnos hacerlo con Node JS. Gracias a ello, el consumo de recursos sería infinitamente menor.
Tabla comparativa entre Node JS vs PHP.
Conociendo ahora las ventajas que nos ofrece Node JS y a su vez, por experiencia propia todo lo que ya se puede hacer con PHP, vamos a ver una tabla comparativa entre ambos.
¿Qué beneficios tenemos en PHP sobre Node JS?
Algunos desarrolladores dicen que PHP es mucho más fácil de usar que Node.js. Sus argumentos son:
- Es más fácil configurar el entorno de desarrollo para PHP.
- Node.js requiere más código.
- Para poder programar en Node.js, se debe comprender las funciones de devolución de llamada y los bloqueos.
- Todos los servicios de alojamiento de internet soportan PHP.
- Soporta más frameworks y CMS.
- Código oficial de recomendaciones de organización (PSR).
- PHP tiene una biblioteca más grande de instrucciones y preguntas frecuentes (hubo suficiente en 20 años) La comunidad de desarrolladores de PHP es un grupo masivo y diverso de personas, están constantemente revisando y actualizando bibliotecas, marcos y otros componentes de PHP.
¿Cuándo deberíamos hacer uso de PHP para nuestro proyecto?
Siempre y cuando queramos hacer uso de las tecnologías de CMS como WordPress, Drupal, Joomla, etc. ya que están creadas bajo PHP. Incluso si desarrollamos un proyecto a medida y este dispone de alguna sección que incluya por ejemplo: blog, página de administración, tienda en línea, etc. También es recomendable hacer uso de PHP si se está trabajando sobre una base de datos relacional. Resumiendo, PHP es compatible con los siguientes sistemas de administración de bases de datos:
- MySQL / MySQLi
- SQLite
- PostgreSQL
- Oracle (OCI8)
- Microsoft SQL Server
- Sybase
- ODBC
- mSQL
- IBM DB2
- Cloudspace
- Apache Derby
- Informix
- Ovrimos SQL
- Lotus Notes
- DB++
- DBM
- dBase
- DBX
- FrontBase
- filePro
- Ingres II
- SESAM
- Firebird/InterBase
- Paradox File Access
- MaxDB
- PDO
¿Cuándo deberíamos hacer uso de Node JS para nuestro proyecto?
Una de las principales ventajas de NodeJS es el soporte de sub-procesos múltiples como hemos estado comentando a lo largo del artículo de hoy. Si bien es una necesidad en los navegadores, no es tan necesario en el proceso de desarrollo web. Muchos desarrolladores eligen Node.js sobre PHP en los siguientes casos:
- Tiene soporte de servidor incorporado.
- Una sola sintaxis para el lado del cliente y del servidor del sitio web. Esto mejora la reutilización del código y facilita el trabajo de un desarrollador fullstack.
- Módulo de almacenamiento en caché: los módulos se descargan y se inicializan cuando se les llama por primera vez, luego están constantemente disponibles.
- El módulo Stream facilita el trabajo con archivos grandes.
- Node tiene una sintaxis casi idéntica a JavaScript, por lo que es fácil de aprender y aprender para los desarrolladores de JS.
Tabla comparativa de tecnologías soportadas por Node JS vs PHP.
Benchmark: control de rendimiento de Node JS 6.11.2 vs PHP 7.0.x.
A continuación voy a mostrar unos resultados de rendimiento que he obtenido de una página web donde estuve profundizando y obteniendo información al respecto. Los tests han sido realizados con una máquina con los siguientes componentes:
- VDS
- CPU – 1 core, 2GHz
- RAM – 1GB RAM
- Storage – 10GB SSD
- OS – Debian 8.6
- PHP 7.0.22 FPM
- Node.js 6.11.2
Resultados PHP (Primer test).
Resultados Node JS (Primer test).
Conclusiones del primer test.
Como puedes ver, PHP es más rápido que Node.js en:
- Concatenacion de cuerdas.
- Matriz de relleno.
- Matriz asociativa de relleno.
- Leyendo el archivo.
- Consulta de MySQL.
Node.js es más rápido que PHP solo al agregar números.
Resultados PHP (Segundo test).
Resultados Node JS (Segundo test). 
Conclusiones del segundo test.
Para este segundo test, fueron lanzadas 1000 consultas en 1000 hilos. Toda la configuración se realizó en el lado del servidor. Nginx 11.7 + PHP 7.1.1 FPM vs Node.js. Y los resultados de este segundo test vuelven a estar a favor de PHP:
- PHP + Nginx – 32 ms
- NodeJS – 200 ms
Resumen y conclusión final.
PHP ha ganado en casi todas las comparativas que se realizaron en el ejercicio anterior, a esto debemos sumarle que PHP es más popular, su aprendizaje es más sencillo y dispone de una mayor comunidad de desarrolladores dispuestos a colaborar y a aportar conocimientos. Y la mayoría de veces gratuitamente. Por otro lado, Node JS es óptimo para trabajar los servicios web multi-hilo por un consumo menor de recursos en el lado servidor. Y hasta aquí la entrada de hoy, como siempre digo: espero que te haya gustado y haya sido de utilidad.
Hola amigo! gracias por el análisis, muy bueno en general, sobre todo la teoría del principio,, pero creo que te confundiste al rematar en el último test, porque según tu foto sería al revés, PHP+Nginx – 200ms y NodeJS – 32ms. A parte, en ese test, la prueba se hace con archivos distintos, para PHP es uno de 11 bytes y para NodeJS es de 168 bytes, supongo que eso cambia tu conclusión (o las imágenes están al revés). Tal vez necesitemos más pruebas para llegar a una conclusión. Muchas gracias!
Hola John, muchas gracias por profundizar a este nivel de detalle y por dedicar unos minutos a redactar la crítica constructiva.
tal y como indico en las líneas previas al test, los resultados de rendimiento los he obtenido de una página web donde estuve profundizando, dicho esto, voy a contactar directamente con la empresa que hizo el test para salir de dudas.
Una vez más, muchas gracias por el aporte.
Efectivamente colocaste las imágenes al revés pero los resultados están bien, php 32ms y node 200ms
Gracias por lo comentado Wilmer. Las imágenes ya han sido corregidas de posición.
Un punto más para PHP, teniendo en cuenta que su equipo de desarrollo se esta actualizando constantemente, pienso que la nueva versión que llegara PHP 8 con mayor velocidad y estabilidad terminara este duelo de una vez por todas.
Hola Andrés, eres de los míos entonces.
Un saludo y gracias por postear en mi blog.
Un buen articulo, me gusto leerlo, solo para comentar que lo importante es como utilizar estas tecnologías, por que cada una tiene sus forma de implementar una solución diferente a la otra, por ejemplo el caso de SpaceX donde sus interfaces son puro html, css y javascript, claro alta calidad, en mi caso programo en varios lenguajes utilizando el patrón de microservicios donde conociendo cada una de estas tecnologías podre implementar una de otra y luego integrarlas, es cierto es más trabajo pero separamos los servicios y pasamos de una aplicación monolítica a una fraccionada, pero como siempre el mundo de la programación es diverso y es lo hace divertido.
Gracias por el articulo.
La verdad aun no me convenzo de que Node.js ofrezca algun valor agregado o que sea mejor que PHP, como podria yo convencerme de que Node.js es mejor?
gracias y te felicito por el informe.
muchas veces nos dejamos llevar por comentarios sin antes hacer este tipo de analisis.
un brazo desde Argentina.
Mi comentario va en el sentido del lenguaje en si, en cuanto a sintaxis y semántica, node.js (aka javascript, typescript), es mas complejo entender que hace un código de node a uno clásico como el de php. Recordemos que php hereda muchas de la sintaxis de c y eso es muy bueno, ya que tiene un orden muy definido, En cambio node.js se me afigura como regresar al código espagheti y esas anidaciones son un terror {{{{{{{{{{{{}}}}}}}}}}}}}
Si es verdad que empresas grandotas lo usan porque no les quedó de otra y se tuvieron que inventar algo para solucionar sus problemas del momento, pero de eso a que ahora todos como robots tengamos que hacer lo mismo no me es completamente justificable, claro que si vas a usar sus microservicios pues no hay de otra.
Como alguien diria, para resolver el problema hay muchas formas y en este mundo hay muchas como personas en el. saludos.
Muy buena información, bien detallado.