javascript - with - Come decidere quando utilizzare Node.js?




starting with express (12)

Sono nuovo di questo genere di cose, ma ultimamente ho sentito molto su quanto sia buono Node.js Considerando quanto mi piace lavorare con jQuery e JavaScript in generale, non posso fare a meno di chiedermi come decidere quando utilizzare Node.js. L'applicazione web che ho in mente è qualcosa come Bitly : prende del contenuto, lo archivia.

Da tutti i compiti che ho fatto negli ultimi giorni, ho ottenuto le seguenti informazioni. Node.js

  • è uno strumento da riga di comando che può essere eseguito come un normale server Web e consente di eseguire programmi JavaScript
  • utilizza il grande motore JavaScript V8
  • è molto buono quando devi fare parecchie cose allo stesso tempo
  • è basato sugli eventi, quindi tutto il meraviglioso materiale Ajax può essere fatto dal lato server
  • ci consente di condividere il codice tra il browser e il back-end
  • ci permette di parlare con MySQL

Alcune delle fonti che ho incontrato sono:

Considerando che Node.js può essere eseguito quasi fuori dagli schemi delle istanze EC2 di Amazon , sto cercando di capire quale tipo di problemi richiede Node.js in opposizione a qualsiasi dei potenti re là fuori come PHP , Python e Ruby . Capisco che in realtà dipende dall'esperienza che si ha su una lingua, ma la mia domanda ricade maggiormente nella categoria generale di: Quando utilizzare un particolare quadro e quale tipo di problemi è particolarmente adatto?


  1. Il nodo è ottimo per i prototipi veloci, ma non lo userei mai più per qualcosa di complesso. Ho trascorso 20 anni a sviluppare una relazione con un compilatore e sono sicuro che mi manca.

  2. Il nodo è particolarmente doloroso per il mantenimento del codice che non hai visitato per un po '. Digitare informazioni e rilevare errori nel tempo di compilazione sono BUONE COSE. Perché buttare via tutto questo? Per cosa? E dang, quando qualcosa va a sud le tracce dello stack abbastanza spesso completamente inutili.


Credo che Node.js sia il più adatto per le applicazioni in tempo reale: giochi online, strumenti di collaborazione, chat room o qualsiasi cosa in cui ciò che un utente (o robot? O sensore?) Fa con l'applicazione deve essere visto immediatamente da altri utenti, senza un aggiornamento della pagina.

Vorrei anche menzionare che Socket.IO in combinazione con Node.js ridurrà la latenza in tempo reale anche oltre rispetto a quanto è possibile con il polling lungo. Socket.IO tornerà al polling lungo come scenario peggiore, e invece utilizzerà socket Web o Flash anche se disponibili.

Ma dovrei anche ricordare che qualsiasi situazione in cui il codice potrebbe bloccare a causa di thread può essere meglio affrontata con Node.js. O qualsiasi situazione in cui è necessario che l'applicazione sia guidata dagli eventi.

Inoltre, Ryan Dahl ha detto in una conferenza che una volta ho assistito al fatto che il Node.js benchmark Nginx strettamente rivale per regolari richieste HTTP vecchie. Quindi, se costruiamo con Node.js, possiamo servire le nostre normali risorse in modo abbastanza efficace, e quando abbiamo bisogno delle cose guidate dagli eventi, è pronto a gestirle.

Inoltre è tutto JavaScript sempre. Lingua Franca sull'intero stack.


Ho un esempio del mondo reale in cui ho usato Node.js. L'azienda in cui lavoro ha un cliente che desidera avere un semplice sito Web HTML statico. Questo sito web è per la vendita di un articolo tramite PayPal e il cliente desiderava anche avere un contatore che mostra la quantità di articoli venduti. Il cliente si aspetta un numero enorme di visitatori di questo sito. Ho deciso di creare il contatore utilizzando Node.js e il framework Express.js .

