La web se encuentra en una era de desarrollo que cambia rápidamente. Los desarrolladores del lado del servidor están muy confundidos al elegir un lenguaje: hay lenguajes que han dominado durante mucho tiempo, como C, Java y Perl, y también lenguajes centrados en el desarrollo web, como Ruby, Clojure y Go. Mientras tu proyecto funcione bien, tu elección no parece tan importante.

¿Pero cómo pueden estos nuevos desarrolladores web tomar una decisión correcta?
No quiero desatar una guerra entre los dos bandos de PHP y Node.js; compararé el estado de desarrollo en los ámbitos de estos dos lenguajes:
- PHP
Rasmus Lerdorf creó PHP en 1994. Es ejecutado por componentes instalados en servidores web (Apache, Nginx). El código PHP puede mezclarse con HTML. Para los principiantes, es posible escribir rápidamente código valioso sin necesidad de mucha práctica. Esto hizo que PHP se volviera cada vez más popular; ahora el 80% de los servidores del mundo ejecutan PHP. WordPress, un sistema de gestión de contenidos que usan una cuarta parte de los sitios web del mundo, está escrito en PHP. - Node.js
Ryan Dahl creó Node.js en 2009. Está basado en el motor de interpretación de JavaScript V8 de Google (que en el navegador Chrome se encarga de ejecutar el código JavaScript del cliente). A diferencia de otros lenguajes, Node.js incluye bibliotecas de funciones para manejar solicitudes y respuestas de red, por lo que no necesitas un servidor separado (Apache, Nginx) ni otras dependencias. Aunque Node.js es muy nuevo, rápidamente ganó una gran popularidad. Es utilizado en muchas grandes empresas, como Microsoft, Yahoo, LinkedIn y PayPal.
¿Qué pasa con nuestros amados C#, Java, Ruby, Python, Perl, Erlang, C++, Go, Dart, Scala, Haskell, etc.?
Si el artículo comparara los diversos parámetros de todos los lenguajes mencionados anteriormente, sería muy largo. ¿Todavía lo leerías? ¿Esperas que un programador conozca todos los lenguajes de programación? Eso es obviamente imposible. Principalmente he comparado PHP y Node.js, por las siguientes razones:
- En primer lugar, vale la pena compararlos. Ambos son de código abierto, ambos están dedicados al desarrollo web y ambos pueden usarse en proyectos similares.
- PHP ha existido durante mucho tiempo, pero Node.js apenas está emergiendo y recibe cada vez más atención. ¿Deberían los programadores de PHP creer en el bombo publicitario de Node.js? ¿Deberían considerar cambiar de lenguaje?
- Conozco y amo los lenguajes de programación. He usado PHP y JavaScript desde la década de 1990, y también tengo varios años de experiencia con Node.js. Además, he incursionado en otras tecnologías, pero aquí todavía no puedo hacer una evaluación objetiva de ellas.
Además, no importa cuántos lenguajes se comparen, porque siempre habrá alguien en algún lugar que se queje de que no mencioné su lenguaje.
La contienda en SitePoint
Los programadores dedican mucho tiempo a mejorar sus propias habilidades de programación. Algunos tienen la capacidad de extenderse entre lenguajes de programación, pero quienes alcanzan un nivel superior toman sus propias decisiones basándose en muchos factores. Desde el lado subjetivo, vas a impulsar y defender tus decisiones técnicas.
Los SitePoint Smackdowns no adoptan el punto de vista de 'elige el que mejor se adapte a ti, amigo'. Haré recomendaciones basadas en mi experiencia personal, requisitos y preferencias. Puede que no estés de acuerdo con todo lo que diga, eso no importa; lo importante es que tus opiniones ayudarán a otros a tomar decisiones más informadas.
Método de evaluación
A continuación se compararán PHP y Node.js en diez rondas. Cada ronda considerará desafíos de desarrollo comunes que pueden aplicarse a cualquier tecnología web. No entraremos demasiado en detalles; a pocos les importa el valor de los generadores de números aleatorios o la ordenación de arrays.
El que gane más rondas será el ganador. ¿Listos? ¡Que comience la contienda...!
Primera ronda: Primeros pasos
¿Qué tan rápido se puede crear una página web 'Hello World'? En PHP:
<?php
echo 'Hello World!';
?>
Este código puede colocarse en cualquier archivo que pueda ser interpretado por el motor de PHP; normalmente, en un archivo con extensión .php. Basta con introducir la URL en el navegador para acceder al archivo.
Es innegable que esto no es todo. Este código solo puede ejecutarse en un servidor web con PHP instalado (PHP tiene un servidor incorporado, pero aun así es mejor usar un servidor más robusto). La mayoría de los sistemas operativos ofrecen software de servidor, como IIS en Windows, Apache en Mac y Linux, aunque requieren iniciarse y configurarse. Normalmente se utilizan instaladores preconstruidos, como XAMPP, o imágenes de máquinas virtuales (como Vagrant). Una forma más sencilla: sube tu archivo a cualquier hosting web.
En comparación, instalar Node.js es muy fácil. Puedesdescargar el instaladorousar un gestor de paquetes. A continuación, creemos una página web en hello.js:
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World!');
}).listen(3000, '127.0.0.1');
Antes de visitar http://127.0.0.1:3000/ en el navegador, debes escribir node hello.js en la terminal para iniciar la aplicación. Con las cinco líneas de código anteriores, hemos creado un pequeño servidor web. Aunque es sorprendente, incluso a alguien con mucha experiencia en JavaScript del lado del cliente le resultaría difícil de entender.
PHP gana esta ronda porque es conceptualmente más simple. Alguien que sepa un poco de sentencias de PHP puede desarrollar algo útil. PHP tiene más dependencias de software, pero sus conceptos son menos complicados para los principiantes.
Saber algo de JavaScript y desarrollar aplicaciones Node.js son dos cosas distintas. El método de desarrollo de Node.js es diferente al de la mayoría de las tecnologías del lado del servidor; primero debes comprender algunos conceptos bastante complejos, como los cierres y las funciones de devolución de llamada.
Segunda ronda: Ayuda y soporte
Sin la ayuda de documentación y recursos oficiales (cursos, foros, Stack Overflow), sin duda tendrás dificultades. PHP gana esta ronda fácilmente; tiene una gran cantidad de guías y veinte años de Q&A. Hagas lo que hagas, siempre habrá alguien que ya haya enfrentado el mismo problema antes que tú.
Node.js tiene una buena documentación, pero es más joven y ofrece menos ayuda que PHP. JavaScript ha estado en el mercado tanto tiempo como PHP, pero la ayuda principal está orientada al desarrollo en navegadores, lo cual no es de mucha ayuda.
Tercera ronda: Sintaxis del lenguaje
¿Las declaraciones y la estructura son lógicas y fáciles de usar?
A diferencia de algunos lenguajes y frameworks, PHP no te limita a escribir de una manera específica; cómo lo hagas depende de ti. Puedes comenzar con un programa de unas pocas líneas, luego agregar algunos métodos, después escribir objetos simples al estilo PHP4 y finalmente crear elegantes aplicaciones PHP5+ orientadas a objetos con patrón MVC. Tu código puede ser un poco desordenado al principio, pero funciona, y mejorará a medida que profundices tu comprensión.
La sintaxis de PHP puede variar ligeramente entre versiones, pero la compatibilidad hacia atrás generalmente es buena. Desafortunadamente, esto también causa un problema: PHP es un desastre. Por ejemplo, ¿cómo contar el número de caracteres en una cadena? ¿count? ¿str_len? ¿strlen? ¿O mb_strlen? PHP tiene cientos de funciones y las reglas de nomenclatura no son del todo consistentes. Intenta escribir unas líneas de código sin consultar la documentación.
JavaScript es relativamente más simple; solo tiene unas pocas docenas de sentencias centrales. Sin embargo, su sintaxis es a menudo criticada por los desarrolladores, porque su modelo de objetos basado en prototipos parece accesible, pero en realidad no lo es. Además, varios errores matemáticos (0.1 + 0.2 != 0.3) y la confusión de conversión de tipos ('4' + 2 == '42' y '4' – 2 == 2) también provocan muchas quejas, aunque estos casos rara vez causan problemas. La mayoría de los lenguajes tienen esta excusa.
PHP tiene sus ventajas, pero en esta ronda declaro ganador a Node.js. Razones:
- JavaScript es el lenguaje más difícil de entender del mundo; pero, cuando algún día lo comprendas de repente y los conceptos se aclaren, descubrirás que los demás lenguajes son demasiado torpes.
- El código JavaScript es más conciso que el de PHP. Por ejemplo, ya no necesitas andar convirtiendo de un lado a otro con JSON — ni tampoco UTF-8.
- Los ingenieros full stack pueden usar JavaScript tanto en el cliente como en el servidor. El cerebro no necesita cambiar de un lado a otro.
- Entender JavaScript en profundidad te hará querer usarlo más, pero PHP no es así.
Cuarta ronda: Herramientas de desarrollo
Ambas tecnologías tienen algunos buenos editores, entornos de desarrollo integrados, depuradores, validadores y otras herramientas. Creo que es un empate, pero aquí hay algunas herramientas que le dan a Node.js una pequeña ventaja: NPM - gestor de paquetes. NPM te permite instalar y gestionar dependencias, establecer variables de configuración, definir scripts y otros.
El proyecto Composer de PHP está inspirado en NPM y en algunos aspectos es más fuerte. Sin embargo, PHP no lo proporciona por defecto, tiene una biblioteca activa más pequeña y tiene menos impacto en la comunidad.
NPM también tiene parte del mérito en el crecimiento de herramientas de construcción como Grunt y Gulp que revolucionaron los métodos de desarrollo. A veces los desarrolladores de PHP quizás quieran/necesiten instalar node.js, lo cual no es un retroceso.
Quinta ronda: Entorno
¿Dónde se puede usar y desplegar la tecnología? ¿Qué plataformas y ecosistemas se admiten? Los desarrolladores web a menudo necesitan desarrollar aplicaciones que no están completamente orientadas a la web, como herramientas de construcción, herramientas de migración, scripts de conversión de bases de datos, etc.
PHP tiene formas de desarrollar aplicaciones de escritorio y herramientas de línea de comandos, pero no las usarías. En esencia, PHP es una tecnología de servidor; es muy bueno en ese ámbito, pero rara vez se extiende más allá.
Hace varios años, JavaScript se consideraba muy limitado, con algunas tecnologías marginales, pero su principal campo de batalla era el navegador. Node.js ha cambiado esa percepción y ha hecho florecer muchos proyectos de JavaScript. Puedes usar JavaScript en cualquier lugar: navegador, servidor, terminal, escritorio e incluso sistemas embebidos, lo que hace que JavaScript esté en todas partes.
Sexta ronda: Integración
Las tecnologías de desarrollo están muy limitadas a menos que puedan integrarse con bases de datos y controladores. PHP es fuerte en esto. PHP existe desde hace muchos años, y sus extensiones le permiten comunicarse directamente con servidores que tienen APIs principales o poco conocidas.
Node.js se está poniendo al día, pero quizás tengas problemas para encontrar componentes de integración maduros para algunas tecnologías antiguas y poco conocidas.
Séptima ronda: Alojamiento e implementación
¿Qué tan fácil es desplegar tu brillante nueva aplicación en un servidor web en línea? Esta es otra victoria completa para PHP. Si contactas al azar con una empresa de alojamiento web, encontrarás soporte principal para PHP, quizás con MySQL gratis. Para entornos de prueba (sandbox), PHP se considera más simple y las extensiones riesgosas pueden desactivarse.
Node.js es una bestia diferente; las aplicaciones de servidor se ejecutan para siempre. Necesitas un entorno de servidor físico/virtual/nube o personalizado, idealmente con acceso root, lo cual está fuera del alcance de algunos servidores, especialmente los compartidos; podrías hacer caer todo el servidor.
El alojamiento de Node.js se volverá más simple, pero creo que nunca será tan conveniente como subir por FTP algunos archivos PHP.
Octava ronda: Rendimiento
PHP es muy diligente; hay muchos proyectos y opciones que pueden hacerlo más rápido. Incluso los desarrolladores de PHP con requisitos estrictos de rendimiento casi no se preocupan por la velocidad, pero el rendimiento de Node.js suele ser mejor. Por supuesto, el rendimiento depende en gran medida de la experiencia y dedicación del equipo de desarrollo, pero Node.js todavía tiene las siguientes ventajas:
Menos dependencias
Todas las solicitudes a aplicaciones PHP deben pasar por el enrutamiento de un servidor web para iniciar el intérprete de PHP y ejecutar el código PHP. Node.js no necesita estas dependencias, y casi con seguridad usarás un framework con servidor, como Express, que es ligero y desempeña bien su papel como parte de tu aplicación.
Intérprete más pequeño y rápido
El intérprete de Node.js es más pequeño y flexible que el de PHP. No está lastrado por problemas de compatibilidad heredados de versiones antiguas del lenguaje, y Google ha contribuido enormemente a mejorar el rendimiento del motor V8.
Aplicaciones permanentemente en línea
PHP sigue el modelo estándar cliente-servidor. Cada solicitud de página inicializa la aplicación; lees los parámetros de configuración, te conectas a la base de datos, lees la información, renderizas el HTML. Las aplicaciones Node.js se ejecutan de forma persistente y solo necesitan iniciarse una vez. Por ejemplo, puedes crear un único objeto de conexión a la base de datos y reutilizarlo para todas las solicitudes. Es cierto que PHP también tiene algunas formas de lograrlo, como usar Memcached, pero ya no es una característica estándar del lenguaje.
I/O sin bloqueo, dirigido por eventos
PHP, como la mayoría de los lenguajes de servidor, utiliza un modelo de ejecución bloqueante. Cuando ejecutas un comando, como obtener datos de la base de datos, debes esperar a que esa instrucción se complete antes de ejecutar el contenido siguiente. Node.js generalmente no espera. En su lugar, debes proporcionar una función de devolución de llamada (callback) que se invoca una vez cuando la instrucción se completa. Por ejemplo:
// fetch records from a NoSQL database
DB.collection('test').find({}).toArray(process);
console.log('finished');
// process database information
function process(err, recs) {
if (!err) {
console.log(recs.length + ' records returned');
}
}
En este ejemplo, la consola imprimirá primero 'finished' y luego 'N records returned', porque la función process se invoca cuando todos los datos han sido devueltos. En otras palabras, el intérprete puede hacer otras cosas mientras se procesan otros procesos.
Ten en cuenta que la situación es más compleja y hay algunas advertencias:
- Node.js/JavaScript solo puede ejecutarse en un único hilo, pero la mayoría de los servidores web son multihilo y manejan solicitudes de forma concurrente.
- Un proceso de JavaScript de larga duración de un usuario bloqueará la ejecución del código de otros usuarios, a menos que se dividan las tareas o se useWeb Workers。
- Los puntos de referencia (benchmarks) son subjetivos y defectuosos; puedes encontrar algunos ejemplos donde Node.js es mejor y algunos ejemplos relativos donde PHP es mejor. ¡Los programadores solo intentan probar sus creencias!
- Escribir código asíncrono orientado a eventos es muy complejo y desafiante.
Solo puedo hablar desde mi experiencia: mis aplicaciones Node.js son notablemente más rápidas que las aplicaciones PHP equivalentes. Las tuyas pueden no serlo, pero nunca lo sabrás sin intentarlo.
Novena ronda: Pasión de los desarrolladores
Esto va más allá del objetivo de "desafíos comunes del desarrollo web", pero es importante. Si temes escribir código todos los días, no te importará qué lenguaje es mejor.
Es difícil comparar esto, pero algunos desarrolladores de PHP sienten pasión por el lenguaje PHP. ¿Cuándo fue la última vez que leíste un artículo o diapositiva de PHP que te llegara al corazón? ¿Quizás ya no hay necesidad de decirlo? ¿Quizás es menor visibilidad? ¿O no estoy buscando en los lugares correctos? PHP7 tiene algunas características nuevas, pero la tecnología ha estado estancada durante muchos años; sin embargo, pocos desarrolladores se quejan de PHP.
JavaScript divide a la comunidad; algunos lo aman, otros lo odian, algunos programadores están indecisos en el medio. Aun así, la retroalimentación sobre Node.js es mayoritariamente positiva. Está en la cresta de la ola, en parte porque es nuevo; los elogios pueden no durar. Por ahora, Node.js gana esta ronda.
Décima ronda: Perspectivas
No importa qué lenguaje de servidor elijas; incluso si ya no se actualiza, seguirá funcionando (¡viva ColdFusion!). Aunque su uso se está estabilizando, mucha gente sigue usando PHP. Apuesto a que puede aguantar otros veinte años.
Node.js ha crecido rápidamente. Ofrece un enfoque de desarrollo moderno, usando la misma sintaxis que el desarrollo de cliente y al mismo tiempo apoyando características revolucionarias de HTML5, como websockets y eventos enviados por el servidor (server-sent events). Aunque hay cierta controversia sobre las funciones bifurcadas del lenguaje, el uso de Node.js está creciendo exponencialmente.
Node.js está destinado a comerse la cuota de mercado de PHP, pero no creo que pueda reemplazarlo por completo. Ambas tecnologías tienen un futuro brillante. Declaro esta ronda como empate.
El ganador final
Puntuación final: Node.js gana 5 rondas, PHP gana 4 rondas, un empate. Pensé que se inclinaría hacia un lado, pero resultó más moderado de lo que esperaba.
Node.js tiene cierta curva de aprendizaje, no es ideal para principiantes, pero gana este duelo. Además, si eres un programador de JavaScript competente al que le gusta el lenguaje, Node.js no te decepcionará. Es más moderno y ofrece su propia experiencia de desarrollo web; no echarás de menos a PHP.
Pero no menosprecies a PHP. PHP sigue vivo. No deberías subirte a la ola de Node.js solo porque Node.js es más rápido, más nuevo o más moderno. PHP es fácil de aprender y sigue soportando técnicas de programación profesionales. La ayuda está en todas partes y el desarrollo es simple. Incluso los desarrolladores más devotos de Node.js tienen que considerar PHP para sitios web y aplicaciones simples.
Mi consejo: evalúa las opciones y elige un lenguaje según tus necesidades, lo cual es mucho más fiable que artículos de "comparación" como este.
Fuente: http://www.oschina.net/translate/php-vs-node-js