¿Por qué debería usar Node.js sobre PHP?

NodeJS tiene un modelo de código asíncrono controlado por eventos. Esto significa:

  • Escalabilidad mucho mejor (hasta 50 veces el número de conexiones simultáneas en un servidor). No me importa lo “costosos” que sean los programadores. Si necesita 50 veces más servidores, sentirá la diferencia.
  • Las conexiones en tiempo real al cliente a través de WebSockets no agregan una sobrecarga significativa al servidor. Aproximadamente 20k de RAM por conexión, más el tiempo real del servidor utilizado cuando necesita procesar datos. De lo contrario, solo espera a la red.
  • Si está utilizando TypeScript, puede usar async / await, lo que significa que puede escribir código que sea asíncrono como si fuera síncrono. Esto es enorme: significa que puede escribir código como lo haría normalmente, agregando palabras clave aquí y allá para obtener resultados de sitios web o una base de datos, mientras el servidor todavía está funcionando a toda velocidad.

NodeJS está basado en JavaScript y le permite construir sitios web isomórficos / universales.

  • Isomorphic, o representación del lado del servidor, le brinda páginas web de carga más rápida que aún tienen todas las características dinámicas que brindan los marcos modernos como React o Angular 2.
  • En inglés: si tiene un sitio de Angular 2, normalmente la primera página se descarga como una página de carga en blanco y luego se representa en el cliente. Con la representación del lado del servidor, el mismo código (JavaScript) que representaría la página en el cliente representa la página en el servidor. Por lo tanto, la página aparece de inmediato, pero conserva todos los enlaces dinámicos que hacen que los sitios modernos de una sola página sean tan útiles.
  • Google ahora clasifica los sitios web más rápidos en una posición más alta. Además de hacer que sus usuarios, especialmente los usuarios de dispositivos móviles, sean mucho más felices.

NodeJS puede codificarse con TypeScript.

  • La seguridad de tipos [1] ha más que duplicado mi productividad, y ya era un desarrollador rápido.
  • El mejor error es el que te señala tu editor antes de que incluso guardes.
  • Ahora puedo refactorizar grandes porciones de código sin preocuparme de si funcionará cuando termine, porque cuando termine todo se compila.
  • Hacerlo seguro y fácil de refactorizar significa que se acumulará menos deuda técnica. Simplemente cambiar el nombre de una función o miembro de la clase se puede hacer presionando una tecla, por ejemplo.
  • La escritura estática debe considerarse una mejor práctica para cualquier cosa no trivial. Es demasiado poderoso para ignorarlo.
  • TypeScript tiene tipos ya definidos para miles de paquetes populares de JavaScript, por lo que obtienes una gran cantidad de información de tipos de forma gratuita cuando la usas.

NodeJS es fácil de depurar y probar

  • Es trivial configurar Node en Windows, Mac y Linux.
  • VS Code ha incorporado soporte para depurar NodeJS, y está disponible en las tres plataformas. Incluso puede depurar simultáneamente su código de nodo y el código de su navegador.
  • Node no requiere que configure un servidor como Apache o Nginx. Simplemente ejecutas tu aplicación.

NodeJS tiene más de 300,000 paquetes disponibles en npm

  • No todos son de alta calidad, pero miles lo son, y eso significa que, sea lo que sea que tenga que hacer, es probable que ya haya un fuerte apoyo.
  • Algunas bibliotecas famosas están extremadamente bien mantenidas, como Lodash, que le brinda un soporte de programación funcional excelente y rápido. O Socket.IO que le ofrece WebSockets compatibles con versiones anteriores.
  • Todos los servicios principales siempre se enviarán con el soporte de NodeJS. Muchos solo admitirán PHP como una ocurrencia tardía, o solo a través de su API REST.
  • Del mismo modo, las principales herramientas de servidor (base de datos, cola de mensajes, etc.) siempre recibirán soporte de NodeJS. Muchos tienen soporte nativo de JavaScript en virtud del uso de JSON.

NodeJS es compatible con Amazon Lambda

  • ¿Desea escribir un servicio que comienza sin que le cueste nada, pero que se escalará de manera efectiva infinitamente (por un precio)? Lambda no es compatible con PHP.

NodeJS es el nuevo estándar

  • La mayoría del nuevo desarrollo se está haciendo en NodeJS.
  • PHP ha recorrido un largo camino desde que ganó su peor reputación, pero perdió la cabeza y su arquitectura síncrona central no es adecuada para la Internet moderna en tiempo real.
  • La “forma PHP” para crear sitios está pasando de moda, por una buena razón. Todos esos CMS basados ​​en PHP como WordPress, Drupal y Joomla y similares están sujetos al “truco del mes”, con frecuentes ataques de día cero que pueden permitir a los piratas informáticos convertir su sitio en un bot. Cuando hago una búsqueda de “ExpressJS zero day”, no obtengo resultados sobre hacks contra el framework web más popular para Node. Pruebe esa búsqueda en su CMS basado en PHP favorito.

