Qué pasa si usamos PHP cómo se usa Javascript en Node.js?

En los foros o comunidades dónde se habla sobre programación, es muy habitual ver cómo la gente pregunta y debate sobre los lenguajes de programación y cómo realiza comparativas entre ellos.

Un clásico de los últimos años es precisamente la comparativa entre Node.js y PHP. Basta con hacer una búsqueda rápida en Google para dar con infinitas comparativas.

Sin embargo, desde mi punto de vista, estamos ante una comparativa incorrecta: Node.js es un entorno de programación mientras que PHP es un lenguaje de programación. Se están comparando peras con manzanas.
O bien comparamos entornos (FPM vs Node.js) o bien comparamos lenguajes (PHP vs JavaScript).

De hecho, esta comparativa me parece errónea precisamente porqué las características a comparar son diferentes, pues si comparamos lenguajes hablaremos de aspectos cómo los sistemas de tipos (dinámicos o estáticos, fuertes o débiles…) o los paradigmas de programación (orientación a objetos, funcional…) mientras que si comparamos entornos no tendrá sentido hablar de este tipo de aspectos.

LA COMPARATIVA

Antes de ver con más detalle porqué creo que éste tipo de comparativas son erróneas, veamos lo que podría ser perfectamente un ejemplo real de comparativa entre PHP y Node.js.

Node.js:

  • Event loop para crear aplicaciones non-blocking I/O capaces de servir múltiples eventos de forma concurrente.
  • Modelo de proceso asíncrono que permite crear soluciones altamente escalables del lado del servidor, maximizado el uso de una sola CPU y memoria mientras se atienden más solicitudes de forma concurrente.

PHP:

  • Sigue el modelo clásico de cliente-servidor donde cada solicitud de página inicia la aplicación, la conexión de la base de datos, los parámetros de configuración y la representación HTML.

Lo cuál, en cierto modo es verdad, pero no porqué esas características estén ligadas a PHP, sino porqué esas características están ligadas a los entornos sobre los que se suele usar PHP, por ejemplo PHP-FPM.

LA REALIDAD…

desde mi punto de vista, es que el enfoque de Node.js es perfectamente válido y estoy seguro que a día de hoy puede dar mucho más de si que el enfoque tradicional de PHP. Y el motivo que explica esto es probablemente la diferencia de edad entre ambos entornos, pues Node.js es, en comparación con PHP, mucho más joven (2009).

Pero ojo, porqué esto no significa que los entornos de PHP no puedan adaptarse a los nuevos paradigmas. De hecho, la realidad es que cada vez más se está empezando a oír a hablar sobre entornos de PHP que ofrecen unas características y un rendimiento similares a Node.js. 

Algunos ejemplos podrían ser:

El último además escrito en C, para los más puristas y para los que tengan mayores necesidades de rendimiento.

LA COMPARATIVA ‘MÁS CORRECTA’

Entonces, que sucede si intentamos comparar una aplicación escrita en PHP sobre el framework Laravel con una aplicación escrita en JS sobre Express?

Seguramente nos daremos cuenta de que el enfoque de la comparativa anterior era incorrecto dado que la mayoría de características que antes atribuíamos a PHP cómo lenguaje, ahora dejan de ser ciertas.

Sin embargo, no habremos cambiado el lenguaje (ni la versión del mismo). Y lo más probable es que apenas hayamos tenido que tocar ni una línea del código fuente de nuestra aplicación. Cómo solo tendremos que cambiar el entorno, lo que en muchas ocasiones se limitará a cambiar alguna configuración y instalar alguna dependencia, podremos afirmar que las mejoras que estos nuevos entornos nos aportan “nos vienen gratis”.

Y AHORA QUÉ?

Pues cómo siempre que sale algo nuevo, ahora es momento analizar, probar y comparar para ser capaces de tomar decisiones racionales.

En esta ocasión lo he enfocado desde el punto de vista de lo que, a mi modo de ver, es una mala práctica en la realización de comparativas, sin embargo, lo que realmente es importante resaltar es el cambio de paradigmas que se está observando reciente en el mundo PHP y lo seguro que estoy de que estos darán mucho de que hablar.

Ahora esas tareas de investigación ya recaen sobre vosotros, pero por favor, intentad pensar en lo planteado antes de realizar o analizar otras comparativa.

Y ahora ya en modo incendiario, quiero añadir que he visto comparativas basadas en pruebas de carga dónde afirman que Swoole es “cómo Node.js pero con un rendimiento mayor”.

Será eso cierto?