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




node js express example (12)

  1. Node es ideal para prototipos rápidos, pero nunca lo usaría de nuevo para nada complejo. Pasé 20 años desarrollando una relación con un compilador y seguro que la echo de menos.

  2. Node es especialmente doloroso por mantener el código que no has visitado durante un tiempo. La información de tipo y la detección de errores de tiempo de compilación son BUENAS COSAS. ¿Por qué tirar todo eso? ¿Para qué? Y cuelgue, cuando algo va hacia el sur, el montón de huellas a menudo es completamente inútil.

Soy nuevo en este tipo de cosas, pero últimamente he escuchado mucho sobre lo bueno que es Node.js Teniendo en cuenta lo mucho que me encanta trabajar con jQuery y JavaScript en general, no puedo dejar de 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 normal y permite ejecutar programas de JavaScript
  • utiliza el gran motor V8 JavaScript
  • Es muy bueno cuando necesitas hacer varias cosas al mismo tiempo.
  • está basado en eventos, por lo que todas las cosas maravillosas de Ajax se pueden hacer en el lado del servidor
  • nos permite compartir código entre el navegador y el backend
  • nos deja hablar con MySQL

Algunas de las fuentes que he encontrado son:

Teniendo en cuenta que Node.js puede ejecutarse casi de forma inmediata en las instancias EC2 de Amazon , estoy tratando de entender qué tipo de problemas requieren Node.js en oposición a cualquiera de los reyes poderosos que existen, como PHP , Python y Ruby . Entiendo que realmente depende de la experiencia que uno tiene en un idioma, pero mi pregunta se enmarca más en la categoría general de: ¿Cuándo usar un marco en particular y para qué tipo de problemas es particularmente adecuado?


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 en la que lo que un usuario (o robot? O sensor?) Haga con la aplicación debe ser visto por otros usuarios de inmediato. sin una página de actualización.

También debo mencionar que Socket.IO en combinación con Node.js reducirá su latencia en tiempo real incluso más de lo que es posible con un sondeo largo. Socket.IO volverá a las encuestas largas como el peor de los casos, y en su lugar 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 pueda bloquearse debido a subprocesos se puede abordar mejor con Node.js. O cualquier situación en la que necesite que la aplicación esté dirigida por eventos.

Además, Ryan Dahl dijo en una charla que una vez asistí a que los puntos de referencia de Node.js rivalizan estrechamente con Nginx para las solicitudes HTTP antiguas habituales. Por lo tanto, si construimos con Node.js, podemos servir nuestros recursos normales de manera bastante efectiva, y cuando necesitamos las cosas dirigidas por eventos, está listo para manejarlas.

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


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

  • Todos los tipos más geniales están en eso ... así que debe ser divertido.
  • Puedes quedarte en la nevera y tener muchas aventuras de Node para presumir.
  • Usted es un centavo cuando se trata de costos de alojamiento en la nube.
  • Ya lo he hecho con rieles.
  • Odias las implementaciones de IIS
  • Su antiguo trabajo de TI se está volviendo bastante aburrido y desearía estar en un nuevo Start Up brillante.

Que esperar ...

  • Te sentirás seguro con Express sin todos los programas de software que nunca has necesitado.
  • Corre como un cohete y escala bien.
  • Lo sueñas Lo instalaste. El paquete de nodos repo packages es el ecosistema más grande de bibliotecas de código abierto del mundo.
  • Tu cerebro tendrá tiempo deformado en la tierra de devoluciones de llamadas anidadas ...
  • ... hasta que aprendas a cumplir tus Promises .
  • Sequelize y Passport son tus nuevos amigos API.
  • Depurando código principalmente asíncrono obtendrá umm ... interesante .
  • Tiempo para que todos los Noders dominen a Typescript.

¿Quién lo usa?

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

Mi única razón más para elegir Node.js para un nuevo proyecto es:

Ser capaz de hacer puro desarrollo basado en la nube.

He usado Cloud9 IDE por un tiempo y ahora no puedo imaginar sin él, cubre todos los ciclos de vida de desarrollo. Todo lo que necesita es un navegador y puede codificar en cualquier momento y en cualquier dispositivo. No es necesario que ingrese el código en una computadora (como en casa), luego haga la verificación en otra computadora (como en el lugar de trabajo).

