¿Qué elegirías para el backend de una aplicación que potencialmente enfrentaría grandes problemas de escalabilidad, Node.js o PHP?

TLDR: elija Node.js

He escrito sistemas de producción en Java, Node, PHP y C #. Actualmente, estoy trabajando en una gran aplicación PHP. No pasa un día en que no quisiera poder volver a escribir la aplicación en otro idioma.

Aquí hay un par de pensamientos sobre PHP vs. Node.js. Recuerde, la escalabilidad no se trata simplemente de rendimiento. También es su capacidad de ofrecer funciones a sus clientes y generar valor comercial en su empresa.

El ciclo de vida de una aplicación PHP es una sola solicitud.

Si bien esta naturaleza apátrida se promociona como una característica importante, francamente no siempre es beneficiosa. Hay momentos en que tiene sentido mantener el estado en un proceso (como un mecanismo de almacenamiento en caché por niveles). No importa lo que hagas, no puedes lograr esto en PHP. Debe usar algún tipo de caché externo (APC incluido) para mantener algo así como una variable simple. Desde una perspectiva de escalabilidad, literalmente debe inicializar toda su aplicación en cada solicitud.

Con Node, puede tener una aplicación con estado donde puede tener cosas como un proveedor de websocket existente en el mismo proceso que el resto de la aplicación web. Agregue un enlace a un agente de mensajes y obtendrá mensajes distribuidos en tiempo real sin tener que sondear una caché externa o una base de datos. Una vez más, todo en el mismo proceso.

Los entornos de desarrollo de PHP son un poco malos.

¿Quieres ejecutar una aplicación PHP? Es mejor usar Apache o Nginx si quieres algo que refleje la producción (sí, puedes usar el servidor de desarrollo incorporado … suspiro). ¿Quieres Apache pero no quieres ejecutarlo en tu máquina local? Necesitará una máquina virtual con Vagrant o algo así. O puede descargar contenedores hinchados como WAMP o XAMPP.

Ok, si bien estos no son factores decisivos, la mayoría de los idiomas modernos tienen entornos de servidor web integrados que no requieren toda esta ceremonia. Puede simplemente “nodo server.js” y comenzar. Usando una herramienta como Grunt, Gulp o Mimosa, tienes recarga en vivo, pruebas, linting, etc.

PHP a veces te dejará rascándote la cabeza.

La serialización / deserialización de JSON es un poco obtusa (haga todo lo posible para que funcione correctamente; por ejemplo, deserialice JSON a una instancia de clase específica). Los cierres no son serializables, lo que hace que sea imposible almacenar en caché parte de su configuración PHP-DI. API inconsistente (como firmas de funciones de la biblioteca de cadenas). Paradigma terrible e inconsistente para el manejo de errores (¡lanza una maldita excepción!).

Por otro lado, Node.js es muy limpio y consistente.

Asincronía; PHP realmente no lo tiene.

Hay un par de casos en los que PHP puede ser asíncrono (principalmente relacionado con la API de flujos de bajo nivel si no recuerdo mal), pero en general todo es bloqueante y secuencial. Node.js es inherentemente asíncrono.

En PHP, también estás realmente limitado en los tipos de mensajes que puedes usar. El marco React le brinda cierta capacidad, pero solo para un conjunto selecto de protocolos que se han implementado en la parte superior del marco. Sería difícil encontrar un protocolo de mensajería para el que alguien no haya escrito un marco en Node.

El nodo está floreciendo, PHP está en declive.

La comunidad Node.js simplemente ha explotado en los últimos años. La gente está escribiendo todo, desde aplicaciones web hasta clientes Git en el idioma. La mayoría de la emoción de PHP parece estar centrada en Facebook con HHVM. Sin embargo, tenga en cuenta que Facebook también está presionando a Hack como una alternativa a PHP (arreglando las verrugas).

¡Eso es fácil! Yo iría con Node. ¿Por qué? Porque sé y me gusta Node / Javascript y no sé o me gusta PHP. Ahora para elegir el idioma: ¡dime!

Hay una parte de Node que lo hace adecuado desde un punto de vista de escalabilidad y es su naturaleza inherentemente asíncrona. Eso significa que su servidor no está aferrado a los recursos mientras espera que db, otro servicio, un archivo leído o alguna otra parte del back-end se complete. Pero, de nuevo, como los amantes de PHP inevitablemente seguirán diciéndote, Facebook usa (una versión muy modificada de) PHP y parece que manejan algo de carga.

Entonces, volviendo a la parte en la que está haciendo una elección: ¡vaya con Node! Eso es lo que yo haría. Porque me gusta. Y si le preguntas a alguien más, podrían estar en desacuerdo.

Sería mejor si agregara el tipo de software en el que está trabajando, su experiencia y antecedentes y el tiempo esperado de finalización. De lo contrario, la respuesta que vendrá podría no ser benéfica.

More Interesting

Quiero convertirme en desarrollador de Android. ¿Sobreviviré a la competencia?

Cómo hacer una aplicación de Android con ayudante

¿Por qué la interfaz de usuario de Android es tan confusa? ¿Por qué todas las empresas se centran en las características en lugar de la experiencia, y por qué Google no está haciendo algo al respecto?

¿Qué aplicaciones de Android indias dan dinero?

¿Cuáles son todas las cosas que debo saber para ser desarrollador de Android?

¿Es Parse una mala opción para el desarrollo de Android?

¿Cuáles son las mejores formas de tener muchas instalaciones en mi aplicación de Android?

¿Cuáles son las mejores aplicaciones para Android del concepto del menú principal?

¿Cómo podemos hacer nuestros propios juegos o aplicaciones de Android?

¿Hay algún problema en la instalación de un archivo APK respaldado en móviles Android?

Aproximadamente, ¿cuántas descargas obtienen las 10 mejores aplicaciones gratuitas de iOS y Android para cada clasificación del 1 al 10?

Cómo reproducir programáticamente videos de YouTube en segundo plano

Cómo depurar una aplicación de Android que genera errores de tiempo de ejecución después de ofuscarse con ProGuard

Para el desarrollo de Android y para Xcode, MacBook Pro de 15 pulgadas Retina Core i7 2.5 GHz es suficiente o Core i7 2.8 GHz será mucho mejor. ¿La programación necesita más procesador o más RAM?

¿Cuál sería un buen programa de 8 a 12 semanas para aprender el desarrollo de iOS y / o Android?