Che cosa è così unico su Node.js? [chiuso]

48

Recentemente ci sono state molte lodi per Node.js. Non sono uno sviluppatore che ha avuto molta esposizione alle applicazioni di rete. Dalla mia profonda conoscenza di Nodes.js, il suo punto di forza è: abbiamo un solo thread che gestisce più connessioni, fornendo un'architettura basata su eventi.

Tuttavia, ad esempio in Java, posso creare solo un thread usando NIO / AIO (che è API non bloccante a mio avviso) e gestire più connessioni usando quel thread, e fornisco un'architettura basata su eventi implementare la logica di gestione dei dati (non dovrebbe essere così difficile fornendo qualche callback, ecc.)?

Dato che JVM è una VM ancora più matura della V8 (mi aspetto che funzioni anche più velocemente), e l'architettura di gestione basata sugli eventi sembra essere qualcosa di non difficile da creare, non sono sicuro del perché Node.js stia attirando così tanto Attenzione. Ho perso alcuni punti importanti?

    
posta Adrian Shum 19.06.2012 - 04:34
fonte

3 risposte

33

Sebbene questo concetto possa essere effettivamente implementato in molte lingue (e come dodgy_coder menzionato, è stato implementato in Ruby e Python almeno), non è così banale come affermi.

È vero, Java ha API IO non bloccanti. In questo modo puoi eseguire il disco raw / IO di rete in modo non bloccante. Tuttavia ogni API che in qualche modo avvolge o gestisce IO deve essere implementata anche in modo non bloccante. Ogni parser XML, ogni driver di database, ogni convertitore di formato file deve essere scritto per supportare l'IO non bloccante. Perché se una singola libreria sta bloccando in questo modello, allora ciò riduce le prestazioni dei server ai valori di età della pietra.

Node.js ha quell'infrastruttura della libreria, perché è sempre stata progettata in questo modo: ogni libreria che si sforza di diventare popolare ha per fornire un'API asincrona o non verrà utilizzata.

    
risposta data 19.06.2012 - 09:43
fonte
19

Probabilmente il motivo principale è che utilizza JavaScript per scrivere componenti lato server per cose come server web, applicazioni web o servizi web. Questo unifica il tradizionale linguaggio di sviluppo front-end (lato client) con il linguaggio lato server.

Hai ragione - il fatto che sia non-bloccante, l'uso del pattern del reattore non è univoco - è stato fatto prima di usare altri linguaggi e framework, come ad esempio EventMachine di Ruby o Twisted di Python per esempio.

    
risposta data 19.06.2012 - 05:35
fonte
10

I tre motivi principali che vorrei dare sono:

  1. IO non bloccante / IO asincrono. Questo è hash in tutto il mondo e nei poster precedenti. Una cosa che vorrei contribuire è che progettare il codice per assumere esplicitamente comportamenti asincroni aiuta il motore del compilatore a massimizzare l'hardware. Sì, molti dei compilatori JIT e dei processori hyperthreading prendono il codice sincrono e aiutano a parallelizzare l'esecuzione. Questo è ovviamente un approccio migliore. Al contrario, costruendo esplicitamente l'applicazione per async io si assicura che il motore e l'hardware possano massimizzare il tempo di esecuzione per il proprio codice. Certo, non ho dati quantificabili per dimostrarlo, ma mi fa sentire caldo dentro a pensare in questo modo.

  2. Codice unico per client e server. Questo ha una serie di vantaggi: aiuta a ottimizzare i costi del data center grazie alla possibilità di spostare la logica di business dal server al client; aiutare a riutilizzare la logica aziendale / convalida dei dati; ridurre la complessità delle competenze degli sviluppatori che devono esistere per supportare il prodotto (rispetto a Python e JavaScript).

  3. Bassa barriera all'ingresso. In molti modi Javascirpt è come Basic, Pascal e Perl di un anno. È molto facile iniziare a scrivere codice e non è necessario avere molte conoscenze di dominio per iniziare. Questo aiuta anche a ridurre i costi di sviluppo, essendo in grado di coinvolgere più sviluppatori jr e di accrescere il successo di un progetto. [Naturalmente è necessario superare gli ideologi che ritengono che i linguaggi di programmazione debbano essere difficili per estirpare gli sviluppatori a basso funzionamento]

risposta data 22.06.2012 - 09:27
fonte

Leggi altre domande sui tag