Node.js vs PHP: una batalla épica por la participación de los desarrolladores

Es una trama clásica de Hollywood: la batalla entre dos viejos amigos que se separaron. A menudo, la fricción comienza cuando un amigo despierta un interés en lo que siempre ha sido el dominio tácito del otro amigo. En la versión del lenguaje de programación de esta película, es la introducción de Node.js lo que convierte la película de amigos en una pelea de rencor: PHP y JavaScript, dos socios que una vez gobernaron Internet juntos pero ahora se disputan la participación de los desarrolladores.

En los viejos tiempos, la asociación era simple. JavaScript manejó pequeños detalles en el navegador, mientras que PHP manejó todas las tareas del lado del servidor entre el puerto 80 y MySQL. Fue una unión feliz que continúa apoyando muchas partes cruciales de Internet. Entre WordPress, Drupal y Facebook, la gente apenas puede pasar un minuto en la web sin encontrarse con PHP.

Entonces, un niño inteligente descubrió que podía ejecutar JavaScript en el servidor. De repente, no hubo necesidad de usar PHP para construir la próxima generación de pilas de servidores. Un idioma fue todo lo que se necesitó para construir Node.js y los marcos que se ejecutan en el cliente. "JavaScript en todas partes" se convirtió en el mantra para algunos.

Desde ese descubrimiento, JavaScript se ha disparado. Los desarrolladores de Node.js ahora pueden elegir entre una colección en constante expansión de excelentes marcos y andamios: React, Vue, Express, Angular, Meteor y más. La lista es larga y el mayor problema es elegir entre excelentes opciones.

Algunos ven el auge de Node.js como una prueba de que JavaScript está ganando de manera decisiva, y hay muchos datos sin procesar para reforzar esa visión. GitHub informa que JavaScript es el lenguaje más popular en su colección de repositorios, y el primo de JavaScript, TypeScript, también está creciendo rápidamente. Muchos de los proyectos más interesantes están escritos en JavaScript y muchos de los hashtags más populares se refieren a él. Mientras tanto, PHP ha caído del tercer al cuarto lugar en este ranking y probablemente ha bajado aún más en el recuento de comunicados de prensa, lanzamientos de productos y otros momentos muy comercializados.

Pero la exageración se desvanece y el software puede vivir durante décadas. La mayor parte de la base del código PHP no se va a migrar y continúa sirviendo gran parte del texto que leemos cada día. Según algunas estimaciones, el 40 por ciento de las páginas que vemos comienzan, de alguna forma, con PHP. Parte de esto se debe a que PHP sigue renaciendo. En los últimos años, las entrañas de los sistemas que ejecutan PHP se han reescrito por completo. No es el mismo código PHP que ejecutaba el sitio web de sus abuelos.

El compilador rápido y justo a tiempo de PHP ofrece respuestas más rápido que nunca gracias a las mismas técnicas inteligentes que impulsaron la revolución de Node.js. Ahora PHP 7.2 y HHVM ofrecen muchas de las mismas optimizaciones inteligentes sobre la marcha que V8 trajo a Chrome y Node.js. No solo eso, sino que HHVM tiene Hack, un dialecto PHP inteligente que ofrece soporte completo para funciones de programación sofisticadas como lambdas, genéricos y colecciones. Entonces, si necesita estas funciones, no necesita buscar una pila con más funciones.

Por supuesto, el final aún no está escrito. Por cada programador que se jacta de la pureza y juventud de Node.js y la simplicidad de JavaScript en todas partes, hay otro que está contento con la base de código profundo y la estabilidad de PHP entendida desde hace mucho tiempo. ¿El viejo imbécil derrotará al advenedizo del lado del servidor? ¿JavaScript derribará a su viejo amigo para lograr la dominación mundial? Pon otro lote de palomitas de maíz en el microondas y siéntate.

Donde gana PHP: mezcla de código con contenido