En serio, para mí, NodeJS es una elección fácil sobre PHP. La única pregunta es si usar Go. Lo cual está fuera del alcance de esta respuesta. 🙂

Notas al pie

[1] Tipos estáticos considerados útiles · RealMensch

Yo personalmente no lo haría a menos que lo necesite.

Nota: Soy desarrollador de JS / nodejs / PHP.

Para mí hay grandes inconvenientes en nodejs:

  • El ecosistema todavía es bastante inmaduro, mucho más grande, ya que tiene el front-end incluido cuando se trata con la comunidad JS, pero mucho más inmaduro:
  • Demasiados micropaquetes : confiar en un paquete no viene sin costo, el pad izquierdo es una ilustración del problema, pero eso sigue siendo solo un ejemplo. Entonces no, no hagas un paquete para todo . Copiar / pegar o una solución interna es a veces la respuesta.
  • Demasiadas bibliotecas están acopladas a marcos específicos en lugar de ser bibliotecas primero , las gemas como dragular-api todavía son bastante raras
  • Semver es alienígena : ok, exagero un poco aquí. Mucha gente escuchó e intentó usar semver. Sin embargo, hay muchos proyectos que no son semver (por ejemplo, Angular solo lo está adoptando con Angular 4.0), solo son dev (0.x para siempre a pesar de que son súper populares), abuso de semver (gran impacto cada mes), o solo introduce interrupciones BC en versiones menores (violación de semver).
  • Escritura estricta:
  • Me gusta PHP por permitirle imponer una escritura estricta cuando lo desee (incluso antes de PHP7, phpdoc + IDE estaba haciendo un gran trabajo) mientras le brinda mucha flexibilidad cuando lo necesita.
  • TypeScript es una respuesta, desafortunadamente no tan popular todavía. Puede cambiar dependiendo de la popularidad de Angular 2, pero está lejos de ser un estándar de facto y no veo que se convierta en un estándar. Si la escritura estricta no aterrizó en JS core, es porque mucha gente prefiere la escritura de pato a la escritura estática. La prueba es que tuvimos un tipeo algo estricto en PHP5 gracias a algunas herramientas. Además de portar bibliotecas a TS también es un dolor y cuando te faltan tipings lloras.
  • Si está utilizando TypeScript o un paso de transpilación, si tiene demasiada LoC a menos que tenga una herramienta de agrupación muy buena (que cambia cada seis meses), tendrá una sobrecarga de transpilling
  • Carece de un administrador de paquetes decente : medio cierto solo desde Yarn ya que hace un trabajo bastante bueno. Pero npm es horrible:
    • Deps no se guardan por defecto
    • Sin bloqueo (por contracción) por defecto
  • La vida útil de un proceso PHP es una vida útil de solicitud : evita tantos problemas que son una locura.
  • Poca conciencia de seguridad : para ser justos dado el ritmo creciente de JS, solo se espera.
  • Consumo de recursos extremo : un proceso JS no duerme. ¿Pérdidas de memoria? En PHP casi nunca tienes que preocuparte. Perfilado? Compare Chrome y las pruebas de rendimiento y dígame cuál prefiere.
  • Inestable : una versión principal cada mes, cómo fragmentar aún más.
  • El isomorfismo es bueno, pero además de usurpar un término matemático, hay muchas librerías que todavía no funcionan con este concepto.
  • El amor para hacer todo de manera diferente . Por ejemplo Redux: tome Event Sourcing y cambie todos los nombres. ¿No podrías seguir las mismas convenciones que todos? No
  • JS es más rápido? Jajaja
    • PHP7 fue una buena actualización gratuita, pero en serio PHP, como Python o Ruby, es lo suficientemente rápido . El idioma rara vez es el cuello de botella. Cuando lo hace, generalmente significa 1. que está haciendo algo extremadamente específico, 2. está alcanzando un tamaño crítico (en cuyo caso tendrá que usar varios idiomas de todos modos)
    • Dado que PHP tiene un encabezado de arranque en cada solicitud, pero aún así funciona bien, diría que es bastante rápido.
    • La mayoría de los puntos de referencia incluyen PHP con Apache o nginx, que definitivamente tiene una sobrecarga, por lo que para ser justos, también deben agregar uno a JS o comandos de consola de puntos de referencia
  • PHP no está en la locura asíncrona de forma predeterminada : la asíncrona es difícil de depurar, difícil de rastrear, y la mayoría de las veces no la necesita. La mayoría de la gente está bien con un sistema de cola adecuado para cosas asíncronas. Si lo desea, verifique amphp y php-uv.
  • Entonces, ¿cuándo usaría nodejs? Cuando lo necesito, la última vez fue para hacer la representación del lado del servidor de mis páginas, pero luego es solo una micro aplicación utilizada para hacer una llamada y representar lo del lado del servidor, nada más. De lo contrario, ya trato con suficiente JS en el front-end, no quiero nada de él en el back-end a menos que realmente lo necesite.

    En primer lugar, elegir una tecnología en particular depende completamente de lo que estamos construyendo. No existe tal cosa como una tecnología es mejor que otra.

    En cuanto a su pregunta … Las siguientes son algunas de las ventajas de Node.js sobre PHP.

    1. El código del lado del servidor y del lado del cliente se mantienen separados. Esto hace que nuestro enfoque sea más modular y fácil de modificar.
    2. Fácil de aprender. Cualquier persona con el conocimiento del script java básico puede aprender Node.js fácilmente.
    3. Dado que el código en el lado del cliente y el servidor están separados, una vez que el código del lado del cliente está en la memoria caché del navegador, no es necesario obtenerlo siempre del servidor. Solo los datos enviados al servidor difieren, pero no el código.
    4. El mecanismo de devolución de llamada en Node.js es una herramienta muy útil.
    5. Hay muchos módulos predefinidos (módulos npm) disponibles que se pueden usar según nuestros requisitos.
    6. Si el intercambio de datos es principalmente del tipo JSON, entonces Node.js sería un placer para los desarrolladores. Los objetos JSON son fáciles de manejar usando el script java.

    También hay algunas ventajas de PHP sobre Node.js. Así que piense dos veces y elija sabio antes de comenzar a construir.

    Feliz codificación 🙂 …

    Porque Node es mucho más rápido que PHP y es una forma asincrónica de distribuir su sitio web / aplicación. Si espera muchas conexiones en este mismo tiempo, debe usar el nodo. Además, Node proporciona herramientas muy grandes, como npm. Este es un excelente administrador de paquetes con toneladas de bibliotecas y marcos gratuitos.

    Además, en Node puedes escribir en TypeScript desde Microsoft. Está basado en un lenguaje moderno y compilado a JavaScript. Tiene muchas características y proporciona un nuevo estilo de escritura de código. Además, Node es muy fácil de depurar. Casi todos los editores de código populares tienen complementos para JavaScript / TypeScript y Node.

    La tercera razón para usar Node es la simplicidad de ellos. Si ya conoce JavaScript, Node sería muy fácil de aprender y dominar para usted.

    Porque eres mucho más eficiente en Node.js.

    Si es mucho más eficiente en PHP, y trabaja en la programación comercial, use PHP. Al cliente no le importa el idioma del lado del servidor, pero le importa si el sitio se retrasará 6 meses para que pueda dominar Node.js. (Aprenda idiomas a expensas del cliente y podría terminar en el extremo equivocado de una gran demanda. Lo sé, fui testigo del cliente en tal situación. [Y la empresa de software no tuvo más opción que declararse en bancarrota e irse fuera del negocio.])

    Independientemente de las ventajas de Node.js, y hay muchas, si va a retrasar el lanzamiento del sitio por meses (y lleva mucho tiempo aprender realmente un nuevo tipo de lenguaje), el cliente no va a ser feliz. Especialmente si puedes escribir el mismo sitio en unos días más si te quedas con un idioma en el que ya eres bueno.

    More Interesting

    ¿Qué debo aprender primero, HTML o Python?

    ¿Cuánto deberíamos esperar para automatizar 50 casos de prueba funcionales (cada uno con aproximadamente 25 acciones por prueba) si automatizáramos usando Selenium?

    ¿Dónde puedo encontrar información / pautas sobre el diseño de un sitio web multilingüe?

    ¿Cómo podemos verificar la disponibilidad del nombre de usuario desde una base de datos y devolver la disponibilidad sin recargar la página?

    ¿Cómo encontrar la motivación para ser un desarrollador web full stack? ¿Puede aconsejarme sobre alguna recomendación o ruta de aprendizaje?

    ¿Qué cosas debe considerar un diseñador de UX al entregar un prototipo al equipo de desarrollo front-end?

    ¿Por qué ASP se considera malo o no preferido sobre el otro lenguaje basado en web?

    ¿Cuántos desarrolladores se necesitarían para construir Quora?

    ¿Para qué sirve normalize.scss?

    ¿Qué pila se usa para monitorear las aplicaciones del servidor nodejs? Estoy buscando algo que pueda ser alojado en un servidor personal y que sea ampliamente utilizado por la comunidad.

    ¿Dónde puedo obtener orientación para el SAPUI5?

    ¿Cuáles son algunas opiniones en mi sitio web de crecimiento personal en abundantawakening.com?

    ¿Qué es Object.prototype en JavaScript?

    ¿Cuánto tiempo llevaría construir Facebook desde cero a partir de julio de 2012?

    En CSS, quiero animar objetos en un fondo que se mueven y se desvanecen a medida que pasa un personaje. ¿Qué código podría usar para que esto suceda?