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


Soy nuevo en este tipo de cosas, pero últimamente he oído mucho sobre lo bueno Node.js es. Teniendo en cuenta cuánto me gusta trabajar con jQuery y JavaScript en general, no puedo evitar preguntarme cómo decidir cuándo usar Node.js. La aplicación web que tengo en mente es algo así como Bitly - toma algo de contenido, lo archiva.

De toda la tarea que he estado haciendo en los últimos días, obtuve la siguiente información. Node.js

  • es una herramienta de línea de comandos que se puede ejecutar como un servidor web regular y permite ejecutar programas de JavaScript
  • utiliza el gran Motor de JavaScript V8
  • es muy bueno cuando necesitas hacer varias cosas al mismo tiempo
  • está basado en eventos por lo que todo el maravilloso Ajax-como las cosas se pueden hacer en el lado del servidor
  • nos permite compartir el código entre el navegador y el servidor
  • nos permite hablar con MySQL

Algunas de las fuentes con las que me he encontrado son:

Teniendo en cuenta que Node.js se puede ejecutar casi fuera de la caja en EC2 de Amazon instancias, estoy tratando de entender qué tipo de problemas requieren Node.js a diferencia de cualquiera de los poderosos reyes que hay PHP, Pitón y Rubí. Entiendo que realmente depende de la experiencia que uno tenga en un idioma, pero mi pregunta recae más en la categoría general de: ¿Cuándo utilizar un marco particular y para qué tipo de problemas es particularmente adecuado?


2200
2018-02-21 05:20


origen


Respuestas:


Hiciste un excelente trabajo al resumir lo maravilloso de Node.js. Tengo la sensación de que Node.js es especialmente adecuado para aplicaciones en las que desea mantener una conexión permanente desde el navegador al servidor. Usando una técnica conocida como "sondeo largo", puede escribir una aplicación que envíe actualizaciones al usuario en tiempo real. Hacer largas encuestas en muchos de los gigantes de la web, como Ruby on Rails o Django, crearía una carga inmensa en el servidor, porque cada cliente activo come un proceso de servidor. Esta situación equivale a una pozo de brea ataque. Cuando utilizas algo como Node.js, el servidor no necesita mantener hilos separados para cada conexión abierta.

Esto significa que puedes crear un aplicación de chat basada en navegador en Node.js que casi no requiere recursos del sistema para atender a un gran número de clientes. Cada vez que desee hacer este tipo de encuestas largas, Node.js es una gran opción.

Vale la pena mencionar que Ruby y Python tienen herramientas para hacer este tipo de cosas (eventomaquina y retorcido, respectivamente), pero que Node.js lo hace excepcionalmente bien, y desde cero. JavaScript está excepcionalmente bien situado para un modelo de simultaneidad basado en devolución de llamada, y se destaca aquí. Además, poder serializar y deserializar con JSON nativo tanto para el cliente como para el servidor es bastante ingenioso.

Espero leer otras respuestas aquí, esta es una pregunta fantástica.

Vale la pena señalar que Node.js también es ideal para situaciones en las que reutilizará una gran cantidad de código en la brecha cliente / servidor. los Meteor framework hace que esto sea realmente fácil, y mucha gente sugiere que este podría ser el futuro del desarrollo web. Puedo decir por experiencia que es muy divertido escribir código en Meteor, y una gran parte de esto es pasar menos tiempo pensando cómo va a reestructurar sus datos, por lo que el código que se ejecuta en el navegador puede fácilmente manipularlo y devolverlo.

Aquí hay un artículo sobre Pyramid y long-polling, que resulta muy fácil de configurar con un poco de ayuda de gevent: TicTacToe y Long Polling con pirámide.


1359
2018-02-21 05:30



Creo que Node.js es 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 robot? O sensor?) Hace con la aplicación debe ser visto por otros usuarios inmediatamente, sin una actualización de página

También debo mencionar que Socket.IO en combinación con Node.js reducirá su latencia en tiempo real incluso más allá de lo que es posible con un sondeo largo. Socket.IO recurrirá a las encuestas largas como el peor de los casos y, en su lugar, utilizará sockets web o incluso Flash si están disponibles.

Pero también debería mencionar que casi cualquier situación donde el código pueda bloquearse debido a los hilos se puede abordar mejor con Node.js. O cualquier situación donde necesite que la aplicación sea controlada por eventos.

Además, Ryan Dahl dijo en una charla a la que asistí una vez que los puntos de referencia de Node.js rivalizan estrechamente con Nginx para las viejas solicitudes HTTP habituales. Entonces, si construimos con Node.js, podemos servir a nuestros recursos normales con bastante eficacia, y cuando necesitamos las cosas impulsadas por eventos, está listo para manejarlo.

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


410
2018-02-21 06:43