Está escribiendo, vertiendo pensamientos en el texto de su sitio web y desea agregar una rama al proceso, una pequeña declaración si-entonces para que se vea bonito, digamos, dependiendo de algún parámetro en la URL. O tal vez desee mezclar texto o datos de una base de datos. Con PHP, abre las etiquetas mágicas de PHP y comienza a escribir código en segundos. No se necesitan plantillas, ¡todo es una plantilla! No se necesitan archivos adicionales ni arquitecturas elaboradas, solo poder logístico programable al alcance de su mano.

Donde gana Node: separando preocupaciones

Mezclar código con contenido es una muleta que puede terminar paralizándote. Claro, es divertido mezclar código con HTML las primeras dos o tres veces que lo haces. Pero pronto su base de código se convierte en un enredo de lógica. Los programadores reales agregan estructura y separan la capa cosmética de la capa lógica. Es más fácil de entender para los nuevos programadores y de mantenerlo. Los marcos que se ejecutan en Node.js son creados por programadores que saben que la vida es mejor cuando el modelo, la vista y el controlador están separados.

Donde gana PHP: base de código profundo

La web está llena de código PHP. Las plataformas más populares para construir sitios web (WordPress, Drupal, Joomla) están escritas en PHP. No solo las plataformas son de código abierto, sino también la mayoría de sus complementos. Hay código PHP en todas partes y está esperando que lo descargue, modifique y use para sus necesidades.

Donde gana Node: características más modernas

Claro, hay miles de excelentes archivos PHP de código abierto, pero algunos son complementos de WordPress de 12 años que esperan y rezan para que alguien los descargue. Para cada versión moderna de Symfony, hay una biblioteca polvorienta y olvidada que nadie actualiza.

¿Quién quiere pasar horas, días o semanas jugando con un código que no se ha actualizado en años? Los complementos de Node.js no solo son más nuevos, sino que se crearon con pleno conocimiento de los últimos enfoques arquitectónicos. Fueron creados por programadores que entienden que las aplicaciones web modernas deben llevar la mayor parte de la inteligencia al cliente.

Y aunque JavaScript tiene muchas pequeñas idiosincrasias que vuelven locos a algunos, en su mayor parte es un lenguaje moderno que tiene una sintaxis moderna y algunas características útiles como cierres. Puede reconfigurarlo y extenderlo fácilmente, haciendo posible bibliotecas poderosas como jQuery. Puede pasar funciones como objetos. ¿Por qué limitarse?

Donde gana PHP: Simplicidad (más o menos)

PHP no es mucho: algunas variables y funciones básicas para hacer malabares con cadenas y números. Es una capa delgada que no hace mucho más que mover los datos del puerto 80 a la base de datos y viceversa. Eso es lo que se supone que debe hacer. Una base de datos moderna es una herramienta mágica y tiene sentido dejarle el trabajo pesado. PHP es la cantidad adecuada de complejidad para un trabajo que no se supone que sea complejo.

Por otra parte, si eres un programador que quiere hacer más que interactuar con una base de datos y formatear los resultados, ahora puedes hacer más con PHP sin taparte la nariz. El HHVM de Facebook agrega soporte para Hack, un lenguaje completo lleno de características modernas como anotaciones de tipo, genéricos y expresiones lambda. El uso de esto limita su código a ejecutarse solo en el HHVM, pero eso no es lo peor del mundo. Es muy rápido.

Donde gana Node: Docenas de opciones de idioma

Si los usuarios de PHP están contentos de tener acceso a Hack, deberían considerar mudarse al mundo de Node.js porque muchos lenguajes importantes se pueden compilar de forma cruzada para ejecutarse en JavaScript. Hay opciones muy conocidas como Java, C # o Lisp y docenas de otras como Scala, OCaml y Haskell. Incluso hay regalos para los amantes nostálgicos de BASIC o Pascal. Esta lista de lenguajes que se compilan en JavaScript de Jeremy Ashkenas es bastante completa. Además, los primos de JavaScript como TypeScript y CoffeeScript ofrecen enfoques ligeramente diferentes y mejorados para el mismo juego.

Donde gana PHP: no se necesita una aplicación cliente