L'applicazione Node.js era semplice. Ottieni l'importo degli articoli venduti da un database Redis , aumenta il contatore quando l'oggetto è venduto e offre il valore del contatore agli utenti tramite l' API .

Alcuni motivi per cui ho scelto di utilizzare Node.js in questo caso

  1. È molto leggero e veloce. Ci sono state oltre 200000 visite su questo sito in tre settimane e le risorse minime del server sono state in grado di gestire tutto.
  2. Il contatore è davvero facile da fare per essere in tempo reale.
  3. Node.js è stato facile da configurare.
  4. Ci sono molti moduli disponibili gratuitamente. Ad esempio, ho trovato un modulo Node.js per PayPal.

In questo caso, Node.js è stata una scelta fantastica.


I motivi più importanti per iniziare il tuo prossimo progetto usando il nodo ...

  • Ci sono tutti i tipi più simpatici ... quindi deve essere divertente.
  • Puoi rilassarti al fresco e avere tantissime avventure di Nodo di cui vantarti.
  • Sei un centesimo spaccone quando si tratta di costi di cloud hosting.
  • Ci sono stato fatto con Rails
  • Tu odi le implementazioni di IIS
  • Il tuo vecchio lavoro IT sta diventando noioso e ti piacerebbe che tu fossi in una nuova brillante Start Up.

Cosa aspettarsi ...

  • Ti sentirai sicuro e protetto con Express senza tutti i bloatware server di cui non hai mai avuto bisogno.
  • Funziona come un razzo e scala bene.
  • Lo sogni. L'hai installato. Il pacchetto di nodi repo packages è il più grande ecosistema di librerie open source al mondo.
  • Il tuo cervello avrà il tempo deformato nella terra delle callback annidate ...
  • ... finché non impari a mantenere le tue Promises .
  • Sequelize e Passport sono i tuoi nuovi amici API.
  • Il debug del codice per lo più asincrono diventerà umm ... interessante .
  • Tempo per tutti i Noders per padroneggiare Typescript .

Chi lo usa?

  • PayPal, Netflix, Walmart, LinkedIn, Groupon, Uber, GoDaddy, Dow Jones
  • Ecco perché sono passati a Node .

Il mio pezzo: nodejs è ottimo per realizzare sistemi in tempo reale come analytics, chat-app, apis, server pubblicitari, ecc. Diavolo, ho fatto la mia prima app di chat usando nodejs e socket.io in meno di 2 ore e anche durante la settimana degli esami!

modificare

Sono passati diversi anni da quando ho iniziato a utilizzare nodejs e l'ho usato per creare molte cose diverse tra cui file server statici, analisi semplice, applicazioni di chat e molto altro. Questa è la mia opinione su quando utilizzare nodejs

Quando usare

Quando si realizza un sistema che pone l'accento sulla concorrenza e sulla velocità.

  • Socket solo server come app di chat, applicazioni irc, ecc.
  • Social network che mettono l'accento sulle risorse in tempo reale come la geolocalizzazione, il flusso video, il flusso audio, ecc.
  • Gestire piccoli blocchi di dati molto velocemente come una webapp di analisi.
  • Come esporre un REST solo api.

Quando non usare

È un server web molto versatile, quindi puoi utilizzarlo dove vuoi ma probabilmente non in questi posti.

  • Blog semplici e siti statici.
  • Proprio come un file server statico.

Tieni presente che sto solo facendo il pelo nell'uovo. Per i file server statici, apache è migliore soprattutto perché è ampiamente disponibile. La community di nodejs è diventata più grande e più matura nel corso degli anni ed è sicuro che nodejs può essere utilizzato praticamente ovunque se si dispone della propria scelta di hosting.