Razones para usar NodeJS:

  • Se ejecuta Javascript, por lo que puede utilizar el mismo lenguaje en el servidor y el cliente, e incluso compartir algún código entre ellos (por ejemplo, para la validación de formularios o para mostrar vistas en cualquier extremo).

  • los single-threaded sistema impulsado por eventos es rápido incluso cuando se manejan muchas solicitudes a la vez, y también es simple, en comparación con los múltiples hilos tradicionales Java o marcos ROR.

  • El grupo de paquetes accesible a través de NPM, incluidas bibliotecas / módulos del lado del cliente y del servidor, así como herramientas de línea de comandos para el desarrollo web. La mayoría de estos están alojados convenientemente en github, donde a veces puede informar un problema y encontrarlo solucionado en cuestión de horas. Es bueno tener todo bajo un mismo techo, con informes estandarizados de problemas y fácil bifurcación.

  • Se ha convertido en el entorno estándar de facto en el que se ejecuta Herramientas relacionadas con Javascript y otra herramientas relacionadas con la web, incluidos los corredores de tareas, los minificadores, los embellecedores, los linters, los preprocesadores, los bundlers y los procesadores de análisis.

  • Parece bastante adecuado para prototipos, desarrollo ágil y iteración rápida del producto.

Razones no para usar NodeJS:

  • Ejecuta Javascript, que no tiene comprobación de tipos en tiempo de compilación. Para grande, complejo seguridad crítica sistemas o proyectos, incluida la colaboración entre diferentes organizaciones, un lenguaje que alienta interfaces contractuales y proporciona control de tipo estático puede ahorrarle un poco de tiempo de depuración (y explosiones) a la larga. (Aunque la JVM está atrapada con null, por lo tanto, use Haskell para sus reactores nucleares.)

  • Además, muchos de los paquetes en NPM son un poco crudoy aún en rápido desarrollo. Algunas bibliotecas para frameworks antiguos han pasado una década de pruebas y corrección de errores, y son muy estable por ahora. Npmjs.org no tiene un mecanismo para calificar paquetes, lo que ha llevado a una proliferación de paquetes que hacen más o menos lo mismo, de los cuales un gran porcentaje ya no se mantiene.

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

  • El conjunto cada vez mayor de paquetes puede hacer que aparezca un proyecto NodeJS radicalmente diferente del siguiente. Existe una gran diversidad en las implementaciones debido a la gran cantidad de opciones disponibles (por ejemplo, Express /Sails.js/Meteorito/derby) Esto a veces puede hacer que sea más difícil para un nuevo desarrollador saltar sobre un proyecto Node. Contraste eso con un Carriles desarrollador que se une a un proyecto existente: debería poder familiarizarse con la aplicación con bastante rapidez, ya que se recomienda a todas las aplicaciones de Rails que utilicen un estructura similar.

  • Tratar con archivos puede ser un poco molesto. Las cosas que son triviales en otros idiomas, como leer una línea de un archivo de texto, son lo suficientemente extraño como para hacer con Node.js que hay una pregunta de StackOverflow con más de 80 votos hacia arriba. Hay no es una forma sencilla de leer un registro a la vez desde un archivo CSV. Etc.

Me encanta NodeJS, es rápido, salvaje y divertido, pero me preocupa que tenga poco interés en la corrección comprobable. Esperemos que podamos finalmente fusionar lo mejor de ambos mundos. Estoy ansioso por ver qué reemplazará a Node en el futuro ... :)


209
2017-11-25 21:47



Para hacerlo breve:

Node.js es muy adecuado para aplicaciones que tienen muchas conexiones simultáneas y cada solicitud solo necesita muy pocos ciclos de CPU, ya que el bucle de eventos (con todos los otros clientes) se bloquea durante la ejecución de una función.

Un buen artículo sobre el ciclo de eventos en Node.js es Blog de tecnología de Mixu: comprensión del ciclo de eventos node.js.


208
2018-01-15 01:48



Tengo un ejemplo del mundo real en el que he usado Node.js. La compañía donde trabajo obtuvo un cliente que quería tener un sitio web HTML simple y estático. Este sitio web es para vender un artículo usando PayPal y el cliente también quería tener un mostrador que muestre la cantidad de artículos vendidos. El cliente espera tener una gran cantidad de visitantes a este sitio web. Decidí hacer el contador usando Node.js y el Express.js marco de referencia.

La aplicación Node.js era simple. Obtenga la cantidad de artículos vendidos de un Redis base de datos, aumente el contador cuando el artículo se venda y sirva el valor del contador a los usuarios a través del API.

Algunas razones por las que elegí usar Node.js en este caso

  1. Es muy ligero y rápido. Hubo más de 200,000 visitas en este sitio web en tres semanas y los recursos mínimos del servidor han sido capaces de manejarlo todo.
  2. El contador es realmente fácil de hacer para ser en tiempo real.
  3. Node.js fue fácil de configurar.
  4. Hay muchos módulos disponibles de forma gratuita. Por ejemplo, encontré un módulo Node.js para PayPal.

