¿Qué tiene de especial el Node.js? [cerrado]

48

Recientemente ha habido muchos elogios para Node.js. No soy un desarrollador que haya tenido mucha exposición a la aplicación de red. Desde mi entendimiento de Nodes.js, su fortaleza es: solo tenemos un hilo que maneja conexiones múltiples, proporcionando una arquitectura basada en eventos.

Sin embargo, por ejemplo, en Java, solo puedo crear un subproceso utilizando NIO / AIO (que es una API sin bloqueo), y manejar múltiples conexiones utilizando ese subproceso, y proporciono una arquitectura basada en eventos para implementar la lógica de manejo de datos (no debería ser tan difícil al proporcionar alguna devolución de llamada, etc.)?

Dado que JVM es una VM aún más madura que V8 (espero que también se ejecute más rápido), y la arquitectura de manejo basada en eventos parece ser algo que no es difícil de crear, no estoy seguro de por qué Node.js está atrayendo tanto atención. ¿Me perdí algunos puntos importantes?

    
pregunta Adrian Shum 19.06.2012 - 04:34

3 respuestas

33

Si bien ese concepto puede implementarse en muchos idiomas (y como se menciona en dodgy_coder , se ha implementado en Ruby y Python al menos), no es tan trivial como dices.

Es cierto, Java tiene API de E / S no bloqueantes. Por lo tanto, puede hacer el disco / red en bruto IO de forma no bloqueante. Sin embargo, todas las API que de alguna manera envuelven o maneja IO también deben implementarse de manera no bloqueante. Cada analizador XML, cada controlador de base de datos, cada convertidor de formato de archivo debe escribirse para admitir la IO sin bloqueo. Porque si una sola biblioteca está bloqueando en este patrón, eso reduce el rendimiento de sus servidores a valores de edad de piedra.

Node.js tiene esa infraestructura de biblioteca, porque siempre fue diseñada de esa manera: cada biblioteca que se esfuerza por ser popular tiene para proporcionar una API asíncrona o no se utilizará.

    
respondido por el Joachim Sauer 19.06.2012 - 09:43
19

Probablemente la razón principal es que usa JavaScript para escribir componentes del lado del servidor para cosas como servidores web, aplicaciones web o servicios web. Esto unifica el lenguaje de desarrollo de front-end (lado del cliente) tradicional con el lenguaje del lado del servidor.

Tienes razón: el hecho de que no se bloquee, el uso del patrón del reactor no es único, se ha hecho antes de usar otros lenguajes y marcos, como Ruby EventMachine o Python's Twisted, por ejemplo.

    
respondido por el dodgy_coder 19.06.2012 - 05:35
10

Las tres razones principales que daría son:

  1. IO sin bloqueo / IO asíncrona. Esto se encuentra en todas partes en la web y en los carteles anteriores. Una cosa que contribuiría es que el diseño de su código para asumir explícitamente comportamientos asíncronos ayuda al motor del compilador a maximizar el hardware. Sí, muchos de los compiladores JIT y los procesadores de hipervínculos toman código síncrono y ayudan a paralelizar la ejecución. Esto, por supuesto, es un enfoque de mejor esfuerzo. En contraste, al crear explícitamente la aplicación para async io, se asegura que el motor y el hardware puedan maximizar el tiempo de ejecución de su código. Es cierto que no tengo datos cuantificables que demuestren esto, pero me siento cálido por dentro para pensar de esta manera.

  2. Base de código único para cliente y servidor. Esto tiene una serie de ventajas: ayuda a optimizar los costos del centro de datos al poder mover la lógica de negocios del servidor al cliente; ayudar a reutilizar la lógica de negocios / validación de datos; reduzca la complejidad de las habilidades de desarrollador que deben existir para admitir el producto (vs. Python & javascript).

  3. Barrera de entrada baja. En muchos sentidos, Javascirpt es como Basic, Pascal y Perl de ayer año. Es muy fácil comenzar a escribir código y no requiere muchos conocimientos de dominio para comenzar. Esto también ayuda a reducir sus costos de desarrollo al poder atraer a más desarrolladores jr y obtener un avance en un proyecto. [Por supuesto, debe superar a los ideólogos que creen que los lenguajes de programación deberían ser difíciles para eliminar a los desarrolladores que funcionan con poca frecuencia]

respondido por el cflat 22.06.2012 - 09:27

Lea otras preguntas en las etiquetas