Motivi per utilizzare NodeJS:

  • Esegue Javascript, quindi puoi usare la stessa lingua su server e client, e persino condividere un po 'di codice tra di loro (ad esempio per la convalida del modulo o per il rendering di viste alle estremità).

  • Il sistema event-driven a single-threaded è fast anche quando si gestiscono molte richieste contemporaneamente, e anche semplice, rispetto ai tradizionali framework multi-thread Java o ROR.

  • Il pool sempre crescente di packages accessibili tramite NPM , incluse librerie / moduli client e server-side, oltre a strumenti da riga di comando per lo sviluppo web. Molti di questi sono comodamente ospitati su github, dove a volte puoi segnalare un problema e trovarlo risolto in poche ore! È bello avere tutto sotto lo stesso tetto, con report di rilascio standardizzati e forking facile.

  • È diventato l'ambiente standard defacto in cui è possibile eseguire strumenti correlati a JavaScript e altri strumenti correlati al Web , tra cui task runner, minificatori, abbellitori, linters, preprocessor, bundler e processori di analisi.

  • Sembra abbastanza adatto per la prototipazione, lo sviluppo agile e la rapida iterazione del prodotto .

Motivi per non utilizzare NodeJS:

  • Esegue Javascript, che non ha il controllo del tipo in fase di compilazione. Per sistemi di sicurezza complessi di grandi dimensioni, o progetti che includono la collaborazione tra diverse organizzazioni, un linguaggio che incoraggia le interfacce contrattuali e fornisce il controllo statico dei tipi può far risparmiare tempo (ed esplosioni ) di debug nel lungo periodo. (Anche se la JVM è bloccata con null , quindi per favore usa Haskell per i tuoi reattori nucleari.)

  • Aggiunto a questo, molti dei pacchetti in NPM sono un po ' grezzi , e ancora in rapido sviluppo. Alcune librerie per i framework precedenti hanno subito un decennio di test e bugfixing e sono ormai molto stabili . Npmjs.org non ha alcun meccanismo per valutare i pacchetti , il che ha portato a una proliferazione di pacchetti che fanno più o meno la stessa cosa, da cui una grande percentuale non viene più mantenuta.

  • Callback annidato (Naturalmente ci sono 20 diverse soluzioni per questo ...)

  • Il numero sempre crescente di pacchetti può far apparire radicalmente diverso il progetto NodeJS dal prossimo. Vi è una grande diversità nelle implementazioni a causa dell'enorme numero di opzioni disponibili (ad esempio Express / Sails.js / Meteor / Derby ). Questo a volte può rendere più difficile per un nuovo sviluppatore entrare in un progetto Node. A differenza di uno sviluppatore Rails che si unisce a un progetto esistente, dovrebbe essere in grado di familiarizzare con l'app abbastanza rapidamente, perché tutte le app Rails sono incoraggiate a utilizzare una struttura simile .

  • Trattare con i file può essere un po 'un dolore. Le cose che sono banali in altri linguaggi, come leggere una riga da un file di testo, sono abbastanza strane da fare con Node.js che c'è una domanda su quella con 80+ upvotes. Non esiste un modo semplice per leggere un record alla volta da un file CSV . Eccetera.

Amo NodeJS, è veloce, selvaggio e divertente, ma temo che abbia scarso interesse per la correttezza dimostrabile. Speriamo di poter finalmente unire il meglio di entrambi i mondi. Sono ansioso di vedere cosa sostituirà Node in futuro ... :)


Per farla breve:

Node.js è adatto per applicazioni che hanno molte connessioni simultanee e ogni richiesta richiede solo pochissimi cicli di CPU, perché il ciclo degli eventi (con tutti gli altri client) è bloccato durante l'esecuzione di una funzione.

Un buon articolo sul ciclo degli eventi in Node.js è il blog tecnologico di Mixu: Comprensione del ciclo degli eventi node.js.