Por supuesto, puede que haya un IDE basado en la nube para otros idiomas o plataformas (el IDE de Cloud 9 también está agregando soporte para otros idiomas), pero usar Cloud 9 para hacer el desarrollo de Node.js es realmente una gran experiencia para mí.


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

Cuándo usar Node.JS

  1. Si el código del lado de su servidor requiere muy pocos ciclos de CPU. En otro mundo, está realizando una operación sin bloqueo y no tiene un algoritmo / trabajo pesado que consuma muchos ciclos de CPU.
  2. Si eres de Javascript en segundo plano y cómodo para escribir el código de subprocesamiento único como el lado del cliente JS.

Cuando NO usar Node.JS

  1. Su solicitud de servidor depende de un algoritmo / trabajo que consume mucha CPU.

Consideración de escalabilidad con Node.JS

  1. Node.JS en sí no utiliza todo el núcleo del sistema subyacente y es de un solo subproceso de forma predeterminada, tiene que escribir la lógica por su cuenta para utilizar un procesador de múltiples núcleos y hacerlo de múltiples subprocesos.

Alternativas Node.JS

Hay otras opciones para usar en lugar de Node.JS, sin embargo, Vert.x parece ser bastante prometedor y tiene muchas características adicionales como poligoto y mejores consideraciones de escalabilidad.


Otra gran cosa que creo que nadie ha mencionado sobre 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.


Puede ser utilizado donde

  • Aplicaciones que son altamente impulsadas por eventos y están fuertemente vinculadas a E / S
  • Aplicaciones que manejan un gran número de conexiones a otros sistemas.
  • Aplicaciones en tiempo real (Node.js fue diseñado desde cero para que sea fácil de usar).
  • Aplicaciones que combinan montones de información transmitida a otras fuentes.
  • Alto tráfico, aplicaciones escalables.
  • Aplicaciones móviles que tienen que hablar con la plataforma y la base de datos de la plataforma, sin tener que hacer muchos análisis de datos
  • Construir aplicaciones en red
  • Aplicaciones que necesitan hablar con el back-end muy a menudo.

En el frente de Mobile, las empresas de mayor audiencia han confiado en Node.js para sus soluciones móviles. Echa un vistazo por qué?

LinkedIn es un usuario destacado. Toda su pila móvil está construida en Node.js. Pasaron de ejecutar 15 servidores con 15 instancias en cada máquina física, a solo 4 instancias, ¡que pueden manejar el doble del tráfico!

eBay lanzó ql.io, un lenguaje de consulta web para las API HTTP, que utiliza Node.js como la pila de tiempo de ejecución. ¡Pudieron sintonizar una estación de trabajo Ubuntu con calidad de desarrollador para manejar más de 120,000 conexiones activas por proceso node.js, con cada conexión consumiendo alrededor de 2kB de memoria!

Walmart rediseñó su aplicación móvil para usar Node.js e impulsó su procesamiento de JavaScript al servidor.

Lea más en: http://www.pixelatingbits.com/a-closer-look-at-mobile-app-development-with-node-js/


Razones para usar NodeJS:

  • Funciona con Javascript, por lo que puede usar el mismo idioma en el servidor y el cliente, e incluso compartir un código entre ellos (por ejemplo, para validar el formulario o para mostrar vistas en cualquier extremo).

  • El sistema controlado por eventos de un single-threaded es fast incluso cuando maneja muchas solicitudes a la vez, y también es simple, en comparación con los marcos tradicionales de Java o ROR de múltiples hilos.

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

  • Se ha convertido en el entorno estándar de facto en el que se ejecutan las herramientas relacionadas con Javascript y otras herramientas relacionadas con la web , incluidos los ejecutores de tareas, minificadores, embellecedores, linters, preprocesadores, empaquetadores y procesadores de análisis.

  • Parece bastante adecuado para la creación de prototipos, el desarrollo ágil y la rápida iteración de productos .

