2198 votos

¿Cómo decidir cuándo usar Node.js?

Soy nuevo en este tipo de cosas, pero últimamente he estado escuchando mucho acerca de cómo la buena Node.js es. Teniendo en cuenta lo mucho que me encanta trabajar con jQuery y JavaScript en general, yo no puede evitar preguntarse cómo decidir cuándo utilizar Node.js. La aplicación web que tengo en mente es algo así como Bitly - toma algo de contenido, los archivos.

De todas las tareas que he estado haciendo en los últimos días, he obtenido la siguiente información. Node.js

  • es una herramienta de línea de comandos que se pueden ejecutar como un servidor web y permite ejecutar los programas de JavaScript
  • utiliza el gran motor de JavaScript V8
  • es muy bueno cuando se tienen que hacer varias cosas al mismo tiempo
  • está basado en eventos para todas las maravillosas Ajax-como las cosas se pueden hacer en el lado del servidor
  • nos permite compartir código entre el navegador y el backend
  • nos permite hablar con MySQL

Algunas de las fuentes que he encontrado son:

Teniendo en cuenta que Node.js se puede ejecutar casi fuera-de-la-caja en Amazon EC2 instancias, estoy tratando de entender qué tipo de problemas requieren de Node.js frente a cualquiera de los reyes poderosos como PHP, Python y Ruby. Entiendo que realmente depende de la experiencia que uno tiene en un idioma, pero mi pregunta cae más en la categoría general: Cuando el uso de un marco determinado y qué tipo de problemas es el que es especialmente adecuado para?

1356voto

Benson Puntos 10705

Usted hizo un gran trabajo de resumir lo asombroso acerca de Node.js. Mi sensación es que Node.js es especialmente adecuado para aplicaciones donde te gustaría mantener una conexión persistente desde el navegador al servidor. Utilizando una técnica conocida como "long-polling", puede escribir una aplicación que envía actualizaciones para el usuario en tiempo real. Haciendo largo de votación en muchas de las web de gigantes, como Ruby on Rails o Django, crearía una inmensa carga en el servidor, debido a que cada cliente activo, come un proceso de servidor. Esta situación equivale a una tarpit ataque. Cuando usted usar algo como Node.js, el servidor no tiene necesidad de mantener hilos separados para cada conexión abierta.

Esto significa que usted puede crear un navegador basado en la aplicación de chat en Node.js que lleva casi nada de recursos del sistema para servir a un gran número de clientes. En cualquier momento que desee para hacer este tipo de largo de votación, Node.js es una gran opción.

Vale la pena mencionar que Ruby y Python ambos tienen herramientas para hacer este tipo de cosas (eventmachine hace y retorcido, respectivamente), pero que Node.js hace excepcionalmente bien, y desde el suelo. JavaScript está excepcionalmente situado a una devolución de llamada basado en modelo de concurrencia, y de las que sobresale aquí. También, ser capaz de serializar y deserializar con JSON nativo para el cliente y el servidor es bastante ingenioso.

Espero que la lectura de otras respuestas, esta es una fantástica pregunta.

Vale la pena señalar que Node.js también es ideal para situaciones en las que tendrás la reutilización de una gran cantidad de código a través de la cliente/servidor brecha. El Meteoro marco lo hace muy fácil, y muchas personas son lo que sugiere que esto podría ser el futuro del desarrollo web. Yo puedo decir por experiencia que es un montón de diversión para escribir código en el Meteoro, y una gran parte de esto es pasar menos tiempo pensando en cómo va a reestructurar sus datos, de modo que el código que se ejecuta en el navegador puede manipular fácilmente y pasar de nuevo.

He aquí un artículo sobre la Pirámide y largo de votación, lo cual resulta ser muy fácil de configurar con un poco de ayuda de gevent: TicTacToe y Tiempo de Sondeo con la Pirámide.

409voto

fisherwebdev Puntos 5636

Creo que Node.js es el más adecuado para aplicaciones en tiempo real: juegos en línea, herramientas de colaboración, salas de chat, o cualquier cosa donde lo que un usuario (o un robot? o sensor?) ¿con las necesidades de la aplicación para ser visto por otros usuarios de forma inmediata, sin actualizar la página.

También debo mencionar que Socket.IO en combinación con Node.js reducirá el tiempo real de latencia, incluso más allá de lo que es posible con tiempo de sondeo. Socket.IO caerá de vuelta a la largo de votación como el peor de los casos, y en lugar de usar sockets web o incluso Flash si están disponibles.

Pero también debo mencionar que casi cualquier situación en la que el código de bloque debido a las roscas pueden ser mejor atendidos con Node.js. O en cualquier situación donde usted necesita la aplicación controlada por eventos.

Además, Ryan Dahl, dijo en una charla que una vez asistí a que el Node.js puntos de referencia estrechamente rival de Nginx para regular de edad de las solicitudes HTTP. Así que si queremos construir con Node.js podemos servir a nuestros normal de los recursos de una manera bastante eficaz, y cuando necesitamos el evento impulsado por las cosas, está listo para manejar.

