É particularmente forte ao lidar com uma tonelada de E / S de arquivo e eu esperaria que ele gerencie também uma tonelada de comunicação de rede. Parece particularmente popular para aplicativos baseados em soquete. O importante é ter em mente que, se suas necessidades não forem atendidas pelas bibliotecas existentes (existem muitas), talvez seja necessário mergulhar em algum C que possa ser vinculado aos comandos JS. Você também pode gerar processos adicionais de Nó, mas suspeito que muito disso pode ser tributado (suponho - pode estar errado - há uma instância V8 gerada para cada um deles).
JS é de thread único e bloqueador, o que significa que nada mais pode ser executado até que uma chamada de função seja concluída. Esse era um recurso desejado do JS, essencialmente tirando todas as preocupações de enfileiramento e enfileiramento de suas mãos. O JS não impede que o material C / C ++ seja executado de maneira mais multithread sob o capô, de modo que o papel do JS é realmente mais arquitetura / messenger. Se você estiver processando imagens, não vai querer lidar com isso com comandos JavaScript síncronos, porque todo o resto no seu aplicativo ou servidor será bloqueado até que seja concluído. A idéia é que você solicite que uma imagem seja processada pela funcionalidade C / C ++ vinculada e, em seguida, responda ao evento 'done' quando a imagem terminar de ser processada.
Isso requer que a JS em qualquer aplicativo Node.js. seja fortemente orientada a eventos e retorno de chamada ou provavelmente terá um desempenho muito ruim. Portanto, você não verá muitas chamadas de método no Node que não receberão uma função para uso posterior. Uma coisa que se torna muito clara e muito rápida no Node é que você terá um mundo feio se não encontrar uma maneira de lidar com a pirâmide de retorno de chamada. por exemplo
//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 );
} );
} );
Felizmente, existem muitas ferramentas e exemplos disponíveis para lidar melhor com isso. A maioria costuma girar em torno de mecanismos promissores e simplesmente encadear uma série de funções destinadas a responder aos estados de retorno de chamada um do outro em uma matriz que faz as coisas feias da pirâmide para você por baixo do capô.
Pessoalmente, eu adoro o fato de termos JS em alto nível e C / C ++ mais perto do chrome. É a melhor combinação e me inspirou a começar a aprender C. E não deixe a falta de potencial da biblioteca te assustar até que você faça alguma pesquisa. As bibliotecas de nós estão sendo produzidas em um ritmo muito rápido e estão amadurecendo muito rapidamente. Se você não estiver fazendo nada, probabilidades altamente incomuns são boas para alguém.
A maior diferença do Rails é que o JS provavelmente nunca está no Rails. Nós tendemos a codificar para poder tê-lo como quiser rapidamente, para que haja a possibilidade de se envolver com fatores e a arquitetura tenha sido bastante DIY em JS até os anos mais recentes. Eu chamo isso de liberdade, mas percebo que isso não é visto como ideal para muitos desenvolvedores.
Além disso, você nunca terá um problema "gem" no Node.js. porque tentou instalar em algo diferente de um Mac. Os desenvolvedores da Web do lado do cliente desprezam os problemas de dependência e é daí que vem a maior parte do núcleo do Node. Se não funcionar em 5 minutos ou menos em todas as plataformas populares, geralmente amassamos e jogamos fora. Ainda não encontrei um módulo popular que exigisse que eu fizesse algo especial para fazê-lo funcionar. O sistema de pacotes é excelente.
Mas, para responder à sua pergunta principal de forma mais explícita / sucinta: É bom nos processos em segundo plano?
Sim, o Nó é basicamente processos em segundo plano com um meio de direcionar um aplicativo por meio de eventos e retornos de chamada.