En este caso, Node.js fue una elección increíble.


127
2018-05-31 06:34



Las razones más importantes para comenzar su próximo proyecto usando Node ...

  • Todos los tipos más geniales están dentro ... así que debe se Divertido.
  • Puedes pasar el rato en el refrigerador y tener muchas aventuras de Node para presumir.
  • Eres un centavo en lo que respecta a los costos de alojamiento en la nube.
  • He estado allí con Rails
  • Odias las implementaciones de IIS
  • Su antiguo trabajo de TI se está volviendo aburrido y desea estar en una brillante nueva Start Up.

Que esperar ...

  • Se sentirá seguro y protegido con Express sin todos los bloatware de servidor que nunca necesitó.
  • Corre como un cohete y escala bien.
  • Tú lo sueñas. Lo instalaste El repositorio de paquete de nodos npmjs.org es el ecosistema más grande de bibliotecas de código abierto en el mundo.
  • Tu cerebro se deformará en el tiempo en la tierra de las devoluciones de llamada anidadas ...
  • ... hasta que aprenda a mantener su Promesas.
  • Sequelizar y Pasaporte son tus nuevos amigos API
  • La depuración en su mayoría del código asíncrono obtendrá umm ... interesante .
  • Tiempo para todos los Noders para dominar Mecanografiado.

¿Quién lo usa?

  • PayPal, Netflix, Walmart, LinkedIn, Groupon, Uber, GoDaddy, Dow Jones
  • He aquí por qué cambiado a Node.

105
2018-06-12 13:24



No hay nada como Silver Bullet. Todo viene con algún costo asociado. Es como si usted come alimentos grasos, comprometerá su salud y los alimentos saludables no vienen con especias como la comida grasosa. Es una elección individual si quieren salud o especias como en su comida. De la misma forma que Node.js considera que se usará en un escenario específico. Si su aplicación no se ajusta a ese escenario, no debería considerarla para el desarrollo de su aplicación. Solo estoy pensando en lo mismo:

Cuándo usar Node.JS

  1. Si su código del lado del servidor requiere muy pocos ciclos de CPU. En otro mundo, usted está haciendo una operación sin bloqueo y no tiene un algoritmo / trabajo pesado que consume muchos ciclos de CPU.
  2. Si eres de JavaScript y te sientes cómodo al escribir el código Single Threaded al igual que el lado del cliente JS.

Cuándo NO usar Node.JS

  1. Su solicitud de servidor depende del algoritmo / trabajo pesado de consumo de CPU.

Consideración de escalabilidad con Node.JS

  1. Node.JS por sí mismo no utiliza todo el núcleo del sistema subyacente y tiene un solo subproceso por defecto, usted debe escribir su propia lógica para utilizar el procesador multinúcleo y hacerlo de múltiples hilos.

Node.JS Alternativas

Hay otra opción para usar en lugar de Node.JS sin embargo Vert.x parece ser bastante prometedor y tiene muchas características adicionales, como el uso de polígonos y mejores consideraciones de escalabilidad.


60
2018-04-05 17:17



Otra gran cosa que creo nadie ha mencionado acerca de Node.js es la increíble comunidad, el sistema de administración de paquetes (npm) y la cantidad de módulos que existen que puede incluir simplemente incluyéndolos en su archivo package.json.


41
2018-06-06 17:42



Mi pieza: nodejs es ideal para hacer sistemas en tiempo real como análisis, aplicaciones de chat, API, servidores de anuncios, etc. Demonios, hice mi primera aplicación de chat usando nodejs y socket.io en 2 horas y eso también durante el examen ¡semana!

Editar

Han pasado varios años desde que comencé a usar nodejs y lo he usado para hacer muchas cosas diferentes, incluidos servidores de archivos estáticos, análisis simples, aplicaciones de chat y mucho más. Esta es mi opinión sobre cuándo usar nodejs

Cuándo usar

Al hacer un sistema que ponga énfasis en la concurrencia y la velocidad.

  • Solo conecta servidores como aplicaciones de chat, irc, etc.
  • Redes sociales que ponen énfasis en recursos en tiempo real como geolocalización, transmisión de video, transmisión de audio, etc.
  • Manejando pequeños fragmentos de datos muy rápido como una aplicación web de análisis.
  • Como exponer un REST solo api.

Cuándo no usar

Es un servidor web muy versátil para que pueda usarlo donde quiera, pero probablemente no en estos lugares.

  • Blogs simples y sitios estáticos.
  • Solo como un servidor de archivos estático.

Tenga en cuenta que solo estoy molestando. Para servidores de archivos estáticos, apache es mejor principalmente porque está ampliamente disponible. La comunidad nodejs se ha hecho más grande y más madura a lo largo de los años y es seguro decir que nodejs se puede usar casi en todas partes si tiene su propia opción de alojamiento.


37
2018-05-06 13:52