È particolarmente forte nel gestire una tonnellata di I / O di file e mi aspetto che gestisca bene anche una tonnellata di comunicazioni di rete. Sembra particolarmente popolare per le app basate su socket. La cosa importante da tenere a mente è che se le tue esigenze non sono soddisfatte dalle librerie esistenti (ce ne sono molte) potresti dover immergerti in qualche C che può essere associato ai comandi JS. Puoi anche generare processi Node aggiuntivi, ma sospetto che fare molto potrebbe essere tassativo (presumo - potrebbe essere sbagliato - c'è un'istanza V8 generata per ognuno di questi).
JS è a thread singolo e blocco, il che significa che nient'altro può essere eseguito fino al completamento di una chiamata di funzione. Questa era una caratteristica desiderata di JS, essenzialmente togliendo dalle mani tutti i problemi di threading e di accodamento. JS non impedisce che le cose C / C ++ vengano eseguite in modo più multi-thread sotto il cofano, quindi il ruolo di JS è davvero più architettura / messenger. Se stai elaborando immagini, non vorrai gestirle con i comandi JavaScript sincroni perché tutto il resto sulla tua app o server verrà bloccato fino a quando non sarà completato. L'idea è che si richiede l'elaborazione di un'immagine mediante la funzionalità C / C ++ associata, quindi si risponde all'evento 'done' al termine dell'elaborazione dell'immagine.
Ciò richiede che JS in qualsiasi app Node.js sia fortemente guidato da eventi e callback o che probabilmente funzionerà molto male. Quindi non vedrai molte chiamate di metodo in Node che non ricevono una funzione per un uso successivo. Una cosa che diventa molto chiara molto velocemente in Node è che sei dentro per un mondo di brutti se non trovi un modo per gestire la piramide di callback. per esempio
//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 );
} );
} );
Fortunatamente ci sono molti strumenti ed esempi là fuori per gestire meglio questo. La maggior parte tende a ruotare attorno a meccanismi promettenti e semplicemente a concatenare una serie di funzioni volte a rispondere reciprocamente agli stati di callback in un array che fa le brutte cose della piramide per te sotto il cofano.
Personalmente, mi piace moltissimo vedere JS di alto livello e C / C ++ più vicini al Chrome. È la combinazione perfetta e mi ha ispirato a iniziare a studiare C. E non lasciare che la mancanza del potenziale della biblioteca ti faccia impazzire fino a quando non hai fatto qualche ricerca. Le librerie di nodi vengono prodotte a un ritmo molto rapido e stanno maturando molto rapidamente. Se non stai facendo qualcosa di molto insolito, le probabilità sono buone che qualcuno l'abbia coperto.
La differenza più grande rispetto a Rails è che JS non è mai probabile che sia su rotaie per così dire. Tendiamo a programmare per essere in grado di averlo nel modo in cui lo desideri molto rapidamente, quindi c'è la corda per aggrapparti al fattore e l'architettura è stata piuttosto fai-da-te in JS fino a anni più recenti. Chiamo quella libertà, ma mi rendo conto che non è visto come ideale per molti sviluppatori.
Inoltre, non avrai mai un problema "gemma" in Node.js perché hai provato a installare su qualcosa di diverso da un Mac. Gli sviluppatori Web sul lato client disprezzano i problemi di dipendenza ed è da lì che proviene gran parte del core di Node. Se non funziona in 5 minuti o meno su ogni piattaforma popolare, generalmente lo accartocciamo e lo lanciamo. Devo ancora imbattermi in un modulo popolare che mi richiede di fare qualcosa di speciale per farlo funzionare. Il sistema di pacchetti è eccellente.
Ma per rispondere alla tua domanda principale in modo più esplicito / conciso: è buono con i processi in background?
Sì, il nodo fondamentalmente IS è un processo in background con un mezzo per guidare un'app tramite eventi e callback.