¿Cómo decidir cuándo usar Node.js?
Frecuentes
Visto 550,089 equipos
2194
Soy nuevo en este tipo de cosas, pero últimamente he escuchado mucho sobre lo bueno Node.js es. Teniendo en cuenta lo mucho que 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 algún contenido, lo archiva.
De todos los deberes 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 JavaScript V8
- es muy bueno cuando necesitas hacer varias cosas al mismo tiempo
- está basado en eventos, por lo que todo lo maravilloso Ajax-Cosas parecidas 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 con las que me he encontrado son:
- Buceando en Node.js - Introducción e instalación
- Entendiendo NodeJS
- Nodo por ejemplo (Archivo es)
- Hagamos una aplicación web: NodePad
Teniendo en cuenta que Node.js se puede ejecutar casi desde el primer momento en EC2 de Amazon instancias, estoy tratando de entender qué tipo de problemas requieren Node.js en comparación con cualquiera de los poderosos reyes que existen como PHP, Python e Rubí. Entiendo que realmente depende de la experiencia que uno tenga en un idioma, pero mi pregunta cae más en la categoría general de: ¿Cuándo usar un marco en particular y para qué tipo de problemas es particularmente adecuado?
17 Respuestas
1354
Hiciste un gran trabajo al resumir lo asombroso de Node.js. Mi sensación es 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. Realizando encuestas largas sobre muchos de los gigantes de la web, como Ruby on Rails or Django, crearía una carga inmensa en el servidor, porque cada cliente activo consume un proceso del servidor. Esta situación equivale a una pozo de brea ataque. Cuando usa algo como Node.js, el servidor no necesita mantener subprocesos separados para cada conexión abierta.
Esto significa que puede crear un aplicación de chat basada en navegador en Node.js que casi no requiere recursos del sistema para servir a una gran cantidad de clientes. Siempre que desee realizar este tipo de sondeo largo, Node.js es una excelente opción.
Vale la pena mencionar que Ruby y Python tienen herramientas para hacer este tipo de cosas (máquina de eventos e retorcido, 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 excelente para situaciones en las que reutilizará una gran cantidad de código en la brecha cliente / servidor. La Marco de meteoritos 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 en cómo vas a reestructurar tus 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 encuestas largas, que resulta muy fácil de configurar con un poco de ayuda de gevent: TicTacToe y Long Polling con Pyramid.
contestado el 14 de mayo de 14 a las 16:05
Sí, creo que es muy importante pensar que 'node.js es especialmente adecuado para aplicaciones que requieren una conexión persistente desde el navegador hasta el servidor. - como programas de chat o juegos interactivos 'Si uno solo está construyendo una aplicación que no necesariamente necesita comunicación entre el usuario y el servidor, desarrollar con otros marcos estaría bien y tomaría mucho menos tiempo. - user482594
Gracias por esto ... Grandes preguntas y respuestas ;-) También lo pensaría en términos de dominar una gran tecnología para el desarrollo frontal y posterior en algunas diferentes;) - agotado
¿Por qué utilizar el sondeo largo? ¿Qué pasó con el futuro y tomas? - hitautodestruct
Mi respuesta corta es el proceso en segundo plano. La solicitud y la respuesta (incluida la API de descanso) se pueden lograr con cualquier otro idioma y servidor. Entonces, para aquellos que estén pensando en convertir sus proyectos web en node. ¡Piensa de nuevo que es lo mismo! Use el nodo como un proceso en segundo plano, como leer correos electrónicos con imap, procesamiento de imágenes, cargar archivos en la nube o cualquier proceso largo o interminable que esté principalmente orientado a eventos ... - Vikas
409
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 en la que lo que un usuario (¿robot? ¿O sensor?) Haga con la aplicación deba ser visto por otros usuarios de inmediato. sin actualizar la página.
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 recurrirá al sondeo largo como el peor de los casos y, en su lugar, utilizará 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é impulsada 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 solicitudes HTTP antiguas regulares. Entonces, si compilamos con Node.js, podemos servir nuestros recursos normales de manera bastante efectiva, 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.
Respondido 21 Feb 11, 06:02
Solo una observación de alguien que cambia entre .Net y Node. Los diferentes idiomas para diferentes áreas del sistema ayudan mucho cuando se cambia de contexto. Cuando miro Javascript, estoy trabajando en el cliente, C # significa el servidor de aplicaciones, SQL = base de datos. Trabajando en Javascript en todo momento, me he encontrado confundiendo las capas, o simplemente tomando más tiempo para cambiar de contexto. Es probable que esto sea un artefacto de trabajar en la pila .NET todo el día y asentir por la noche, pero marca la diferencia. - Michael Blackburn
Curiosamente, la práctica de personas transculturales que cambian de dialecto cuando se mueven entre la cultura principal y la nativa se llama "cambio de código". - Michael Blackburn
El otro día estaba pensando en cómo podría hacer para asignar diferentes colores a mis diferentes .js
archivos de alguna manera. Verde para el lado del cliente, azul para el lado del servidor. Yo mismo sigo "perdiéndome". - AJB
209
Razones para usar NodeJS:
Ejecuta Javascript, por lo que puede usar 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 representar vistas en cualquier extremo).
LA de un solo hilo El 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 tradicionales subprocesos múltiples Java o marcos ROR.
La piscina cada vez mayor 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 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 de problemas estandarizados y fácil bifurcación.
Se ha convertido en el entorno estándar de facto en el que ejecutar Herramientas relacionadas con Javascript así como de otros herramientas relacionadas con la web, incluidos los corredores de tareas, minificadores, embellecedores, linters, preprocesadores, agrupadores y procesadores de análisis.
Parece bastante adecuado para la creación de prototipos, el desarrollo ágil y iteración rápida del producto.
Motivos no para usar NodeJS:
Ejecuta Javascript, que no tiene verificación de tipo en tiempo de compilación. Para grandes, complejos seguridad crítica sistemas o proyectos que incluyen la colaboración entre diferentes organizaciones, un lenguaje que fomenta interfaces contractuales y proporciona comprobación de tipo estático puede ahorrarle algo de tiempo de depuración (y explosiones) a largo plazo. (Aunque la JVM está bloqueada con
null
, así que utilice Haskell para sus reactores nucleares).Sumado a eso, muchos de los paquetes en NPM son un poco crudo, y todavía en rápido desarrollo. Algunas bibliotecas para marcos antiguos se han sometido a una década de pruebas y corrección de errores, y son muy estable por ahora. Npmjs.org no tiene ningún mecanismo para calificar paquetes, lo que ha provocado una proliferación de paquetes que hacen más o menos lo mismo, de los cuales un gran porcentaje ya no se mantiene.
Infierno de devolución de llamada anidado. (Por supuesto que hay 20 soluciones diferentes a esto...)
El creciente grupo de paquetes puede hacer que aparezca un proyecto de 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/meteoro/Derby). A veces, esto puede dificultar que un nuevo desarrollador se involucre en un proyecto de Node. Contrasta eso con un Rieles desarrollador que se une a un proyecto existente: debería poder familiarizarse con la aplicación con bastante rapidez, porque se anima a todas las aplicaciones de Rails a utilizar 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 raro como para hacer con Node.js que hay una pregunta de StackOverflow sobre eso con más de 80 votos a favor. Hay 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 ... :)
contestado el 23 de mayo de 17 a las 11:05
@nane Sí, creo que pueden abordar ese problema, sin embargo, entonces debes limitarte a ti mismo a usar solo bibliotecas escritas en lenguajes de seguridad tipográfica, o aceptar que no todo tu código base está tipado estáticamente. Pero un argumento es: ya que deberías escribir buenas pruebas para su código independientemente del idioma, entonces su el nivel de confianza debe ser igual incluso para código escrito dinámicamente. Si aceptamos ese argumento, las ventajas de la tipificación fuerte se reducen a ayudar en el tiempo de desarrollo / depuración, la demostrabilidad y optimización. - joeytwiddle
@kervin, estoy de acuerdo en que algunos puntos de referencia serían geniales, pero me decepcionó lo que pude encontrar en línea. Algunos han argumentado que el rendimiento de .NET es comparable a Node's, pero que es crucial lo que estás haciendo en realidad. Node puede ser excelente para entregar pequeños mensajes con muchas conexiones simultáneas, pero no tan bueno para cálculos matemáticos pesados. Una buena comparación de rendimiento necesitaría probar una variedad de situaciones. - joeytwiddle
@joeytwiddle, ¿no ayudarían cosas como Typescript a Node.js cuando se trata de manejar programas complejos más grandes y verificación de tipo estática? - CodeMonkey
@joeytwiddle por lo que vale, puedes usar todavíamantenido.com para determinar si se mantiene o no un paquete npm (ya que la mayoría están en github). Además, npm search
e npm show
le mostrará la fecha del último lanzamiento de un paquete. - Dan
Al comparar rieles con nodo, confunde una plataforma con un marco. Rails es un marco para Ruby al igual que Sails y meteor son marcos para Javascript. - BonsaiRoble
206
Para hacerlo breve:
Node.
Un buen artículo sobre el ciclo de eventos en Node.js es Blog de tecnología de Mixu: Entender el ciclo de eventos de node.js.
respondido 14 mar '14, 18:03
127
Tengo un ejemplo del mundo real en el que he usado Node.js. La empresa en la que trabajo consiguió un cliente que quería 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 mostrara la cantidad de artículos vendidos. El cliente esperaba tener una gran cantidad de visitantes en este sitio web. Decidí hacer el contador usando Node.js y el Express.js marco de referencia.
La aplicación Node.js fue simple. Obtenga la cantidad de artículos vendidos de un Redis base de datos, aumente el contador cuando se vende el artículo 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
- Es muy ligero y rápido. Ha habido más de 200000 visitas en este sitio web en tres semanas y los recursos mínimos del servidor han podido manejarlo todo.
- El contador es muy fácil de hacer en tiempo real.
- Node.js fue fácil de configurar.
- 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.
respondido 14 mar '14, 18:03
¿Cómo organizas algo así? ¿Tienes que configurar nodejs en el servidor de producción entonces? ¿En linux? - miguel stevens
Hay algunas PaaS como nodejitsu y Heroku. O puede configurar nodejs en una caja de Linux, es decir, desde amazon ec2. ver: lauradhamilton.com/… - Harry joven
200,000 visitas en 1,814,400 segundos. No es relevante en absoluto. Incluso bash podría atender tantas solicitudes en el servidor más lento. Servidor Scratch. VM más lenta. - Tiberiu-Ionus Stan
105
Las razones más importantes para comenzar su próximo proyecto usando Node ...
- Todos los tipos más geniales están en eso ... así que debe: se Divertido.
- Puedes pasar el rato en la nevera y tener muchas aventuras de Node de las que presumir.
- Eres un pionero en lo que respecta a los costos de alojamiento en la nube.
- He hecho eso con Rails
- Odias las implementaciones de IIS
- Su antiguo trabajo de TI se está volviendo bastante aburrido y desearía estar en una nueva y brillante Start Up.
Que esperar ...
- Se sentirá seguro y protegido con Express sin todo el software de relleno del servidor que nunca necesitó.
- Corre como un cohete y escala bien.
- Lo sueñas. Lo instalaste. El repositorio de paquetes de nodos npmjs.org es el ecosistema de bibliotecas de código abierto más grande del mundo.
- Tu cerebro se deformará en el tiempo en la tierra de las devoluciones de llamada anidadas ...
- ... hasta que aprendas a mantener tu Promesas.
- Secuela e Pasaporte son sus nuevos amigos de API.
- La depuración en su mayoría de código asíncrono obtendrá umm ... interesante .
- Es hora de que todos los noders dominen Mecanografiado.
¿Quién lo usa?
- PayPal, Netflix, Walmart, LinkedIn, Groupon, Uber, GoDaddy, Dow Jones
- He aquí por qué ellos cambiado a nodo.
Respondido 16 ago 16, 11:08
Sí, podría haber respondido a esta pregunta de la manera tradicional. Creo que estoy calificado para hacerlo, pero la mayor parte ya se ha dicho y pensé que un poco de diversión alegre rompería la monotonía. Aporto regularmente respuestas técnicas a otras preguntas. - Tony O'Hagan
Las devoluciones de llamada anidadas se pueden evitar utilizando generadores ES6 para código asíncrono - refactorizar
@CleanCrispCode: ¡Sí, de hecho! ES6 ha adoptado el estilo C # async
/await
así que ahora podemos implementar un código de nodo asíncrono mucho más limpio que también sea compatible con try
/catch
. En 2016/17, los codificadores JS cambiarán a ES6. - Tony O'Hagan
diez mil veces este "Se sentirá seguro y protegido con Express sin todo el software de relleno del servidor que nunca necesitó" - simone poggi
60
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 su comida. De la misma manera que Node.js considera que se usa en un escenario específico. Si su aplicación no encaja en ese escenario, no debe considerarla para el desarrollo de su aplicación. Solo estoy pensando en lo mismo:
Cuándo usar Node.JS
- Si el código del lado del 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 consume muchos ciclos de CPU.
- Si tiene experiencia en Javascript y se siente cómodo escribiendo código de un solo subproceso como JS del lado del cliente.
Cuándo NO usar Node.JS
- La solicitud de su servidor depende de un trabajo / algoritmo que consuma mucho CPU.
Consideración de escalabilidad con Node.JS
- Node.JS en sí no utiliza todo el núcleo del sistema subyacente y es de un solo subproceso de forma predeterminada, debe escribir la lógica por su cuenta para utilizar el procesador de múltiples núcleos y hacerlo de múltiples subprocesos.
Alternativas de Node.JS
Sin embargo, hay otra opción para usar en lugar de Node.JS Vert.x parece ser bastante prometedor y tiene muchas características adicionales como polygot y mejores consideraciones de escalabilidad.
Respondido 13 ago 16, 19:08
No estoy seguro de que "Si su solicitud del lado del servidor incluye operaciones de bloqueo como File IO o Socket IO" se enumeran en "Cuando NO se debe usar". Si mi entendimiento es correcto, una de las fortalezas de node.js es que tiene poderosos medios asincrónicos para manejar IO sin bloquear. Por lo tanto, Node.js puede verse como "una cura" para bloquear IO. - ondrej peterka
@OndraPeterka: Tiene razón en que Node.js es una cura para bloquear IO del servidor, sin embargo, si su controlador de solicitudes en el servidor mismo está haciendo una llamada de bloqueo a algún otro servicio web / operación de archivo, Node.js no ayudaría aquí. No bloquea la E / S solo para las solicitudes entrantes al servidor, pero no para las solicitudes salientes del controlador de solicitudes de su aplicación. - Ajay Tiwari
@ajay de nodejs.org dicen "E / S sin bloqueo", marque sus "Cuando NO" 2 y 3. - Omar Al Ithawi
con la versión actual, el nodo en realidad es compatible con el soporte de múltiples núcleos mediante el uso de clúster. Esto realmente aumenta el rendimiento de la aplicación Node al menos dos veces. Sin embargo, creo que el rendimiento debería ser más del doble cuando estabilizan la biblioteca del clúster. - Nam Nguyen
Puede usar node.js para cálculos pesados. Usar fork
. Ver stackoverflow.com/questions/9546225/…. Node maneja muy bien varios núcleos con el cluster
módulo. nodejs.org/api/cluster.html - Cadena
41
Otra gran cosa que Creo que el 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.
Respondido el 06 de junio de 13 a las 18:06
Y estos paquetes son relativamente nuevos, por lo que tienen el beneficio de la retrospectiva y tienden a ajustarse a los estándares web recientes. - joeytwiddle
Con el debido respeto, muchos paquetes en npm son terribles, porque npm no tiene un mecanismo para calificar paquetes. Retrospectiva de CPAN ¿alguien? - Dan Dascalescu
Lástima que ninguna de las bibliotecas de websockets pueda satisfacer las especificaciones rfc 6455. Los fanboys de node.js son sordos, tontos y ciegos cuando se da este hecho. - r3wt
No sé cuándo hizo el comentario, pero a partir de ahora, la biblioteca ws admite esa especificación: Jonathan Gray
36
Mi pieza: nodejs es genial para crear sistemas en tiempo real como análisis, aplicaciones de chat, apis, servidores de anuncios, etc. Demonios, 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 usarlos
Al hacer un sistema que ponga énfasis en la concurrencia y la velocidad.
- Sockets solo servidores como aplicaciones de chat, aplicaciones de irc, etc.
- Redes sociales que ponen énfasis en recursos en tiempo real como geolocalización, transmisión de video, transmisión de audio, etc.
- Manejo de pequeños fragmentos de datos muy rápido como una aplicación web de análisis.
- Como exponer una API REST only.
Cuando no usar
Es un servidor web muy versátil, por lo que puede usarlo donde quiera, pero probablemente no en estos lugares.
- Blogs simples y sitios estáticos.
- Como un servidor de archivos estático.
Tenga en cuenta que solo soy quisquilloso. Para los servidores de archivos estáticos, apache es mejor principalmente porque está ampliamente disponible. La comunidad de nodejs se ha vuelto más grande y 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 elección de alojamiento.
Respondido el 12 de Septiembre de 14 a las 14:09
Los blogs simples aún pueden beneficiarse de Node.js. Para servir archivos estáticos, aún puede usar Node.js y si la carga aumenta, simplemente agregue el proxy inverso Nginx delante de él, según las mejores prácticas actuales. El servidor httpd Apache es un dinosaurio que está muriendo - ver esta encuesta de Netcraft. - endrju
Yo diría lo contrario - echa un vistazo a fantasma.org, se ve increíble y está construido sobre NodeJs: colaboración, edición de artículos en tiempo real. Además, creando una página simple en NodeJs, digamos usando velasjs.org, es fácil, rápido y no necesita preocuparse por aprender ninguno de los lenguajes de programación del lado del servidor - bery
30
Se puede utilizar donde
- Aplicaciones que son altamente impulsadas por eventos y están fuertemente ligadas a E / S
- Aplicaciones que manejan una gran cantidad de conexiones a otros sistemas
- Aplicaciones en tiempo real (Node.js fue diseñado desde cero para tiempo real y para que sea fácil de usar).
- Aplicaciones que hacen malabares con gran cantidad de información que fluye hacia y desde otras fuentes
- Aplicaciones escalables de alto tráfico
- Aplicaciones móviles que tienen que comunicarse con la API y la base de datos de la plataforma, sin tener que hacer muchos análisis de datos
- Desarrolle aplicaciones en red
- Aplicaciones que necesitan hablar con el back-end muy a menudo
En el ámbito móvil, las empresas de máxima audiencia han confiado en Node.js para sus soluciones móviles. ¿Mira por qué?
LinkedIn es un usuario destacado. Toda su pila móvil se basa 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 usa Node.js como pila de tiempo de ejecución. Pudieron ajustar una estación de trabajo Ubuntu regular con calidad de desarrollador para manejar más de 120,000 conexiones activas por proceso node.js, ¡y cada conexión consumía aproximadamente 2kB de memoria!
Walmart rediseñó su aplicación móvil para usar Node.js y envió su procesamiento de JavaScript al servidor.
Lea más en: http://www.pixelatingbits.com/a-closer-look-at-mobile-app-development-with-node-js/
Respondido el 17 de diciembre de 15 a las 17:12
20
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 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 ¡adivina qué! hemos terminado. Pero en realidad no es tan fácil, si los datos que estamos obteniendo no son correctos o hay algún error en el servidor, entonces nos atascamos y tenemos que contactar a nuestros chicos de back-end por correo o chat (a veces también en WhatsApp :)). no es genial. ¿Qué pasa si escribimos nuestras API en JavaScript y llamamos a esas API desde nuestra interfaz? Sí, eso es muy 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 node for rest API?
así que aquí comienza la magia. Sí, tengo otras razones para usar node para nuestras API.
Volvamos a nuestro sistema de API de descanso tradicional que se basa en la operación de bloqueo o en el subproceso. Suponga que se producen dos solicitudes simultáneas (r1 y r2), cada una de las cuales requiere la operación de la base de datos. Entonces, en el sistema tradicional, lo que sucederá:
1. Manera de espera: Nuestro servidor comienza a servir r1
solicitud y espera la respuesta de la consulta. después de la finalización de r1
, el servidor comienza a servir r2
y lo hace de la misma manera. Entonces, esperar no es una buena idea porque no tenemos tanto tiempo.
2. Manera de enhebrar: Nuestro servidor creará dos hilos para ambas solicitudes. r1
e r2
y cumplen su propósito después de consultar la base de datos, es tan genial que es rápido. Pero consume memoria porque puede ver que comenzamos dos subprocesos y el problema aumenta cuando ambas solicitudes consultan los mismos datos, entonces tiene que lidiar con problemas de interbloqueo. Así que es mejor que esperar, pero todavía hay problemas.
Ahora aquí está, cómo lo hará el nodo:
3. Nodeway: Cuando la misma solicitud concurrente entra 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
la solicitud viene luego 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 servir. r2
solicitar y registrar de manera similar su evento con su devolución de llamada. Siempre que una consulta finaliza, desencadena su evento correspondiente y ejecuta su devolución de llamada hasta su finalización sin ser interrumpida.
Entonces, sin esperas, sin subprocesos, sin consumo de memoria, sí, esta es una forma de nodo para servir la API de descanso.
Respondido el 16 de enero de 15 a las 21:01
Hola Anshul. ¿Puede elaborar o sugerir algún recurso sobre cómo puede ocurrir un interbloqueo en el modo de subprocesamiento? - jsbish
16
My una razon mas elegir Node.js para un nuevo proyecto es:
Ser capaz de realizar un desarrollo puro basado en la nube
He utilizado IDE de Cloud9 por un tiempo y ahora no puedo imaginar sin él, cubre todos los ciclos de vida del desarrollo. Todo lo que necesita es un navegador y puede codificar en cualquier momento y en cualquier dispositivo. No es necesario registrar el código en una computadora (como en casa) y luego pagar en otra computadora (como en el lugar de trabajo).
Por supuesto, tal vez exista un IDE basado en la nube para otros lenguajes o plataformas (Cloud 9 IDE también está agregando soporte para otros lenguajes), pero usar Cloud 9 para desarrollar Node.js es realmente una gran experiencia para mí.
Respondido 18 Feb 14, 08:02
En realidad, Cloud9 IDE y los demás (como el que yo uso) admiten casi todo tipo de lenguaje web. - Wanny Miarelli
¿Hablas en serio amigo? este es el criterio para elegir una pila? :) ¡Feliz de que esté funcionando para ti! - matanster
15
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 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 eliminarlos 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. Frameworks como Express.js y el nuevo Koaj (que eliminó el infierno de devolución de llamada) ha hecho que trabajar en el nodo sea aún más fácil.
Respondido el 08 de junio de 14 a las 15:06
15
Ponerse longjohns 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 elección obvia. El caso se cerró incluso antes de que se abriera.
Podría haber dado una visión muy optimista de mi experiencia con Node.js. En cambio, fui honesto sobre los puntos buenos y los malos que encontré.
Permítanme incluir algunas citas que son relevantes aquí:
Advertencia: Node.js y su ecosistema son picante¡Lo suficientemente caliente para quemarte gravemente!
Cuando era asistente de profesor en matemáticas, una de las sugerencias no obvias que me dijeron fue que no le dijera a un estudiante que algo era "fácil". La razón era algo obvia en retrospectiva: si le dices a la gente que algo es fácil, alguien que no ve una solución puede terminar sintiéndose (aún más) estúpido, porque no solo no entiende cómo resolver el problema, sino el problema. ¡Son demasiado estúpidos para entender que es fácil!
Hay trampas que no solo molestan a las personas que vienen de Python / Django, que inmediatamente recargan la fuente si cambias algo. Con Node.js, el comportamiento predeterminado es que si realiza un cambio, la versión anterior continúa activa hasta el final de los tiempos o hasta que detiene y reinicia manualmente el servidor. Este comportamiento inapropiado no solo molesta a los Pythonistas; también irrita a los usuarios nativos de Node.js que ofrecen varias soluciones. La pregunta de StackOverflow "Recarga automática de archivos en Node.js" tiene, al momento de escribir este artículo, más de 200 votos positivos y 19 respuestas; una edición dirige al usuario a un script de niñera, supervisor de nodo, con página de inicio en http://tinyurl.com/reactjs-node-supervisor. Este problema brinda a los nuevos usuarios una gran oportunidad de sentirse estúpidos porque pensaron que habían solucionado el problema, pero el antiguo comportamiento con errores no ha cambiado por completo. Y es fácil olvidarse de rebotar el servidor; Lo he hecho varias veces. Y el mensaje que me gustaría dar es: “No, no eres estúpido porque este comportamiento de Node.js te mordió la espalda; es solo que los diseñadores de Node.js no vieron ninguna razón para proporcionar un comportamiento apropiado aquí. Intente sobrellevarlo, tal vez con un poco de ayuda del supervisor de nodo u otra solución, pero no se aleje sintiéndose estúpido. No eres tú el que tiene el problema; el problema está en el comportamiento predeterminado de Node.js ".
Esta sección, después de un debate, quedó adentro, precisamente porque no quiero dar la impresión de "Es fácil". Me corto las manos repetidamente mientras hago que las cosas funcionen, y no quiero suavizar las dificultades y hacerle creer que hacer que Node.js y su ecosistema funcionen bien es una cuestión sencilla y si no es sencillo para usted también , no sabes lo que estás haciendo. Si no se encuentra con dificultades desagradables al usar Node.js, es maravilloso. Si lo hace, espero que no se vaya sintiendo: "Soy estúpido, debe haber algo mal en mí". No eres estúpido si experimentas sorpresas desagradables al lidiar con Node.js. ¡No eres tu! ¡Es Node.js y su ecosistema!
El Apéndice, que realmente no quería después del crescendo 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 idiota:
Otra base de datos que parecía encajar perfectamente, y que aún puede canjearse, es una implementación del lado del servidor del almacén de valores-clave HTML5. Este enfoque tiene la ventaja fundamental de una API que la mayoría de los buenos desarrolladores de aplicaciones para el usuario comprenden lo suficientemente bien. De hecho, también es una API que la mayoría de los desarrolladores de front-end no tan buenos entienden lo suficientemente bien. Pero con el paquete node-localstorage, aunque no se ofrece acceso a la sintaxis de diccionario (desea usar localStorage.setItem (clave, valor) o localStorage.getItem (clave), no localStorage [clave]), se implementa la semántica completa de localStorage , incluida una cuota predeterminada de 5 MB,¿POR QUÉ? ¿Los desarrolladores de JavaScript del lado del servidor deben protegerse de sí mismos?
Para las capacidades de la base de datos del lado del cliente, una cuota de 5 MB por sitio web es realmente una cantidad generosa y útil de espacio para respirar para permitir que los desarrolladores trabajen con ella. Podría establecer una cuota mucho más baja y aún ofrecer a los desarrolladores una mejora inconmensurable sobre la cojera junto con la administración de cookies. Un límite de 5 MB no se presta muy rápidamente al procesamiento del lado del cliente de Big Data, pero hay una asignación realmente bastante generosa que los desarrolladores ingeniosos pueden usar para hacer mucho. Pero, por otro lado, 5 MB no es una porción particularmente grande de la mayoría de los discos comprados recientemente, lo que significa que si usted y un sitio web no están de acuerdo sobre cuál es el uso razonable del espacio en disco, o si algún sitio es simplemente abrumador, realmente no cuesta nada. usted mucho y no está en peligro de un disco duro inundado a menos que su disco duro ya esté demasiado lleno. Tal vez estaríamos mejor si el equilibrio fuera un poco menor o un poco mayor, pero en general es una solución decente para abordar la tensión intrínseca en un contexto del lado del cliente.
Sin embargo, se podría señalar suavemente que cuando usted es el que escribe código para su servidor, no necesita ninguna protección adicional para que su base de datos tenga un tamaño tolerable de más de 5 MB. La mayoría de los desarrolladores no necesitarán ni querrán herramientas que actúen como niñeras y las protejan del almacenamiento de más de 5 MB de datos del lado del servidor. Y la cuota de 5 MB que es un acto de equilibrio de oro en el lado del cliente es un poco tonta en un servidor Node.js. (Y, para una base de datos para múltiples usuarios como la que se cubre en este Apéndice, se podría señalar, un poco dolorosamente, que eso no es 5 MB por cuenta de usuario a menos que cree una base de datos separada en el disco para cada cuenta de usuario; eso es 5 MB compartido entre todas las cuentas de usuario juntas. Eso podría generar doloroso ¡Si te vuelves viral!) La documentación indica que la cuota es personalizable, pero un correo electrónico de hace una semana al desarrollador preguntando cómo cambiar la cuota no tiene respuesta, al igual que la pregunta de StackOverflow que pregunta lo mismo. La única respuesta que he podido encontrar está en la fuente de Github CoffeeScript, donde aparece como un segundo argumento entero opcional para un constructor. Así que eso es bastante fácil, y podría especificar una cuota igual al tamaño de un disco o partición. Pero además de portar una característica que no tiene sentido, el autor de la herramienta ha fallado completamente en seguir una convención muy estándar de interpretar 0 como "ilimitado" para una variable o función donde un número entero es especificar un límite máximo para el uso de algún recurso. Lo mejor que se puede hacer con este error es probablemente especificar que la cuota es Infinity:
if (typeof localStorage === 'undefined' || localStorage === null)
{
var LocalStorage = require('node-localstorage').LocalStorage;
localStorage = new LocalStorage(__dirname + '/localStorage',
Infinity);
}
Intercambiando dos comentarios en orden:
La gente se pegó un tiro en el pie innecesariamente usando JavaScript como un todo, y una parte de JavaScript que se convirtió en un lenguaje respetable fue un dicho de Douglas Crockford, en esencia, “JavaScript como lenguaje tiene algunas partes realmente buenas y algunas partes realmente malas. Aquí están las partes buenas. Solo olvídate de que hay cualquier otra cosa ". Quizás el ecosistema caliente de Node.js hará crecer su EL DESARROLLADOR “Douglas Crockford”, quien dirá, “El ecosistema de Node.js es un salvaje oeste codificado, pero hay algunas gemas reales por encontrar. Aquí tienes una hoja de ruta. Estas son las áreas que se deben evitar a casi cualquier costo. Estas son las áreas con algunas de las más ricas cosas que se pueden encontrar en CUALQUIER idioma o entorno ".
Quizás alguien más pueda tomar esas palabras como un desafío y seguir el ejemplo de Crockford y escribir "las partes buenas" y / o "las mejores partes" para Node.js y su ecosistema. ¡Compraría una copia!
Y dado el grado de entusiasmo y la gran cantidad de horas de trabajo en todos los proyectos, puede estar justificado en un año, dos o tres, moderar drásticamente cualquier comentario sobre un ecosistema inmaduro hecho en el momento de escribir este artículo. Realmente puede tener sentido en cinco años decir: “El ecosistema de Node.js de 2015 tuvo varios campos de minas. El ecosistema de Node.js 2020 tiene múltiples paraísos ".
Respondido el 04 de Septiembre de 15 a las 13:09
9
Si su aplicación ata principalmente a web apis u otros canales io, otorgue o tome una interfaz de usuario, node.js puede ser una elección justa para usted, especialmente si desea exprimir la mayor escalabilidad o, si su idioma principal en la vida es javascript (o una especie de 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 front-end asumir la responsabilidad de las cosas de back-end en lugar de la división típica. Otro punto de venta justificable es si, para empezar, su fuerza laboral está orientada a JavaScript.
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 si provienen de un entorno 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. Quizás http://koajs.com/ u otras novedades alivian esos aspectos originalmente espinosos, en comparación con cuando usé originalmente node.js o escribí esto.
respondido 18 mar '15, 21:03
Hay muchos enfoques existentes para escalar aplicaciones Node.js, y no parece que proporciones ninguna referencia con respecto a las afirmaciones de "soluciones a medias", "hacks terribles" y "API terribles". ¿Te importaría expandir esos? - Sven Slotweg
Lo dejo como ejercicio para el lector, pero basta con mirar las llamadas soluciones para el control de flujo. - matanster
Esa no es realmente una respuesta. Afirma que las soluciones existentes son "terribles trucos", pero no señala ninguna de ellas. ¿Ha considerado que es posible que simplemente no comprenda o no conozca los métodos correctos para escalar aplicaciones Node.js? - Sven Slotweg
Actualicé un poco mi respuesta. Quizás todavía tengas quejas, pero si crees que está mal deberías comentar con detalles ... en lugar de señalar una falta de las mismas en la respuesta. Eso sería más productivo para la comunidad en mi opinión. - matanster
-2
Puedo compartir algunos puntos dónde y por qué usar node js.
- Para aplicaciones en tiempo real como el chat, la edición colaborativa es mejor, usamos nodejs, ya que es una base de eventos donde se disparan los eventos y los datos a los clientes desde el servidor.
- Simple y fácil de entender, ya que es una base de JavaScript donde la mayoría de la gente tiene una idea.
- La mayoría de las aplicaciones web actuales van hacia js angular y backbone, con node es fácil interactuar con el código del lado del cliente ya que ambos usarán datos json.
- Muchos complementos disponibles.
Inconvenientes: -
- Node admitirá la mayoría de las bases de datos, pero lo mejor es mongodb, que no admitirá uniones complejas y otras.
- Errores de compilación ... el desarrollador debe manejar todas y cada una de las excepciones de otra manera si alguna aplicación de acuerdo de error deja de funcionar donde nuevamente debemos ir e iniciarla manualmente o usando cualquier herramienta de automatización.
Conclusión: - Es mejor usar Nodejs para aplicaciones simples y en tiempo real ... si tiene una lógica de negocios muy grande y una funcionalidad compleja, mejor no debe 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 debe ir con su tecnología de conveniencia.
Respondido 09 ago 16, 16:08
-3
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.
Node 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 el tiempo de compilación son COSAS BUENAS. ¿Por qué tirar todo eso? ¿Para qué? Y maldición, cuando algo va hacia el sur, la pila a menudo resulta completamente inútil.
Respondido el 06 de enero de 15 a las 10:01
Si bien no obtiene la verificación en tiempo de compilación, JSDoc le permite agregar cualquier tipo de información que desee para que las cosas tengan más sentido cuando regrese. Las funciones correctamente descompuestas (pequeñas) también suelen ser bastante fáciles de asimilar debido a su entorno bien definido (el cierre). Los seguimientos de pila defectuosos a menudo se pueden resolver con un poco de re-factorización para asegurarse de que no está dividiendo su lógica con una devolución de llamada asíncrona en el medio. Mantener sus devoluciones de llamada asíncronas dentro del mismo cierre facilita el razonamiento y el mantenimiento. - Remer rico
He pasado 30 años con lenguajes compilados, pero después de usarlo durante solo un año, JavaScript es ahora mi idioma preferido. Es tan productivo: puedo hacer mucho más con mucho menos código que Java C # C ++ o C. Pero es una mentalidad diferente. Las variables no escritas son en realidad una ventaja en muchos casos. JSLINT es esencial. Cuando necesita hacer cosas al mismo tiempo, las devoluciones de llamada asincrónicas son mucho más seguras, más fáciles y, en última instancia, más productivas que cualquier idioma en el que tenga que usar hilos. Y tienes que saber JavaScript de todos modos porque es el idioma del navegador. - James
Simpatizo con las preocupaciones planteadas y observo que se han hecho algunos esfuerzos para abordarlas, aunque ciertamente no se aplican universalmente. Hay un proyecto asombroso llamado Tern que puede proporcionar derivación de tipo a partir del análisis estático de código Javascript y bibliotecas. Tiene complementos para varios editores. También hay Typecript, JSDoc y MejorJS. Y luego esta Go, uno de tantos lenguajes de compilación a Javascript! - joeytwiddle
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas javascript node.js web-applications or haz tu propia pregunta.
Esta pregunta se está discutiendo en meta (meta.stackoverflow.com/q/332386/497418). - zzzzBov