Soy nuevo en este tipo de cosas, pero últimamente he estado escuchando mucho sobre lo bueno que es Node.js. Teniendo en cuenta cuánto me encanta 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 y 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 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
- hablemos con MySQL
Algunas de las fuentes que he encontrado son:
- Inmersión en Node.js - Introducción e instalación
- Entendiendo NodeJS
- Nodo por ejemplo ( Archive.is )
- Hagamos una aplicación web: NodePad
Teniendo en cuenta que Node.js se puede ejecutar casi de forma inmediata en las instancias EC2 de Amazon , estoy tratando de entender qué tipo de problemas requieren Node.js en lugar de cualquiera de los poderosos reyes como PHP , Python y Ruby. . Entiendo que realmente depende de la experiencia que uno tenga en un idioma, pero mi pregunta se ubica más en la categoría general de: ¿Cuándo usar un marco particular y para qué tipo de problemas es particularmente adecuado?
fuente
Respuestas:
Hiciste un gran trabajo al resumir lo increíble de Node.js. Creo que Node.js es especialmente adecuado para aplicaciones en las que le gustaría mantener una conexión persistente desde el navegador hasta el servidor. Usando una técnica conocida como "sondeo largo" , puede escribir una aplicación que envíe actualizaciones al usuario en tiempo real. Hacer encuestas largas 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 consume un proceso de servidor. Esta situación equivale a un ataque de tarpit . Cuando usa algo como Node.js, el servidor no necesita mantener hilos separados para cada conexión abierta.
Esto significa que puede crear una aplicación de chat basada en navegador en Node.js que casi no requiere recursos del sistema para atender a una gran cantidad de clientes. Cada vez que desee hacer este tipo de sondeo largo, Node.js es una gran opción.
Vale la pena mencionar que Ruby y Python tienen herramientas para hacer este tipo de cosas ( eventmachine y twisted , respectivamente), pero que Node.js lo hace excepcionalmente bien, y desde cero. JavaScript está excepcionalmente bien situado para un modelo de concurrencia basado en devolución de llamada, y se destaca aquí. Además, ser capaz de 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. El marco Meteor lo hace 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 en cómo va a reestructurar sus datos, por lo que el código que se ejecuta en el navegador puede fácilmente manipúlelo y páselo de vuelta.
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 with Pyramid .
fuente
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 (¿robot o sensor?) Hace con la aplicación necesita ser visto por otros usuarios de inmediato, 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 aún más 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 usará sockets web o incluso Flash si están disponibles.
Pero también debo mencionar que cualquier situación en la que el código podría bloquearse debido a hilos puede abordarse mejor con Node.js. O cualquier situación en la que necesite que la aplicación esté basada en eventos.
Además, Ryan Dahl dijo en una charla que una vez asistí que los puntos de referencia de Node.js rivalizan estrechamente con Nginx para las solicitudes HTTP antiguas. Por lo tanto, si compilamos con Node.js, podemos servir nuestros recursos normales de manera bastante efectiva, y cuando necesitamos el material impulsado por eventos, está listo para manejarlo.
Además, todo es JavaScript todo el tiempo. Lingua Franca en toda la pila.
fuente
.js
archivos de alguna manera. Verde para el lado del cliente, azul para el lado del servidor. Me sigo "perdiendo" a mí mismo.Razones para usar NodeJS:
Ejecuta Javascript, por lo que puede usar el mismo idioma 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 visualizar vistas en cualquier extremo).
El sistema controlado por eventos de un solo subproceso es rápido, incluso cuando se manejan muchas solicitudes a la vez, y también simple, en comparación con los marcos tradicionales de Java o ROR de subprocesos múltiples .
El conjunto cada vez mayor de paquetes accesibles a través de NPM , incluidas las bibliotecas / módulos del lado del cliente y del servidor, así como las herramientas de línea de comandos para el desarrollo web. La mayoría de estos están convenientemente alojados 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 una bifurcación fácil.
Se ha convertido en el entorno estándar de facto en el que se ejecutan herramientas relacionadas con Javascript y otras herramientas relacionadas con la web , incluidos los corredores de tareas, minificadores, embellecedores, linters, preprocesadores, paquetes y procesadores analíticos.
Parece bastante adecuado para la creación de prototipos, el desarrollo ágil y la rápida iteración del producto .
Razones para no usar NodeJS:
Ejecuta Javascript, que no tiene verificación de tipo en tiempo de compilación. Para sistemas o proyectos grandes, complejos y críticos para la seguridad , incluida la colaboración entre diferentes organizaciones, un lenguaje que fomente las interfaces contractuales y proporcione una verificación de tipo estático puede ahorrarle tiempo de depuración (y explosiones ) a largo plazo. (Aunque la JVM está atascada
null
, utilice 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 frameworks más antiguos han pasado una década de pruebas y corrección de errores, y ahora son muy estables . Npmjs.org no tiene ningún 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.
Devolución de llamada anidada infierno. (Por supuesto, hay 20 soluciones diferentes para esto ...)
El grupo cada vez mayor de paquetes puede hacer que un proyecto NodeJS parezca radicalmente diferente del siguiente. Existe una gran diversidad en las implementaciones debido a la gran cantidad de opciones disponibles (por ejemplo, Express / Sails.js / Meteor / Derby ). Esto a veces puede hacer que sea más difícil para un nuevo desarrollador participar en un proyecto Node. Compare eso con un desarrollador de Rails que se une a un proyecto existente: debería poder familiarizarse con la aplicación con bastante rapidez, porque se alienta a todas las aplicaciones de Rails a usar 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 para hacer con Node.js que hay una pregunta de StackOverflow con más de 80 votos a favor. No hay una manera simple 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 demostrable. Esperemos que finalmente podamos fusionar lo mejor de ambos mundos. Estoy ansioso por ver qué reemplazará a Node en el futuro ... :)
fuente
npm search
ynpm show
le mostrará la fecha del último lanzamiento de un paquete.Para abreviar:
Node.js es muy adecuado para aplicaciones que tienen muchas conexiones concurrentes y cada solicitud solo necesita muy pocos ciclos de CPU, porque el bucle de eventos (con todos los demás clientes) se bloquea durante la ejecución de una función.
Un buen artículo sobre el bucle de eventos en Node.js es el blog de tecnología de Mixu: Comprender el ciclo de eventos Node.js .
fuente
Tengo un ejemplo del mundo real en el que he usado Node.js. La compañía donde trabajo tiene un cliente que quiere tener un sitio web HTML estático simple. Este sitio web es para vender un artículo usando PayPal y el cliente también quería tener un contador que muestre la cantidad de artículos vendidos. El cliente esperaba tener una gran cantidad de visitantes a este sitio web. Decidí hacer el contador usando Node.js y el framework Express.js .
La aplicación Node.js era simple. Obtenga la cantidad de artículos vendidos de una base de datos Redis , aumente el contador cuando se venda el artículo y sirva el valor del contador a los usuarios a través de la API .
Algunas razones por las que elegí usar Node.js en este caso
En este caso, Node.js fue una elección increíble.
fuente
Las razones más importantes para comenzar su próximo proyecto con Node ...
Que esperar ...
¿Quién lo usa?
fuente
async
/await
por lo que ahora podemos implementar un código de nodo asíncrono mucho más limpio que también es compatible contry
/ tradicionalcatch
. En 2016/17, los codificadores JS están cambiando a ES6.No hay nada como Silver Bullet. Todo viene con algún costo asociado. Es como si comes alimentos grasos, comprometerás tu 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 sus alimentos. De la misma manera, Node.js considera que se usa en un escenario específico. Si su aplicación no se ajusta a ese escenario, no debe considerarla para el desarrollo de su aplicación. Solo estoy poniendo mi pensamiento en el mismo:
Cuando usar Node.JS
Cuándo NO usar Node.JS
Consideración de escalabilidad con Node.JS
Nodo.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 polygot y mejores consideraciones de escalabilidad.
fuente
fork
. Ver stackoverflow.com/questions/9546225/… . Node maneja múltiples núcleos muy bien con elcluster
módulo. nodejs.org/api/cluster.htmlOtra 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.
fuente
Mi pieza: nodejs es ideal para crear sistemas en tiempo real como análisis, aplicaciones de chat, apis, servidores de anuncios, etc. ¡Diablos, hice mi primera aplicación de chat usando nodejs y socket.io en menos de 2 horas y eso también durante la semana de exámenes!
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 pone énfasis en la concurrencia y la velocidad.
Cuando no usar
Es un servidor web muy versátil, por lo que puede usarlo donde quiera, pero probablemente no en estos lugares.
Tenga en cuenta que solo estoy jugando. Para servidores de archivos estáticos, apache es mejor principalmente porque está ampliamente disponible. La comunidad de 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 en casi todas partes si tiene su propia opción de alojamiento.
fuente
Se puede usar donde
En el frente móvil, las compañías de horario estelar han confiado en Node.js para sus soluciones móviles. Mira 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 API HTTP, que utiliza Node.js como la pila de tiempo de ejecución. Pudieron sintonizar una estación de trabajo Ubuntu de calidad de desarrollador regular para manejar más de 120,000 conexiones activas por proceso node.js, ¡y cada conexión consume aproximadamente 2kB de memoria!
Walmart rediseñó su aplicación móvil para usar Node.js y llevó su procesamiento de JavaScript al servidor.
Lea más en: http://www.pixelatingbits.com/a-closer-look-at-mobile-app-development-with-node-js/
fuente
Nodo mejor para el manejo simultáneo de solicitudes:
Entonces, comencemos con una historia. Desde los últimos 2 años estoy trabajando en JavaScript y desarrollando front-end web y lo estoy disfrutando. Los chicos de back-end nos proporcionan algunas API escritas en Java, python (no nos importa) y simplemente escribimos una llamada AJAX, ¡obtenemos nuestros datos y adivinamos qué! hemos terminado. Pero en realidad no es tan fácil, si los datos que obtenemos no son correctos o hay algún error en el servidor, entonces nos quedamos atrapados y tenemos que contactar a nuestros chicos de back-end por correo o chat (a veces también en WhatsApp :)). No es genial. ¿Qué sucede si escribimos nuestras API en JavaScript y las llamamos desde nuestro front-end? Sí, eso es bastante bueno porque si enfrentamos algún problema en la API podemos investigarlo. Adivina qué ! puedes hacer esto ahora, ¿cómo? - Node está ahí para ti.
Ok acordó que puede escribir su API en JavaScript, pero qué pasa si estoy de acuerdo con el problema anterior. ¿Tiene 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.
Volvamos a nuestro sistema tradicional de API de descanso, que se basa en la operación de bloqueo o el enhebrado. Supongamos que se producen dos solicitudes simultáneas (r1 y r2), cada una de ellas requiere la operación de la base de datos. Entonces, en el sistema tradicional, lo que sucederá:
1. Modo de espera: nuestro servidor comienza a atender la
r1
solicitud y espera la respuesta de la consulta. Una vez completador1
, el servidor comienza a servirr2
y lo hace de la misma manera. Entonces esperar no es una buena idea porque no tenemos tanto tiempo.2. Forma de subprocesamiento : nuestro servidor creará dos subprocesos para ambas solicitudes
r1
y cumplirár2
su propósito después de consultar la base de datos, por lo que es genial, es rápido. Pero consume mucha memoria porque puede ver que comenzamos dos subprocesos y el problema aumenta cuando ambas solicitudes consultan los mismos datos entonces tienes que lidiar con el tipo de problemas de punto muerto. Así que es mejor que esperar, pero todavía hay problemas.Ahora aquí está, cómo lo hará el nodo:
3. Nodeway: cuando llega la misma solicitud concurrente en el nodo, registrará un evento con su devolución de llamada y avanzará, no esperará la respuesta de la consulta para una solicitud en particular.
r1
Entonces, cuando llegue la solicitud, el bucle de eventos del nodo (sí, hay un bucle de eventos 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 lar2
solicitud y, de manera similar, registre su evento con su devolución de llamada. Cada vez que finaliza una consulta, activa su evento correspondiente y ejecuta su devolución de llamada hasta su finalización sin ser interrumpido.Por lo tanto, sin esperas, sin subprocesos, sin consumo de memoria, sí, esta es una forma de nodo para servir API de descanso.
fuente
Mi otra razón para elegir Node.js para un nuevo proyecto es:
Ser capaz de hacer un desarrollo basado en la nube pura
He usado Cloud9 IDE por un tiempo y ahora no puedo imaginarlo 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 el hogar), luego realice el pago en otra computadora (como en el lugar de trabajo).
Por supuesto, puede haber IDE basado en la nube para otros idiomas o plataformas (Cloud 9 IDE 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í.
fuente
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 el proceso principal que ejecuta el servidor. Por lo tanto, descargar 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 el nodo y en la mayoría de las aplicaciones que creamos, requieren conexiones de servidor al mismo tiempo, por lo tanto, un tráfico de red pesado. Los marcos como Express.js y los nuevos Koajs (que eliminaron el infierno de devolución de llamadas) han hecho que trabajar en el nodo sea aún más fácil.
fuente
Colocación de calzoncillos de amianto ...
Ayer mi título con Packt Publications, Programación reactiva con JavaScript . No es realmente un título centrado en Node.js; Los primeros capítulos están destinados a cubrir la teoría, y los capítulos posteriores con mucho código cubren la práctica. Debido a que realmente no pensé que sería apropiado no darles a los lectores un servidor web, Node.js parecía, con mucho, la opción obvia. El caso se cerró incluso antes de abrirlo.
Podría haber dado una visión muy optimista de mi experiencia con Node.js. En cambio, fui honesto sobre los puntos buenos y malos que encontré.
Permítanme incluir algunas citas que son relevantes aquí:
El Apéndice, que realmente no quería después del aumento creciente en los últimos capítulos y la conclusión, habla sobre lo que pude encontrar en el ecosistema y proporcionó una solución para el literalismo imbécil:
Intercambiando dos comentarios en orden:
fuente
Si su aplicación ata principalmente apis web u otros canales io, brinde o tome una interfaz de usuario, node.js puede ser una elección justa para usted, especialmente si desea obtener la mayor escalabilidad o, si es su idioma principal en la vida es javascript (o transpiladores de javascript). Si crea microservicios, node.js también está bien. Node.js también es adecuado para cualquier proyecto que sea pequeño o simple.
Su principal punto de venta es que permite a los candidatos asumir la responsabilidad de las cosas de fondo en lugar de la división típica. Otro punto de venta justificable es si su fuerza laboral está orientada a JavaScript para comenzar.
Sin embargo, más allá de cierto punto, no puede escalar su código sin hacks terribles para forzar la modularidad, la legibilidad y el control de flujo. Sin embargo, a algunas personas les gustan esos hacks, especialmente porque provienen de un fondo de JavaScript impulsado por eventos, parecen familiares o perdonables.
En particular, cuando su aplicación necesita realizar flujos síncronos, comienza a sangrar sobre soluciones a medio cocer que lo ralentizan considerablemente en términos de su proceso de desarrollo. Si tiene partes de cálculo intensivo en su aplicación, pise con precaución seleccionando (solo) node.js. Tal vez http://koajs.com/ u otras novedades alivien esos aspectos originalmente espinosos, en comparación con cuando originalmente usé node.js o escribí esto.
fuente
Puedo compartir algunos puntos donde y por qué usar el nodo js.
Inconvenientes: -
Conclusión: - Nodejs es mejor usarlo para aplicaciones simples y en tiempo real ... si tiene una lógica de negocios muy grande y una funcionalidad compleja, no debería usar nodejs. Si desea crear una aplicación junto con el chat y cualquier funcionalidad colaborativa ... el nodo se puede utilizar en partes específicas y permanecer con su tecnología conveniente.
fuente
Node es ideal para prototipos rápidos, pero nunca lo volvería a usar para nada complejo. Pasé 20 años desarrollando una relación con un compilador y seguro que lo extraño.
El nodo es especialmente doloroso para mantener el código que no ha visitado por un tiempo. La información de tipo y la detección de errores en tiempo de compilación son BUENAS COSAS. ¿Por qué tirar todo eso? ¿Para qué? Y dang, cuando algo va hacia el sur, la pila de rastros a menudo es completamente inútil.
fuente