Può essere usato dove

  • Applicazioni che sono altamente guidate dagli eventi e fortemente vincolate all'I / O
  • Applicazioni che gestiscono un numero elevato di connessioni ad altri sistemi
  • Applicazioni in tempo reale (Node.js è stato progettato da zero per il tempo reale e per essere facile da usare.)
  • Applicazioni che destreggiano su scadenze di streaming di informazioni da e verso altre fonti
  • Traffico elevato, applicazioni scalabili
  • App mobili che devono comunicare con l'API e il database della piattaforma, senza dover eseguire molte analisi dei dati
  • Costruisci applicazioni in rete
  • Applicazioni che hanno bisogno di parlare molto spesso con il back-end

Sul fronte mobile, le aziende prime time si affidano a Node.js per le loro soluzioni mobili. Scopri perché?

LinkedIn è un utente di primo piano. Il loro intero stack mobile è costruito su Node.js. Sono passati dall'esecuzione di 15 server con 15 istanze su ogni macchina fisica, a solo 4 istanze - in grado di gestire il doppio del traffico!

eBay lanciato ql.io, un linguaggio di query Web per le API HTTP, che utilizza Node.js come stack di runtime. Sono stati in grado di mettere a punto una normale workstation Ubuntu di qualità sviluppatore per gestire oltre 120.000 connessioni attive per nodo.js, con ogni connessione che consuma circa 2kB di memoria!

Walmart riprogettato la sua app mobile per utilizzare Node.js e ha trasferito l'elaborazione JavaScript sul server.

Maggiori informazioni su: http://www.pixelatingbits.com/a-closer-look-at-mobile-app-development-with-node-js/


Un'ultima cosa che fornisce il nodo è la possibilità di creare più instane di nodi v8 usando il processo figlio del nodo ( childProcess.fork() ciascuno che richiede una memoria da 10mb come per i documenti) al volo, senza influenzare il processo principale che esegue il server. Quindi scaricare un lavoro in background che richiede un enorme carico del server diventa un gioco da ragazzi e possiamo facilmente ucciderli come e quando necessario.

Ho utilizzato molto il nodo e nella maggior parte delle app che creiamo, richiediamo connessioni server allo stesso tempo, quindi un traffico di rete pesante. Framework come Express.js e il nuovo Koajs (che ha rimosso l'inferno di callback) hanno reso ancora più facile lavorare sul nodo.


Nodo migliore per la gestione simultanea delle richieste -

Quindi, iniziamo con una storia. Negli ultimi 2 anni sto lavorando su JavaScript e sviluppo web front end e mi sto divertendo. I ragazzi di back end ci forniscono alcune API scritte in Java, python (non ci interessa) e scriviamo semplicemente una chiamata AJAX, otteniamo i nostri dati e indovinate un po '! abbiamo chiuso. Ma in realtà non è così facile, se i dati che riceviamo non sono corretti o c'è qualche errore del server, allora ci siamo bloccati e dobbiamo contattare i nostri back end per posta o chat (a volte anche su whatsApp :)). non è bello E se scrivessimo le nostre API in JavaScript e chiamassimo quelle API dal nostro front-end? Sì, è fantastico, perché se affrontiamo qualsiasi problema in API possiamo esaminarlo. Indovina un po ! puoi farlo ora, come? - Il nodo è lì per te.

Ok ha convenuto che puoi scrivere la tua API in JavaScript, ma cosa succede se sto bene con il problema di cui sopra. Avete altri motivi per utilizzare il nodo per l'API di riposo?

quindi ecco che inizia la magia. Sì, ho altri motivi per utilizzare il nodo per le nostre API.

Torniamo al nostro sistema API di resto tradizionale basato su operazioni di blocco o threading. Supponiamo che si verifichino due richieste simultanee (r1 e r2), ognuna delle quali richiede il funzionamento del database. Quindi nel sistema tradizionale cosa succederà:

1. Waiting Way: il nostro server inizia a servire la richiesta r1 e attende la risposta alla query. dopo il completamento di r1 , il server inizia a servire r2 e lo fa nello stesso modo. Quindi aspettare non è una buona idea perché non abbiamo molto tempo.