Toda la charla sobre el uso del mismo idioma en el navegador y en el servidor es agradable, pero ¿qué pasa si no necesita usar ningún idioma en el navegador? ¿Qué pasa si envía los datos en formato HTML? ¿Qué sucede si está creando un sitio web espartano y estático para ofrecer estrictamente lo que se necesita sin el brillo interactivo? El navegador lo abre y no hay dolores de cabeza o fallas causadas por fallas en los hilos de JavaScript que intentan crear una página en el navegador a partir de dos docenas de llamadas a servicios web. El HTML puro funciona con más frecuencia que cualquier otra cosa, y PHP está optimizado para crearlo. ¿Por qué molestarse con JavaScript en el navegador? Construya todo en el servidor y evite sobrecargar ese pequeño navegador en el pequeño teléfono.

Donde gana Node: las llamadas de servicio son más delgadas que las llamadas PHP con contenido HTML

Si bien las aplicaciones web HTML5 locas por AJAX pueden tener demasiadas partes móviles, son geniales y muy eficientes. Una vez que el código JavaScript está en la caché del navegador, lo único que se mueve a lo largo de los cables son los nuevos datos. No hay mucho marcado HTML y no hay viajes repetidos para descargar la página completa. Solo los datos han cambiado. Si está dispuesto a dedicar tiempo a crear una aplicación web elegante para el navegador, hay una gran recompensa. Node.js está optimizado para entregar los datos y solo los datos a través de servicios web. Si su aplicación es compleja y rica en datos, es una buena base para una entrega eficiente.

Donde gana PHP: SQL

PHP fue construido para coexistir con MySQL y sus muchas variantes, como MariaDB. Si MySQL no es exactamente correcto, existen otras excelentes bases de datos SQL de Oracle y Microsoft. Su código puede cambiar con algunos cambios en sus consultas. El vasto mundo de SQL no termina en sus fronteras. Algunos de los códigos más estables y mejor desarrollados interactuarán con una base de datos SQL, lo que significa que toda esa potencia también se puede integrar fácilmente en un proyecto PHP. Puede que no sea una familia perfecta y feliz, pero es grande. No solo eso, sino que el mundo de las bases de datos está mejorando lentamente a medida que los desarrolladores encuentran formas de agregar más inteligencia a la base de datos para que no tenga que trabajar tanto.

Donde gana Node.js: JSON

Si debe tener acceso a SQL, Node.js tiene bibliotecas para hacerlo. Pero Node.js también habla JSON, la lengua franca para interactuar con muchas de las últimas bases de datos NoSQL. Eso no quiere decir que no pueda obtener bibliotecas JSON para su pila de PHP, pero hay algo fluido en la simplicidad de trabajar con JSON cuando se usa JavaScript. Es una sintaxis desde el navegador hasta el servidor web y la base de datos. Los dos puntos y las llaves funcionan de la misma manera en todas partes. Solo eso te salvará de horas de frustración.

Donde gana PHP: velocidad de codificación

Para la mayoría de los desarrolladores, escribir PHP para aplicaciones web se siente más rápido: sin compiladores, sin implementación, sin archivos JAR o preprocesadores, simplemente su editor favorito y algunos archivos PHP en un directorio. Su kilometraje variará, pero cuando se trata de armar un proyecto rápidamente, PHP es una buena herramienta para usar.

Donde gana Node.js: velocidad de la aplicación

Escribir código JavaScript es un poco más difícil cuando se cuentan llaves y paréntesis, pero cuando está listo, su código Node.js puede volar. El mecanismo de devolución de llamada es brillante porque le evita tener que hacer malabares con los hilos. El núcleo está bien construido y diseñado para hacer todo eso por ti. ¿No es eso lo que todos quieren?

Donde gana PHP: competencia

La batalla por los corazones y las mentes de los desarrolladores de PHP aún se está desarrollando. El equipo de HHVM y el equipo de Zend están trabajando arduamente para entregar un código rápido para todos. Están apareciendo puntos de referencia independientes y todo el mundo está llevando las bases del código al límite. Esto solo significa un mejor rendimiento.

