In che modo Node.js è diverso dagli altri framework lato server?


21

Ho notato che Node.js è diventato molto popolare e ho visto diversi casi di persone che facevano progetti su piccola scala.

Ho anche esaminato gli elenchi di pro e contro per avere un'idea di cosa può fare Node.js, ma non sono ancora chiaro su come differisce da altre tecnologie più mature sul lato server come PHP, Perl o Ruby su Rails.

Cosa, in particolare, differenzia Node.js dalle alternative attuali e perché?


1
@downvoter - perché il downvote? fatta eccezione per il secondo paragragh (non puoi davvero chiederti perché iniziare qualcosa quando qualcun altro lo ha fatto perché potresti sempre farlo meglio), trovo che questa domanda sia intrigante. L'ho pensato spesso da solo.
David Peterman,

È una scelta minore da scegliere, ma se cerchi su Google la frase citata "node.js" ottieni circa 3 milioni di hit.
Peter Rowell,

@Peter, sì, l'ho provato e hai ragione. Ma 3 milioni sono ancora due. Puoi tornare un anno dopo, e questa cifra è probabilmente salita a 10 milioni. :)
Saeed Neamati,

3
@Mark, grazie per la modifica eccezionale. Adesso è più chiaro.
Saeed Neamati,

Risposte:


18

Esistono due cose importanti che rendono Node.js diverso dai framework lato server esistenti, gli eventi asincroni e l'uso di JavaScript come linguaggio di programmazione.

Eventi asincroni

Mentre la maggior parte dei framework lato server esistenti utilizza un'architettura sincrona, Node.js utilizza un'architettura asincrona , che JavaScript può gestire bene. Ciò significa che il server reagisce agli eventi e invia eventi (messaggi) ad esempio al database. Questo stile di programmazione è molto diverso da uno stile sincrono e può essere difficile da usare con altri linguaggi. Node.js utilizza uno stile asincrono con IO asincrono e può ridimensionare bene.

Guarda anche Event Driven Architecture

JavaScript

JavaScript è il linguaggio di programmazione utilizzato dalle applicazioni Web sul client. L'uso della stessa lingua sul lato server significa che lo sviluppatore può applicare le proprie conoscenze JavaScript sia sul client che sul server e utilizzare le stesse funzioni necessarie.

Consiglierei la presentazione Introduzione a Node.js con Ryan Dahl in cui spiega l'architettura guidata dagli eventi Node.js in modo più dettagliato.


2
Questa è sicuramente la risposta migliore finora, ma metterei prima gli Eventi asincromi, dato che è davvero ciò che rende Node.js così attraente come un framework lato server. Buon lavoro, menzionando I / O asincrono e scalabilità. Questo è il cuore.
Adam Crossland,

Bene @Jonas, ancora non capisco. ASP.NET è anche basato su eventi. Quindi qual è la differenza tra Node.js e ASP.NET? È solo perché è asincrono? In tal caso, penso che l'utilizzo del multi-threading in ASP.NET possa fare lo stesso, vero?
Saeed Neamati,

3
@Saeed: ASP.NET è thread e sincrono, ad es. Quando si accede al database, il thread è bloccato e attende una risposta dal database. E quando si utilizzano molti thread (ad esempio uno per richiesta) viene utilizzata molta memoria (ogni thread richiede una quantità piuttosto grande di memoria), che potrebbe essere un collo di bottiglia. Node.js invia messaggi e reagisce agli eventi, quindi non (mai si spera) blocca il thread. Con node.js stai usando lo stesso modello di programmazione sul lato client con Ajax ( javascript asincrono e XML) e la stessa lingua.
Jonas,

Hai dimenticato la grande comunità open source dietro di essa.
Raynos,

3
Quando C # 5 esce con le nuove asynccose, ciò può cambiare. Il problema non è che non puoi scrivere codice asincrono scalabile in altre lingue, è che è più difficile fare (correttamente) senza un buon supporto a livello di lingua.
Davy8,

6

È diverso perché guidato dagli eventi . Ciò rende il server altamente scalabile.

In poche parole;

Modello di filo

  1. Il cliente chiede qualcosa
  2. Il server si spegne ed elabora la richiesta
  3. Restituisce al client
  4. Pronto per elaborare una nuova richiesta

Modello di evento

  1. Il cliente chiede qualcosa
  2. Il server passa la richiesta per l'elaborazione. Pronto per elaborare una nuova richiesta
  3. Il server gestisce più richieste non appena arrivano
  4. Il server restituisce i dati al client al termine dell'elaborazione della richiesta

@ Tom, cosa intendi per event driven? ASP.NET WebForms è anche guidato dagli eventi e puoi vedere gestori come Session_Startedo Context_Authenticatedo Page_Load?
Saeed Neamati,

1
Chiamarlo guidato dagli eventi è più ambiguo del necessario e non arriva davvero al cuore di Node.JS: I / O asincrono.
Adam Crossland,

2

Ho avuto l'impressione che la sua popolarità fosse dovuta all'uso di JavaScript. Poiché molti sviluppatori web conoscono JavaScript, è un punto di forza che ora possono sviluppare codice lato server usando la stessa lingua. Questo ha alcuni vantaggi a cui posso pensare:

  • I file di codice possono essere condivisi tra server e client, impedendo la duplicazione degli sforzi solo per gestire i due lati del sistema.
  • Gli sviluppatori non devono passare mentalmente da una lingua all'altra. (non è un grosso problema secondo me)
  • Gli architetti non devono scegliere più lingue quando progettano una soluzione web.
  • Qualcuno che non ha mai sviluppato il codice lato server ora può farlo senza imparare un'altra lingua. (Non è probabile che sia un argomento prezioso, IMHO)

Node.JS è popolare perché è veloce e si adatta bene. Che sia in JavaScript è bello, ma in gran parte casuale.
Adam Crossland,

2
La cosa più preziosa è che gli sviluppatori lato server possono scrivere codice lato client nella stessa lingua e che è possibile condividere i moduli lato server con il client. Non il contrario. Non vorrei trasferire il codice sul lato client hackerato sul server, questo è sparare a te stesso.
Raynos,

@Adam: Perché node.js sta diventando popolare quando ci sono già tecnologie che si adattano alla descrizione "veloce e ben scalabile"? - Perché è JavaScript.
John Fisher,

@John È più difficile scrivere app che non si adattano bene in Node.js. Se la tua app è intensiva su disco / rete rispetto alla CPU (che è la maggior parte), puoi facilmente supportare molte volte più connessioni simultanee su un singolo core rispetto alla maggior parte degli altri server a meno che tu non scriva un codice di threading molto complicato.
Davy8,

@ Davy8: immagino che tutto dipenda dagli altri framework / sistemi che hai usato. La facilità di scalabilità che descrivi è già semplice con gli strumenti che utilizzo. L'unica cosa che Node.js offre dal mio punto di vista è il sapore JavaScript, che non è convincente.
John Fisher,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.