2. Threading Way: il nostro server creerà due thread per entrambe le richieste r1 e r2 e servirà allo scopo dopo aver interrogato il database in modo che sia veloce. Ma consuma memoria perché è possibile vedere che abbiamo avviato due thread, anche il problema aumenta quando entrambe le richieste eseguono query stessi dati quindi devi affrontare problemi tipo deadlock. Quindi è meglio che aspettare, ma ci sono ancora problemi.

Ora qui, come il nodo lo farà:

3. Nodeway: quando la stessa richiesta simultanea arriva nel nodo allora registrerà un evento con il suo callback e proseguirà non attenderà la risposta alla query per una particolare richiesta. r1 quando viene richiesta r1 allora il ciclo degli eventi del nodo (sì c'è un evento loop in nodo che serve a questo scopo.) registrare un evento con la sua funzione di callback e andare avanti per servire la richiesta r2 e registrare analogamente il suo evento con il suo callback. Ogni volta che una query termina, attiva il relativo evento ed esegue la richiamata fino al completamento senza essere interrotta.

Quindi niente attesa, niente threading, nessun consumo di memoria - sì, questo è il nodeway per servire l'API di riposo.


Posso condividere alcuni punti in cui e perché utilizzare il nodo js.

  1. Per le applicazioni in tempo reale come la chat, la modifica collaborativa andiamo meglio con nodejs in quanto è una base di eventi in cui vengono generati eventi di incendio e dati ai client dal server.
  2. Semplice e facile da capire in quanto è javascript di base dove la maggior parte delle persone ha idea.
  3. La maggior parte delle attuali applicazioni Web vanno verso js angolari e backbone, con il nodo è facile interagire con il codice lato client poiché entrambi useranno i dati JSON.
  4. Molti plugin disponibili.

Svantaggi: -

  1. Il nodo supporterà la maggior parte dei database, ma la cosa migliore è mongodb che non supporterà join complessi e altri.
  2. Errori di compilazione ... lo sviluppatore dovrebbe gestire ogni e ogni altra eccezione, se qualche errore si verificasse, l'applicazione smetterebbe di funzionare, dove ancora dovremo andare e avviarla manualmente o usando uno strumento di automazione.

Conclusione: - Nodejs è il migliore da usare per le applicazioni semplici e in tempo reale ... se si dispone di una logica aziendale molto ampia e le funzionalità complesse migliori non dovrebbero utilizzare nodejs. Se vuoi creare un'applicazione con chat e qualsiasi funzionalità collaborativa .. il nodo può essere utilizzato in parti specifiche e rimanere dovrebbe andare con la tua tecnologia di convenienza.


Se l'applicazione utilizza principalmente web apis o altri canali io, fornisce o utilizza un'interfaccia utente, node.js può essere una scelta giusta per te, soprattutto se vuoi spremere la maggior scalabilità o, se la tua lingua principale nella vita è javascript (o transporter di javascript di sorta). Se costruisci microservizi, anche node.js va bene. Node.js è adatto anche per qualsiasi progetto che sia piccolo o semplice.

Il suo principale punto di forza è che i front-ender si assumono la responsabilità per il back-end piuttosto che per il tipico divario. Un altro punto di vendita giustificabile è se la forza lavoro è orientata in javascript per cominciare.

Al di là di un certo punto, tuttavia, non è possibile ridimensionare il codice senza terribili hack per forzare la modularità, la leggibilità e il controllo del flusso. Ad alcune persone piacciono gli hack, specialmente se provengono da uno sfondo javascript basato su eventi, sembrano familiari o perdonabili.

In particolare, quando l'applicazione deve eseguire flussi sincroni, si inizia a sanguinare su soluzioni semi-elaborate che rallentano notevolmente in termini di processo di sviluppo. Se nella tua applicazione ci sono parti intensive di calcolo, calcola con cautela la selezione (solo) node.js. Forse Koajs o altre novità alleggeriscono quegli aspetti originariamente spinosi, rispetto a quando inizialmente ho usato node.js o scritto questo.





web-applications