Donde gana Node.js: Solidaridad

¿Realmente quieres dos bases de código diferentes? Claro, la competencia ayuda, pero pronto sigue la fragmentación. ¿Qué sucede cuando su código se ejecuta solo en uno de los dos? La competencia no sirve de nada si tienes que pasar semanas o meses reescribiendo tu código. Si bien Node.js experimentó su propia fragmentación hace unos años, con el lanzamiento de io.js, el universo Node.js se ha reunido desde entonces, dándole el tipo de solidaridad de lenguaje que los desarrolladores de PHP pronto pueden desear.

Donde gana PHP: aplicaciones básicas

En los últimos años, algunos desarrolladores han puesto en marcha aplicaciones web y se han sentido frustrados por el comportamiento lento. El JavaScript que impulsa todas esas piezas móviles puede tener decenas de miles de bytes, a veces cientos de miles. Cuando llegan todos los paquetes, deben analizarse, compilarse y finalmente ejecutarse, todo para entregar algunos bytes como la temperatura y el pronóstico.

La reacción violenta contra esta locura rococó se puede encontrar en los equipos que construyen generadores de sitios estáticos (463 en este momento) y páginas web reducidas en formato AMP. PHP es una elección natural para cualquier equipo que quiera concentrar la inteligencia en el servidor para que el cliente no se sobrecargue.

Donde gana Node.js: riqueza

Ludwig Mies van der Rohe, el arquitecto de edificios, dijo una vez: "Menos es más". Robert Venturi, otro arquitecto, se acercó y replicó: "Menos es un aburrimiento". Los teléfonos inteligentes tienen más potencia que una habitación llena de computadoras Cray. Las computadoras de escritorio tienen tarjetas de video con múltiples ventiladores para mantenerlas frescas durante todo el procesamiento. ¿Por qué deberíamos eliminar nuestro código y vivir como una víctima de la era de la Depresión en una novela de Steinbeck? Vive el momento. Los sitios web grandes y elegantes llenos de código JavaScript son llamativos, dramáticos y, sobre todo, divertidos. Seguro que es un poco obsceno desperdiciar tanto ancho de banda en unos pocos bits de datos, pero el ancho de banda nunca ha sido más barato. ¡Vive un poco!

Donde ambos ganan: sin cabeza

La palabra "sin cabeza" se refiere al código PHP que se ejecuta en el servidor. Recientemente, algunas de las principales aplicaciones PHP como Drupal han mirado al otro lado del pasillo y han quedado asombrados por las sofisticadas interfaces de usuario creadas por los marcos de JavaScript como React, Angular o Vue. En lugar de intentar competir con ellos, ceden el control del cliente y se concentran en hacer un buen trabajo con el back-end del servidor.

Si ha invertido bastante en el código PHP que se ejecuta en el servidor, esta puede ser una forma de disfrutar de lo mejor de ambos enfoques. El antiguo código PHP establecido actúa como una puerta de entrada a la base de datos, verificando dos veces las solicitudes, limpiando los datos y, en general, proporcionando toda la lógica empresarial. El lado del cliente es una aplicación web progresiva escrita con el último marco de JavaScript. Cuando necesita información, envía una solicitud AJAX al código PHP.

Es posible que esto no tenga sentido para alguien que comienza de cero, pero si ha confiado en PHP durante años y desea avanzar gradualmente, este puede ser un feliz compromiso.

Donde ambos ganan: microservicios y sin servidor

Los crecientes paradigmas de microservicios o sin servidor ofrecen una forma de que el código JavaScript y PHP cohabite en el servidor y se lleve bien. Ambas soluciones dividen el trabajo en docenas de servicios o funciones más pequeños y estos pueden ejecutarse de forma independiente y permanecer en sus carriles. Algunas partes, generalmente las secciones más antiguas y estables de la aplicación, pueden ejecutar PHP. Las otras partes, a menudo las más nuevas, se escribirán en Node.js. El idioma de POSTo GETpuede ser la lengua franca que los une a todos.