La risposta al quesito proposto dal titolo è "probabilmente sì", si può lavorare con altri strumenti e ottenere comunque ottimi risultati. Ma proviamo ad analizzare i motivi per i quali NodeJS dovrebbe comunque far parte dell'arsenale di uno sviluppatore.
Gestione delle connessioni e concorrenza
Il runtime offre il supporto per un elevato numero di connessioni concorrenti su un singolo thread, questa caratteristica rende NodeJS una soluzione ideale per la realizzazione di applicazioni che devono gestire grandi quantità di dati e di traffico. A tal proposito basti pensare ad una piattaforma per il commercio elettronico che, per sua natura, dovrebbe consentire a più utenti di interagire simultaneamente con contenuti differenti.
In ambiente NodeJS un processo viene rappresentato dall'esecuzione di un thread principale al quale si associano diversi thread operanti in background; viene così generata una coda prodotta dalla coordinazione tra il main thread e i thread in background; tale dinamica prevede che il primo estragga i task dalla coda nell'ordine in cui vengono prodotti e li esegua.
Si tratta di un meccanismo differente da quello di strumenti basati sul parallelismo dei task su thread indipendenti, non sempre esso si traduce nell'opzione migliore per la gestione delle connessioni, ma rimane il vantaggio derivante dalla gestione semplificata della concorrenza.
Prestazioni
Riprendendo l'esempio dei siti Web dedicati all'e-commerce, è interessante sottolineare come NodeJS rappresenti un environment ottimale per ottenere performance di alto livello. Recenti rilevazioni sottolineano come, ad oggi, i visitatori concedano mediamente non più di 3 secondi al caricamento di una pagina prima di abbandonarla, è poi probabile che con il continuo incremento delle velocità di connessione questo intervallo sia destinato ad assottigliarsi alla ricerca di una user experience sempre più vicina a quella nativa.
Da questo punto di vista NodeJS ha dalla sua parte la compilazione JiT (Just in Time) basata sul JavaScript engine V8 per la traduzione dinamica. La compilazione JiT garantisce fasi di esecuzione che possono tradursi in prestazioni vicine a quelle ottenibili tramite una compilazione diretta in linguaggio macchina, tale risultato è possibile unendo le potenzialità della compilazione bytecode alla compilazione nativa.
Comunicazioni asincrone
NodeJS supporta le comunicazioni asincrone e consente di veicolare i dati quando disponibili per la trasmissione, in questo modo vengono praticamente rimosse le latenze dovute all'interscambio client server nella richiesta dei servizi. Tale caratteristica rende l'environment un backend ideale per le Web application, offrendo tempi di attivazioni prossimi alle esperienze native.
Anche in questo caso entra in gioco il motore JavaScript V8 e la conversione dello stesso JavaScript non in byte code ma in linguaggio macchine nativo; inoltre, V8 non presiede soltanto alle fasi di compilazione ed esecuzione del codice sorgente, ma gestisce anche l'allocazione in memoria degli oggetti e la garbage collection degli oggetti non più necessari.
Conclusioni
Non è necessario sostenere che NodeJS sia una soluzione migliore di altre per sottolineare quanto questo ambiente rappresenti uno strumento ottimale per lo sviluppo, si consideri però che parliamo di una competenza che (come sta già accadendo) sarà sempre più richiesta ai developer, è quindi caldamente consigliato inserire l'utilizzo di NodeJS tra le proprie skill.
Per approfondire: Brainvire