Además, no todo el JavaScript todo el tiempo. Lingua Franca en toda la pila.

209voto

joeytwiddle Puntos 3226

Razones para el uso de NodeJS:

  • Se ejecuta Javascript, así que usted puede utilizar el mismo idioma en el servidor y el cliente, e incluso compartir el código entre ellos (por ej. para la validación del formulario, o para la prestación de puntos de vista en cada extremo.)

  • El evento impulsado por el sistema es rápido, en comparación con los tradicionales de Java o ROR marcos, al manejar la gran cantidad de peticiones a la vez.

  • La creciente grupo de paquetes, la mayoría de los cuales están convenientemente alojado en github. A veces puede informar de un problema y encontrar solucionado en cuestión de horas! Es bueno tener todo bajo un mismo techo, con estandarizada de la notificación y fácil que se bifurcan.

  • Parece bastante adecuado para el desarrollo ágil y rápido producto de la iteración.

Razones de no uso de NodeJS:

  • Se ejecuta el Javascript, que no tiene tiempo de compilación el tipo de comprobación. Para grandes y complejos, críticos para la seguridad de los sistemas, o de los proyectos, incluyendo la colaboración entre diferentes organizaciones, un lenguaje que anima contractuales de interfaces y proporciona la comprobación de tipo estático puede ahorrar algo de tiempo de depuración (y explosiones) en el largo plazo. (Aunque la JVM está pegado con null, así que por favor Haskell para sus reactores nucleares.)

  • Añadido a esto, muchos de los paquetes en el MECANISMO nacional de prevención son un poco crudo, y aún en rápido desarrollo. Algunas bibliotecas para mayores sistemas han sufrido una década de pruebas y solución de bugs, y son muy estables por ahora. Npmjs.org no tiene ningún mecanismo para la tasa de paquetes, que ha llevado a una proliferación de paquetes haciendo más o menos la misma cosa, de los cuales un gran porcentaje no son mantenidos.

  • Anidado de devolución de llamada infierno. (Por supuesto que hay 20 diferentes soluciones a este...)

  • La creciente grupo de paquetes puede hacer una NodeJS proyecto parecen radicalmente diferentes de la siguiente. Existe una gran diversidad en las implementaciones debido a la gran cantidad de opciones disponibles (por ej. Express/Sails.js/Meteoro/Derbi). Esto a veces puede hacer más difícil para que un nuevo desarrollador para saltar en un Nodo del proyecto. En contraste con una Rails developer unirse a un proyecto existente: él debe ser capaz de familiarizarse con la aplicación con bastante rapidez, debido a que todos los Rieles de aplicaciones se les anima a utilizar una estructura similar.

  • Tratar con archivos puede ser un poco de un dolor. Las cosas que son triviales en otros idiomas, como la lectura de una línea de un archivo de texto, se extraña bastante que ver con Node.js que hay un StackOverflow pregunta en que con 80+ upvotes. No hay ninguna forma sencilla de leer un registro a la vez desde un archivo CSV. Etc.

Me encanta NodeJS, es rápido y salvaje y divertido, pero me preocupa que tiene poco interés en comprobable-corrección. Esperemos que finalmente puede combinar lo mejor de ambos mundos. Estoy ansioso por ver lo que va a reemplazar el Nodo en el futuro... :)

206voto

stewe Puntos 14623

Para hacerlo corto:

Node.js es ideal para aplicaciones que tienen una gran cantidad de conexiones simultáneas y cada petición necesita solamente muy pocos ciclos de CPU, porque el bucle de eventos (con todos los otros clientes) se bloquea durante la ejecución de una función.

Es un buen artículo sobre el bucle de eventos en Node.js blog de tecnología de Mixu: entender el lazo del evento node.js.

127voto

Joonas Puntos 1341

Tengo un ejemplo de la vida real donde la he usado Node.js. La empresa donde trabajo tengo un cliente que quería tener un simple HTML estático sitio web. Este sitio web es para la venta de un elemento a través de PayPal y el cliente también quería tener un contador que muestra la cantidad de productos vendidos. El cliente espera que tenga gran cantidad de visitantes a este sitio web. Me decidí a hacer el contador de uso Node.js y el Express.js marco.

El Node.js la aplicación es simple. Obtener los productos vendidos cantidad de un Redis de la base de datos, aumentar el contador cuando el artículo se vende y servir el valor del contador a los usuarios a través de la API.

Algunas razones por las que elegí a utilizar Node.js en este caso,

  1. Es muy ligero y rápido. Ha habido más de 200000 visitas de esta página web en tres semanas y un mínimo de recursos de servidor ha sido capaz de manejarlo todo.
  2. El contador es realmente fácil de hacer para ser en tiempo real.
  3. Node.js era fácil de configurar.
  4. Hay una gran cantidad de módulos disponibles de forma gratuita. Por ejemplo, me encontré con una Node.js módulo de PayPal.

En este caso, Node.js fue una impresionante selección.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X