Razones para no usar NodeJS:

  • Ejecuta Javascript, que no tiene verificación de tipo de tiempo de compilación. Para sistemas grandes, complejos , críticos para la seguridad , o proyectos que incluyen la colaboración entre diferentes organizaciones, un lenguaje que fomenta las interfaces contractuales y proporciona una verificación de tipos estática puede ahorrarle tiempo de depuración (y explosiones ) a largo plazo. (Aunque la JVM está bloqueada con un null , use Haskell para sus reactores nucleares).

  • Sumado a eso, muchos de los paquetes en NPM son un poco crudos , y aún están en rápido desarrollo. Algunas bibliotecas para marcos más antiguos se han sometido a una década de pruebas y correcciones de errores, y ahora son muy estables . Npmjs.org no tiene ningún mecanismo para calificar los paquetes , lo que ha llevado a una proliferación de paquetes que hacen más o menos lo mismo, de los cuales ya no se mantiene un gran porcentaje.

  • Callback anidado infierno. (Por supuesto que hay 20 soluciones diferentes para esto ...)

  • El grupo cada vez mayor de paquetes puede hacer que un proyecto de NodeJS parezca radicalmente diferente del siguiente. Existe una gran diversidad de implementaciones debido a la gran cantidad de opciones disponibles (por ejemplo, Express / Sails.js / Meteor / Derby ). A veces, esto puede hacer que sea más difícil para un nuevo desarrollador saltar a un proyecto Node. Contrasta eso con un desarrollador de Rails que se une a un proyecto existente: debería poder familiarizarse con la aplicación bastante rápido, ya que se recomienda que todas las aplicaciones de Rails usen una 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ñas como para hacer con Node.js que hay una pregunta de con más de 80 votos a favor. No hay una forma sencilla de leer un registro a la vez de 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 demostrable. Esperemos que eventualmente podamos fusionar lo mejor de ambos mundos. Estoy ansioso por ver qué reemplazará a Node en el futuro ... :)


Una cosa más que proporciona el nodo es la capacidad de crear múltiples instancias v8 de nodo utilizando el proceso hijo del nodo ( childProcess.fork() cada uno de los cuales requiere 10 MB de memoria según los documentos) sobre la marcha, por lo que no afecta al proceso principal que ejecuta el servidor. Por lo tanto, la descarga de un trabajo en segundo plano que requiere una gran carga del servidor se convierte en un juego de niños y podemos matarlos fácilmente cuando sea necesario.

He estado usando mucho los nodos y en la mayoría de las aplicaciones que creamos, requieren conexiones de servidor al mismo tiempo, por lo tanto, un gran tráfico de red. Frameworks como Express.js y los nuevos Koajs (que eliminaron el infierno de devolución de llamada) han hecho que trabajar en nodo sea aún más fácil.


Nodo mejor para el manejo de solicitudes concurrentes -

Entonces, comencemos con una historia. Desde los últimos 2 años, estoy trabajando en JavaScript y desarrollando web front end y lo estoy disfrutando. Los usuarios de back-end nos proporcionan algunas API escritas en Java, python (no nos importa) y simplemente escribimos una llamada AJAX, obtenemos nuestros datos y ¡adivinen qué! hemos terminado. Pero en realidad no es tan fácil. Si los datos que estamos obteniendo no son correctos o si hay algún error del servidor, nos quedamos atascados y tenemos que contactar a nuestros empleados de back-end por correo o chatear (a veces también en WhatsApp :)). no es genial ¿Qué pasa si escribimos nuestras API's en JavaScript y las llamamos desde nuestra interfaz? Sí, eso es bastante bueno porque si nos enfrentamos a cualquier problema en la API podemos verlo. Adivina qué ! Puedes hacer esto ahora, ¿cómo? - Node está ahí para ti.

Ok estuvo de acuerdo en que puedes escribir tu API en JavaScript, pero ¿qué pasa si estoy de acuerdo con el problema anterior? ¿Tienes alguna otra razón para usar el nodo para la API de descanso?

Así que aquí comienza la magia. Sí, tengo otras razones para usar el nodo para nuestras API.

Regresemos a nuestro sistema tradicional de API de descanso que se basa en la operación de bloqueo o en la hebra. Supongamos que se producen dos solicitudes simultáneas (r1 y r2), cada una de ellas requiere la operación de la base de datos. Así que en el sistema tradicional lo que sucederá:

1. Modo de espera: nuestro servidor comienza a atender la solicitud de r1 y espera la respuesta de la consulta. después de completar r1 , el servidor comienza a servir r2 y lo hace de la misma manera. Así que esperar no es una buena idea porque no tenemos mucho tiempo.

2. Modo de subprocesos : nuestro servidor creará dos subprocesos para las solicitudes r1 y r2 y cumplirá su propósito después de consultar la base de datos, por lo que se enfría de manera rápida. Pero consume mucha memoria porque puede ver que iniciamos dos subprocesos. El problema también aumenta cuando ambas solicitudes realizan consultas. Los mismos datos entonces tienes que lidiar con el tipo de interbloqueo. Así que es mejor que esperar, pero todavía hay problemas.

Ahora aquí está, cómo nodo lo hará:

3. Nodeway: cuando la misma solicitud simultánea entra en el nodo, entonces registrará un evento con su devolución de llamada y avanzará, no esperará la respuesta de la consulta para una solicitud en particular. Por lo tanto, cuando la solicitud de r1 produce, se produce el bucle de eventos del nodo (sí, hay un evento bucle en el nodo que sirve para este propósito.) registre un evento con su función de devolución de llamada y avance para atender la petición r2 y registre de manera similar su evento con su devolución de llamada. Cada vez que una consulta finaliza, activa su evento correspondiente y ejecuta su devolución de llamada hasta su finalización sin ser interrumpida.

Así que no hay que esperar, no hay subprocesos, no hay consumo de memoria, sí, es una manera inteligente de servir la API de descanso.


Puedo compartir algunos puntos donde y por qué usar el nodo js.

  1. Para aplicaciones en tiempo real como chat, edición colaborativa, mejor vamos con nodejs, ya que es la base de eventos donde se activan eventos y datos para los clientes desde el servidor.
  2. Simple y fácil de entender ya que es la base javascript donde la mayoría de las personas tienen una idea.
  3. La mayoría de las aplicaciones web actuales se dirigen hacia js y backbone angulares, con nodo es fácil interactuar con el código del lado del cliente ya que ambos usarán datos json.
  4. Muchos complementos disponibles.

Inconvenientes: -

  1. El nodo admitirá la mayoría de las bases de datos, pero lo mejor es mongodb, que no admite uniones complejas y otras.
  2. Los desarrolladores de errores de compilación ... deben manejar todas y cada una de las excepciones de otra manera si cualquier aplicación de acuerdo de error dejará de funcionar donde otra vez tenemos que ir y comenzar manualmente o con cualquier herramienta de automatización.

Conclusión: - Es mejor utilizar Nodejs para aplicaciones simples y en tiempo real ... si tiene una lógica de negocios muy grande y una funcionalidad compleja es mejor que no use nodejs. Si desea crear una aplicación junto con el chat y cualquier funcionalidad de colaboración, el nodo puede usarse en partes específicas y el resto debe ir con su tecnología de conveniencia.


Si su aplicación se basa principalmente en aplicaciones web u otros canales de io, proporcione o tome una interfaz de usuario, node.js puede ser una buena elección para usted, especialmente si desea exprimir la mayor escalabilidad o, si su idioma principal es javascript (o transpilers de javascript de tipo). Si construyes microservicios, node.js también está bien. Node.js también es adecuado para cualquier proyecto que sea pequeño o simple.

Su principal argumento de venta es que permite que los front-end se responsabilicen de las cosas de back-end en lugar de la división típica. Otro punto de venta justificable es si su fuerza de trabajo está orientada a javascript para comenzar.

Sin embargo, más allá de cierto punto, no puede escalar su código sin terribles trucos para forzar la modularidad, la legibilidad y el control de flujo. Sin embargo, a algunas personas les gustan esos trucos, especialmente provenientes de un fondo de javascript impulsado por eventos, parecen familiares o perdonables.

En particular, cuando su aplicación necesita realizar flujos sincrónicos, comienza a sangrar sobre soluciones a medio cocer que le ralentizan considerablemente en términos de su proceso de desarrollo. Si tiene partes de computación intensivas en su aplicación, pise con precaución seleccionando (solo) node.js. Tal vez Koajs u otras novedades alivien esos aspectos espinosos originales, en comparación con cuando originalmente usé node.js o escribí esto.





web-applications