Come sento il tuo dolore!
Come molti, ho trovato difficile arrivare all'essenza di Node.js perché la maggior parte delle persone scrive / parla solo della parte di Node che trova utile e la parte che trova interessante è di solito un vantaggio secondario di Node piuttosto che il suo principale scopo. Devo dire che penso che sia una follia per le persone dire che Node è solo un runtime JavaScript. L'utilizzo di JavaScript da parte di Node - e la sua selezione del runtime V8 - sono semplicemente un fine , i migliori strumenti per il problema che gli sviluppatori di Node volevano risolvere.
Lo scopo principale di Node era rendere più efficiente la gestione degli eventi utente in un'app Web. Quindi Node è in modo schiaccianteutilizzato sul back-end di un'app Web. La gestione degli eventi richiede che qualcosa sia in ascolto sulla macchina server per questi eventi utente. Quindi un server http deve essere impostato per instradare ogni evento al suo script di gestione appropriato. Node fornisce un framework per configurare rapidamente un server per ascoltare su una porta dedicata per le richieste degli utenti. Il nodo utilizza JavaScript per la gestione degli eventi perché JavaScript ha funzioni di callback: ciò consente di sospendere un'attività fino a quando non viene restituito il risultato di un'attività dipendente. Non molte altre lingue hanno questa funzione e quelle che lo hanno potrebbero non avere un interprete efficiente come il runtime V8 di Google. La maggior parte degli sviluppatori web conosce JavaScript, quindi non c'è alcun apprendimento linguistico aggiuntivo con Node. Inoltre, avere funzioni di callback consente di mettere tutte le attività dell'utente su un singolo threadsenza dover applicare un blocco esplicito alle attività che richiedono l'accesso al database o al file system. E questo è ciò che porta alla superiore efficienza esecutiva di Node sotto un intenso uso simultaneo - lo scopo principale del suo sviluppo.
Per aiutare gli utenti di Node a scrivere rapidamente il codice di back-end, gli sviluppatori di Node hanno anche organizzato sia una libreria JS incorporata per attività di routine (ad es. Questioni relative a richieste HTTP, codifica di stringhe, flussi ecc.) Sia il repository NPM (Node Package Manager) : si tratta di un set di pacchetti di script open source e gestito dall'utente per varie funzioni standard e personalizzate. Tutti i progetti Node consentono l'importazione di pacchetti NPM in un progetto tramite il comando di installazione npm stabilito .
Le richieste degli utenti gestite tramite Node saranno cose necessarie per l'app Web come autenticazione, query su database, gestione dei contenuti (Strapi CMS), ecc. Tutto questo verrà inviato alla porta Node. (Laddove l'analisi dei dati ottenuti da un database richiede molto tempo della CPU, questo tipo di processo è meglio mettere su un thread separato in modo che non rallenti le richieste utente più semplici.) Altri tipi di richiesta dell'utente, ad esempio per caricare un'altra pagina web , scaricare CSS / JS / file di immagine, ecc. continueranno a essere inviati dal browser alle porte predefinite sulla macchina server dove verranno gestiti dal programma del server web (Apache, NGinx, ecc.).
Quindi, in pratica , Node è principalmente un framework per la creazione rapida di server e la gestione degli eventi, ma che sostituisce solo alcune delle funzioni del programma del server web.
Altri usi non backend di Node sfruttano semplicemente l'una o l'altra delle sue caratteristiche, ad esempio il motore V8. Ad esempio, gli strumenti di build del frontend Grunt e Gulp utilizzano Node.js per elaborare uno script di build che può essere codificato per convertire SASS in CSS, minimizzare i file CSS / JS, ottimizzare la dimensione / caricamento dell'immagine, ecc. Ma questo tipo di lavoro è davvero solo un uso secondario di Node, non il suo uso principale che è per rendere efficienti i processi di backend per le applicazioni web.