Es particularmente fuerte en el manejo de una tonelada de E / S de archivos y esperaría que también maneje una tonelada de comunicación de red. Parece particularmente popular para aplicaciones basadas en socket. Lo importante a tener en cuenta es que si las bibliotecas existentes no satisfacen sus necesidades (hay muchas), es posible que deba sumergirse en algún C que pueda estar vinculado a los comandos JS. También puede generar procesos de Nodo adicionales, pero sospecho que hacer mucho de eso podría generar impuestos (supongo, podría estar equivocado, hay una instancia de V8 generada para cada uno de ellos).
JS es de un solo subproceso y está bloqueando, lo que significa que nada más puede ejecutarse hasta que se complete una llamada a la función. Esta era una característica deseada de JS, esencialmente quitando todas las preocupaciones de enhebrado y cola de sus manos. El JS no impide que las cosas de C / C ++ se ejecuten de una manera más multihilo debajo del capó, por lo que el papel de JS es realmente más arquitectura / mensajero. Si está procesando imágenes, no querrá manejar eso con comandos síncronos de JavaScript porque todo lo demás en su aplicación o servidor se bloqueará hasta que esté listo. La idea es que solicite que se procese una imagen mediante la funcionalidad C / C ++ vinculada, y luego responda al evento 'hecho' cuando la imagen termine de procesarse.
Esto requiere que el JS en cualquier aplicación de Node.js esté fuertemente impulsado por eventos y devoluciones de llamada o probablemente funcionará muy mal. Por lo tanto, no verá muchas llamadas a métodos en Node que no reciben una función para su uso posterior. Una cosa que se vuelve muy clara muy rápido en Node es que te encontrarás en un mundo feo si no encuentras una manera de manejar la pirámide de devolución de llamada. p.ej
//event CBs are more DOM-style than Node style and this isn't built-in Node file I/O
//keeping it simple and quick since I'll just get Node stuff wrong from memory
file.get('someFile.txt', function(e){
e.fileObj.find('some snippet', function(e){
someFinalCallBackHandler( e.snippetLocations );
} );
} );
Afortunadamente, hay muchas herramientas y ejemplos para manejar esto mejor. La mayoría tiende a girar en torno a mecanismos de promesa y simplemente encadenar una serie de funciones destinadas a responder a los estados de devolución de llamada de los demás en una matriz que hace las cosas de la pirámide fea bajo el capó.
Personalmente, me encanta que tengamos JS en el alto nivel y C / C ++ más cerca del cromo. Es el combo definitivo y me inspiró a comenzar a aprender C. Y no dejes que la falta de potencial bibliotecario te asuste hasta que hayas investigado un poco. Las bibliotecas de nodos se están produciendo a un ritmo muy rápido y están madurando muy rápidamente. Si no está haciendo nada, las probabilidades muy inusuales son buenas, alguien lo tiene cubierto.
La mayor diferencia con Rails es que es probable que JS nunca esté en rails por así decirlo. Tendemos a codificar para poder tenerlo, sin embargo, lo desea muy rápidamente, por lo que existe la cuerda para colgarse con el factor y la arquitectura ha sido bastante DIY en JS hasta años más recientes. Llamo a eso libertad, pero me doy cuenta de que eso no es visto como ideal para muchos desarrolladores.
Además, nunca tendrá un problema de "gema" en Node.js porque intentó instalarlo en algo que no sea una Mac. Los desarrolladores web del lado del cliente desprecian los problemas de dependencia y de ahí proviene una gran parte del núcleo de Node. Si no funciona fuera de la caja en 5 minutos o menos en todas las plataformas populares, generalmente lo arrugamos y lo tiramos. Todavía tengo que encontrarme con un módulo popular que requiera que haga algo especial para que funcione. El sistema de paquetes es excelente.
Pero para responder a su pregunta central de manera más explícita / sucinta: ¿Es bueno con los procesos en segundo plano?
Sí, Node básicamente es un proceso en segundo plano con un medio para conducir una aplicación a través de eventos y devoluciones de llamadas.