¿En qué se diferencia Node.js de otros marcos del lado del servidor?

21

Me di cuenta de que Node.js se ha vuelto muy popular, y he visto varias instancias de personas que realizan proyectos a pequeña escala.

También he mirado las listas de pros y contras para tener una idea de lo que Node.js puede hacer, pero todavía no tengo claro en qué se diferencia de otras tecnologías del lado del servidor más maduras como PHP, Perl o Ruby en Rieles.

¿Qué diferencia específicamente a Node.js de las alternativas actuales y por qué?

Saeed Neamati
fuente
1
@downvoter: ¿por qué el downvote? a excepción del segundo párrafo (realmente no se puede preguntar por qué comenzar algo cuando alguien más lo ha hecho porque siempre se podría hacer mejor), esta pregunta me parece intrigante. A menudo lo he pensado yo mismo.
David Peterman
Es un error menor elegir, pero si buscas en Google la frase citada "node.js" obtienes alrededor de 3 millones de visitas.
Peter Rowell
@ Peter, sí, lo intenté y tienes razón. Pero 3 millones siguen siendo dos mucho. Puede volver un año después, y esta cifra probablemente haya subido a 10 millones. :)
Saeed Neamati
3
@ Mark, gracias por una edición sobresaliente. Ahora está más claro.
Saeed Neamati

Respuestas:

18

Hay dos cosas importantes que hacen que Node.js sea diferente a los marcos existentes del lado del servidor, los eventos asincrónicos y el uso de JavaScript como lenguaje de programación.

Eventos asincrónicos

Si bien la mayoría de los marcos del lado del servidor existentes usan una arquitectura síncrona, Node.js usa una arquitectura asíncrona , que JavaScript puede manejar bien. Esto significa que el servidor reacciona a los eventos y envía eventos (mensajes) a, por ejemplo, la base de datos. Este estilo de programación es muy diferente a un estilo síncrono, y puede ser difícil de usar con otros lenguajes. Node.js emplea un estilo asincrónico con E / S asincrónica y puede escalar bien.

Ver también Arquitectura dirigida por eventos

JavaScript

JavaScript es el lenguaje de programación que las aplicaciones web utilizan en el cliente. Usar el mismo lenguaje en el lado del servidor significa que el desarrollador puede aplicar su conocimiento de JavaScript tanto en el cliente como en el servidor, y usar las mismas funciones según sea necesario.

Recomendaría la presentación Introducción a Node.js con Ryan Dahl donde explica la arquitectura basada en eventos de Node.js con más detalle.

Jonas
fuente
2
Esta es fácilmente la mejor respuesta hasta ahora, pero pondría los Eventos Asincrómicos primero, ya que eso es realmente lo que hace que Node.js sea tan atractivo como un marco del lado del servidor. Sin embargo, buen trabajo, mencionando E / S asíncrona y escalabilidad. Ese es el corazón de esto.
Adam Crossland
Bueno @ Jonás, todavía no entiendo. ASP.NET también está basado en eventos. Entonces, ¿cuál es la diferencia entre Node.js y ASP.NET? ¿Es solo porque es asíncrono? En ese caso, creo que usar subprocesos múltiples en ASP.NET puede hacer lo mismo, ¿no?
Saeed Neamati
3
@Saeed: ASP.NET está enhebrado y sincrónico, por ejemplo, al acceder a la base de datos, el hilo está bloqueado y está esperando una respuesta de la base de datos. Y cuando se usan muchos hilos (por ejemplo, uno por solicitud) se usa mucha memoria (cada hilo necesita una cantidad bastante grande de memoria), eso puede ser un cuello de botella. Node.js envía mensajes y reacciona a eventos, por lo que nunca (con suerte) bloquea el hilo. Con node.js está utilizando el mismo modelo de programación que en el lado del cliente con Ajax ( JavaScript asíncrono y XML), y el mismo lenguaje.
Jonas
Olvidaste la gran comunidad de código abierto que hay detrás.
Raynos
3
Cuando C # 5 rueda con las asynccosas nuevas, eso puede cambiar. El problema no es que no pueda escribir código asincrónico escalable en otros idiomas, es que es más difícil de hacer (correctamente) sin un buen soporte de nivel de idioma.
Davy8
6

Es diferente porque es impulsado por eventos . Esto hace que el servidor sea altamente escalable.

En una palabra;

Modelo de hilo

  1. El cliente pide algo
  2. El servidor se apaga y procesa la solicitud
  3. Se lo devuelve al cliente.
  4. Listo para procesar una nueva solicitud

Modelo de evento

  1. El cliente pide algo
  2. El servidor pasa la solicitud para su procesamiento. Listo para procesar una nueva solicitud
  3. El servidor maneja más solicitudes a medida que entran
  4. El servidor devuelve datos al cliente cuando la solicitud ha finalizado el procesamiento
Tom Squires
fuente
@ Tom, ¿qué quieres decir con evento? ASP.NET WebForms también está controlado por eventos y puede ver controladores como Session_Startedo Context_Authenticatedo Page_Load?
Saeed Neamati
1
Llamarlo controlado por eventos es más ambiguo de lo necesario, y realmente no llega al corazón de Node.JS: E / S asíncrona.
Adam Crossland
2

He tenido la impresión de que su popularidad se debió al uso de JavaScript. Dado que muchos desarrolladores web conocen JavaScript, es un punto de venta que ahora pueden desarrollar código del lado del servidor usando el mismo lenguaje. Esto tiene algunas ventajas que puedo pensar:

  • Los archivos de código se pueden compartir entre el servidor y el cliente, evitando la duplicación de esfuerzos solo para manejar los dos lados del sistema.
  • Los desarrolladores no necesitan cambiar mentalmente entre idiomas. (No es un gran problema en mi opinión)
  • Los arquitectos no necesitan elegir varios idiomas al diseñar una solución web.
  • Alguien que nunca desarrolló código del lado del servidor ahora puede hacerlo sin aprender un idioma diferente. (No es probable que sea un argumento valioso, en mi humilde opinión)
John Fisher
fuente
Node.JS es popular porque es rápido y escala bien. Que esté en JavaScript es bueno, pero en gran medida incidental.
Adam Crossland
2
Lo que es más valioso es que los desarrolladores del lado del servidor pueden escribir código del lado del cliente en el mismo idioma, y ​​que usted puede compartir módulos del lado del servidor con el cliente. No de la otra manera. No me gustaría portar el código pirateado del lado del cliente al servidor, eso se está disparando en el pie.
Raynos
@ Adam: ¿Por qué node.js se está volviendo popular cuando ya hay tecnologías que se ajustan a la descripción de "rápido y escala bien"? - Porque es JavaScript.
John Fisher
@John Es más difícil escribir aplicaciones que no escalen bien en Node.js. Si su aplicación es intensiva en disco / red que en CPU (que son la mayoría), puede admitir fácilmente muchas más conexiones simultáneas en un solo núcleo que la mayoría de los otros servidores a menos que escriba un código de subprocesamiento muy complicado.
Davy8
@ Davy8: Supongo que todo depende de los otros marcos / sistemas que haya utilizado. La facilidad de escalabilidad que describe ya es simple con las herramientas que uso. Lo único que Node.js ofrece desde mi punto de vista es el sabor de JavaScript, que no es convincente.
John Fisher