C'è un buon motivo per evitare node.js per le app Web non in tempo reale?


29

Ho visto molte discussioni su quanto sia straordinario Node.js per le app Web in tempo reale - cose che richiedono socket, Comet, comunicazioni pesanti AJAX e così via. So che il suo modello basato su eventi, asincrono, basato su thread è anche buono per la concorrenza con costi generali bassi.

Ho anche visto tutorial di Node.js per app più semplici, "tradizionali" e non in tempo reale (ad esempio, l'esempio di blog standard, che sembra essere il "Hello World" standard per le persone che imparano lo sviluppo di app). E so anche che il nodo statico ti consente di servire risorse statiche.

La mia domanda è: c'è qualche buona ragione per evitare Node.js per le app Web tradizionali, come annunci, forum, il suddetto esempio di blog o il tipo di app CRUD che costruisci per le applicazioni aziendali interne? Solo perché eccelle in tutte le cose funky in tempo reale, è controindicato per usi più stabili?

L'unica cosa che mi viene in mente, a dir poco, è la mancanza di librerie mature (anche se questo sta cambiando).

(Il motivo per cui mi sto chiedendo è che sto pensando di abbandonare PHP per Node.js, soprattutto per superare l'impedenza non corrispondente del passaggio tra le lingue, ma anche così posso riutilizzare il codice di validazione e quant'altro. Il mio super-io mi ammonisce di scegliere il lo strumento migliore per il lavoro ; tuttavia, non ho molto tempo per imparare quindici lingue e tutte le loro librerie di utenti solo per avere un arsenale completo. È anche rassicurante che Node.js possa darmi un percorso di ottimizzazione più semplice di PHP / Apache in futuro quando dovrò iniziare a pensare al traffico intenso.)

[EDIT] Grazie per le risposte finora, gente; Voglio solo vedere se qualcun altro peserà prima di scegliere una risposta. La risposta di @Raynos in qualche modo conferma ciò che sto pensando, e i collegamenti dei commentatori hanno fornito un buon spunto di riflessione, ma voglio vedere se qualcun altro ha delle risposte specifiche del nodo, come "NON USARE IL NODO PER IL PROBLEMA X '. (Oltre alle attività con CPU elevata, lo so già :-)


1
@ default.kramer: grazie per il link, mi sono davvero divertito!
Zach,

1
Wow! Amico piuttosto supponente, eh? Nell'articolo di follow-up, sembra dire che, per applicazioni con I / O elevato e CPU bassa, i sistemi con eventi e thread sono approssimativamente alla pari e che il problema sta nei programmatori alle prime armi che non sanno quando rinunciare agli eventi e generare un nuovo thread. Ma l'ignoranza del programmatore non significa che lo strumento sia cattivo, vero? Sono d'accordo sul fatto che l'utilizzo di un ambiente il cui forté è il loop di eventi per attività ad alta intensità di CPU sia un po 'strano, ma è male?
Paul d'Aoust,

1
Anche il suo odio per JavaScript sembra essere un problema importante, che temo possa essere in parte responsabile dell'energia alla base della sua tesi.
Paul d'Aoust,

@Paul - Probabilmente dovresti prenderlo con un granello di sale. Non so molto su Node.js; Ho solo pensato che fosse divertente. (come la maggior parte dei suoi scritti)
default.kramer

@ default.kramer grazie per il promemoria; Tendo a prendere le opinioni delle persone come vangelo. La sua principale critica valida sembra essere che non dovresti usare Node.js per attività che richiedono molta CPU. Sono confuso per le sue critiche nei confronti dei processi dei lavoratori; c'è qualche grosso problema con la creazione di lavoratori separati per compiti specifici?
Paul d'Aoust,

Risposte:


13

c'è qualche buon motivo per evitare Node.js per le app Web tradizionali

Sì, se hai N anni nella piattaforma Web X, allora chiaramente puoi sviluppare un'applicazione nella piattaforma X più velocemente.

Se vuoi fare Y e la piattaforma X ha una soluzione pre-made Y che fa X allora fallo.

Tutti i motivi generici del perché dovresti usare una piattaforma piuttosto che un'altra.

il tipo di app CRUD che crei per le applicazioni aziendali interne?

Sì, ci sono altre piattaforme che ti consentono di scrivere un'applicazione generica più velocemente, mi viene in mente Ruby on Rails.

Tuttavia, ciò detto. Ho esperienza con il nodo e non posso affermare che sceglierei un'altra piattaforma rispetto al nodo a meno che non faccia una quantità enorme di funzionalità per me.

Fondamentalmente è una semplice domanda di

Esiste uno strumento che fa tutto questo per me? No, quindi scegli la piattaforma più conveniente per scrivere lo strumento.

Non ci sono validi motivi per cui node.js sia una piattaforma scomoda (a parte "odio javascript")


Quindi pensi che principi pragmatici come la familiarità, la disponibilità di biblioteche, ecc., Siano argomenti forti per una determinata piattaforma, eh? Questi sono buoni pensieri, e sono sicuramente cose che sto prendendo in considerazione. (Sono sorpreso che tu stia sostenendo soluzioni
pronte all'uso

@ Pauld'Aoust Sono un tipo roll-your-own kinda. Tuttavia non ottengo nulla e non ho scadenze.
Raynos,

eh, grazie per l'avvertimento. Ricordo i tuoi commenti sulla chat di node.js sull'utilizzo delle librerie di modelli di altre persone (Backbone.js, ecc.) E sulla consapevolezza che stavo trascorrendo troppo tempo a imparare Backbone.js e non abbastanza tempo a sfruttare (e apprendere) i JavaScript meccanismo prototipico di eredità. Buon Consiglio; Mi sento molto più rilassato ora.
Paul d'Aoust,

4
-1 vago. 1) Solo perché hai N anni di esperienza in X - non significa che dovresti evitare Node.JS. Stai proponendo l'ignoranza intenzionale basata sull'esperienza? E quali sono i "motivi generici"? 2) "altre applicazioni che ti consentono di scrivere un'applicazione generica più velocemente" - è puramente soggettiva. 3) 'altro * diverso da "* Odio * JavaScript' - è anche soggettivo e non è un motivo valido per evitare una tecnologia fiorente. * Ortografia.
Jack Stone

@ClintNash alcuni dei tuoi motivi non sono diversi dai suoi. "Risorse umane" vs "N anni di esperienza" sono esattamente gli stessi. "NodeJS non è maturo come i framework tradizionali" vs "Sì, ci sono altre piattaforme che ti permettono di scrivere un'applicazione generica più velocemente, mi viene in mente il rubino su rotaie." sono anche gli stessi. Non solo sono uguali, ma i tuoi non sono più misurabili (oggettivi) dei suoi.
aaaaaa,

6

Dopo aver lavorato con il nodo per alcune settimane, direi di sì, è molto bello. Ma non necessariamente qualcosa che vorresti usare per sostituire le tue app web run-of-the-mill con ... né, imo, dovrebbe essere.

Ricorda, il nodo è il suo server. Ciò introduce complessità se si desidera eseguire più di una sola applicazione node.js. cioè se hai più di un sito / dominio ospitato su una macchina. Non è come uno stack LAMP, in cui è possibile avere una dozzina di applicazioni PHP per una mezza dozzina di domini diversi in esecuzione sullo stesso server (almeno sulla porta 80). Esistono framework per il nodo che probabilmente lo rendono possibile, ma ciò aggiunge l'aggiunta della complessità che non ti serve se ti attacchi alle piattaforme web tradizionali. (Naturalmente, puoi anche impostare i proxy mettendo un web server davanti al nodo, ma quel tipo di sconfigge il vantaggio dell'uso del nodo).

imo, Node è perfetto per lavorare in combinazione con un web server tradizionale. Il modo in cui ho organizzato le cose ora è servire l'html / js / images statico tramite apache e gestire le esigenze di dati "in tempo reale" mediante un lungo polling all'applicazione del nodo.


La facilità d'uso +1 nella configurazione di più host è sicuramente da prendere in considerazione.
Paul d'Aoust,

È abbastanza semplice mettere le app dei nodi dietro un server httpd o nginx di Apache e instradare le richieste con la firma URI di quell'app alla porta (o alle porte) del nodo.
TomG

+1: la nozione di node.js come proxy lato server ('in congiunzione con il web server tradizionale') ha guadagnato trazione all'inizio di quest'anno e vale la pena esaminarla, soprattutto se si ha una grande architettura tradizionale da gestire. È un modello di progettazione che sembra avere senso per l'impresa. Ma vale la pena notare: questo non è un motivo per EVITARE Node.js ma un motivo per usarlo per scopi specifici.
Jack Stone,

4
-1 - Mettere un proxy (come nginx) davanti al nodo è un caso d'uso perfetto ed è in realtà molto più sicuro e performante in alcuni casi che non averne affatto. Non sconfigge alcun vantaggio del nodo. Tendo a eseguire le app del nodo su socket di dominio unix e quindi fare in modo che nginx funga da gatekeeper.
Scott Anderson,

3

Un buon motivo per pensare in secondi al nodo non è tecnico - è fantastico e sorprendente in quello che fa.

Sono affari e in particolare il capitale umano, vale a dire programmatori che lo sanno, quanto costano e la loro disponibilità. Non è così difficile da imparare, ma come con qualsiasi tecnologia più recente il numero di persone che lo conoscono bene (o vogliono) è un sottotitolo dei più grandi gruppi di lavoratori.


quindi pensi che non ci sia molto contro l'utilizzo di Node al posto di stack di app più tradizionali; i problemi hanno più a che fare con le preoccupazioni del mondo reale?
Paul d'Aoust,

+1. Le risorse umane - e la riluttanza di alcuni a imparare JavaScript - è una verità scomoda. Questa risposta lo afferma bene. Ma evitare Nodo "perché le persone odiano JavaScript" non è neppure la progressione logica. Dove saremmo tecnicamente se evitassimo ogni innovazione - che qualcun altro odiava? Da nessuna parte. La sfida con il nodo è A) Ottenere nuovi talenti o B) Educare i talenti tradizionali a nuovi talenti. A quel punto - stiamo assistendo alla comparsa di scuole di codice JavaScript ovunque dopo la lungimiranza di John Resig nella fondazione della Khan Academy. In breve, questo è il modo di fare. +1. Ben dichiarato.
Jack Stone,

3

Questa è un'ottima domanda, che dobbiamo porre, al fine di far avanzare troppo lo stato dell'arte.

Ero molto curioso di sapere (come Paul d'Aoust) dove esistono i limiti di Node.JS. Purtroppo, molte risposte sono piene di parzialità soggettiva e di motivazioni temporaneamente rilevanti.

Mi sono chiesto: POSSIAMO FILTRARE LA BIAS SOGGETTIVA E RIPRENDERSI ALLE SOLIDE RISPOSTE A QUESTA DOMANDA ATTINENTE?

I punti rimanenti sembrano essere:

1. NodeJS non è maturo come i framework tradizionali. Come suggerisce Paul d'Aoust, questo è solo un motivo temporaneamente rilevante, non per evitarlo completamente, ma piuttosto rivedere e due diligence. Ci aspettiamo di fare i compiti come professionisti del web, ed è nostro compito determinare la soluzione migliore della tecnologia per l'organizzazione, le loro esigenze, il loro futuro, il team (e non noi). La maturità è un bisogno di chiarimenti e un giudizio di appetito per il rischio, ma non di evitamento.

2. NodeJS come server proxy. Un saggio suggerimento, di discussione precedente, che vale la pena rivedere e considerare. È l'idea di utilizzare Node in correlazione con le tecnologie esistenti come modello di progettazione proxy dell'interfaccia front-end. Inoltre, non è un motivo per EVITARE di usare il nodo, ma piuttosto un motivo per evitare di usarlo come una sostituzione completa. Invece optando per un approccio corollario.

3. Nodo di debug. In una conversazione con gli sviluppatori di Node core di Joyent c'è molta complicazione riguardo alla debuggabilità e alla rintracciabilità della causa principale dei problemi derivanti dal core (basato sull'esecuzione di un singolo thread e sull'incapacità di vedere nei thread passati). Vale la pena prendere in considerazione e valutare - ma (di nuovo) probabilmente non l'avversione per l'uso comune, solo casi limite che potrebbero spingere troppo. Forse le tue esigenze specifiche rientrerebbero in questa categoria e forse no.

4. Risorse umane. Questo è il motivo migliore per EVITARE di usare JS in questa pagina e, a mio modesto parere, è una verità netta e scomoda. Sorge la domanda: la tua azienda ha a disposizione i professionisti di talento giusti per vedere il progetto attraverso l'intero ciclo di vita? In caso contrario, non c'è dubbio che è necessario evitare NodeJS. O invece considera A) la ricerca del talento corretto o B) Educazione del talento esistente.

Reclami: la mia osservazione dei reclami su JavaScript è che, molti derivano più dall'errore dell'utente che da errori coerenti della lingua. Abbiamo smascherato molte affermazioni contro "The Hate JavaScript Diatribe" e continueremo a ridimensionare molte altre. Problemi come - la documentazione non è abbastanza buona, non è abbastanza sexy, ma alla gente non piace, è il cancro, è il diavolo, o è troppo "incline" (-CRichardson), sono soggettivi e reclami di parte che devono essere eliminati per un accurato processo decisionale aziendale.

Alla fine, potrebbe essere la risposta corretta: non ci sono buoni motivi per EVITARE NodeJS . Forse è per questo che sta vivendo una rapida crescita, adozione e contributo. Ma per tutti noi forse la risposta qui è continuare a valutare, ricercare e comprendere meglio NodeJS - e cercare avversioni concrete. Nel tentativo di essere aperti a capire esattamente dove Node.JS è immaturo, troviamo esattamente dove dobbiamo migliorarlo. E questa è una benedizione.

Buona domanda. Io per primo rimango curioso per qualcuno di far apparire un motivo migliore per evitare NodeJS - di questi.


-1

C'è qualche vantaggio nell'uso di node over X per applicazioni non in tempo reale:

  • Ridimensionamento : il nodo ha buone prestazioni ma anche altre piattaforme; PHP, Ruby, Python e Java tutti in scala. Puoi trovare GRANDI nomi con milioni di utenti che li utilizzano.
  • Una lingua per frontend e backend : è uno scherzo, proprio come Java "Scrivi una volta eseguito ovunque"
  • Caldo e sexy : l'unico punto valido. Ma a nessuno importa che il tuo sito web stia usando una tecnologia spigolosa!

Vantaggi dell'uso di X over Node per applicazioni non in tempo reale:

  • Best practice : poiché Node è nuovo, presenta meno best practice rispetto ad altre piattaforme, specialmente per le applicazioni Web CRUD.
  • Lingua Javascript : alle persone non piace Javascript. Mentre Node.js è caldo, Javascript non lo è. Questo è il motivo per cui le persone hanno creato Coffeescript per evitare di scrivere Javascript anche per il lato client.
  • Velocità di sviluppo : i vecchi e noiosi framework inclusi e non limitati a Rails e Django sono ben testati e migliorati nel corso degli anni per i siti Web CRUD. Sebbene sia possibile implementare applicazioni simili in Node, è più semplice eseguirlo nel framework di tuo nonno.
  • Stabilità : i framework Web di Node stanno migliorando a un ritmo più rapido. Significa che stanno cambiando e avranno più incompatibilità API nel prossimo futuro.
  • Librerie e strumenti : le tecnologie più vecchie con più utenti hanno più librerie e strumenti.

La mia risposta sicuramente non sarà valida nel 2015. Nel 2014, salta Nodo per applicazioni Web non in tempo reale, ma tienilo d'occhio.

Ogni framework web ha un punto di forza. Sarai felice mentre lo stai usando per quel punto. Le applicazioni Web non in tempo reale non sono il punto di forza dei framework Web di Node.


2
-1. Concordo sul fatto che questa risposta non sarà valida nel 2015. Ma questo è anche un ragionamento per il downvote. In sostanza, le decisioni di oggi SONO le decisioni di domani. Annulla gli 8 punti elenco sopra riportati - se possiamo vedere che sono solo temporaneamente rilevanti. 1) Ridimensionamento: Walmart Mobile scala, non è un motivo per evitare Node. 2) Isomorfo JS non è uno scherzo. Non è un motivo. 3) Server Sexyness? La maggior parte degli utenti conosce solo ux. 4) La migliore pratica è soggettiva, 5) Non è caldo? -soggettivo 6) Più facile? -soggettivo. 7) La stabilità è un punto temporaneamente rilevante. 8) L'NPM avrebbe dovuto superare Maven nel 2014. Nessun motivo qui. Downvote.
Jack Stone,

-1

Node.js è una piattaforma molto popolare e ha molte caratteristiche interessanti blah blah blah, ma l'uso di uno strumento è una preferenza personale. Ho dato Node.js quattro volte e non ero contento. Ecco i miei motivi Si prega di tenere presente che alcuni di questi motivi sono obsoleti o semplicemente personali: P

  • Ho preferito diverse lingue / sintassi (mi piace Python, Scala, la mia lingua preferita è Prolog quindi sì).
  • La qualità della documentazione per i framework e le librerie che ho usato non è buona per le librerie Java, Scala, Python.
  • I progettisti dei nodejs sono piuttosto ossessionati dai callback anziché dal modello di eventi, dall'osservatore o dai futuri.
  • Ci sono già pronti per quello che voglio fare in Ruby, Python, Java sviluppato nel 2005, ho solo bisogno di modificare il file di configurazione.

2
-1 - Punti soggettivi. "Sintassi preferita", "Documentazione non altrettanto valida", "Richiami ossessivi" e "Già fatto nella mia lingua" - sono tutti vaghi e soggettivi. Li abbiamo già sentiti prima. Sono sfatati. Nessun motivo per evitare Node.JS qui. Downvote.
Jack Stone,

1
Tutti i punti sono le mie preferenze personali che ho dichiarato apertamente. Inoltre, come si esegue il debug delle preferenze personali?
David Sergey,

-9

HTTP è senza stato, quindi in realtà non esiste un'app Web non in tempo reale e quindi nessun motivo per cui non è possibile utilizzare il nodo per tutto.

Detto questo, il nodo è più adatto per un particolare tipo di architettura dell'applicazione. PHP è un file html che contiene un po 'di codice. Il nodo è un codice che facoltativamente contiene un po 'di HTML.

Ciò significa che se l'app è in formato HTML standard senza script lato client, PHP sarà più semplice. Node ha strumenti di template, ma ovviamente non così maturi come qualcosa come PHP.

Se hai molti script lato client e salvi i dati con ajax, finisci con un client html statico che chiama le funzioni sul server. Questo è esattamente ciò in cui il nodo è bravo. Sebbene non sia il modo in cui le app CRUD di solito sono costruite, puoi produrre qualcosa di molto carino con il framework giusto.


Punto preso sul fatto che HTTP sia apolide e in tempo reale; tuttavia, sono più interessato alle preoccupazioni pragmatiche sulla definizione tipica di tempo reale: alti volumi di richieste di peso ridotto. Sembra un po 'eccessivo creare una nuova istanza di PHP solo per vomitare tre o quattro righe di JSON a volte. Sono corretto o soffro solo della sindrome del pappagallo?
Paul d'Aoust,

Se non stai caricando PHP, stai caricando javascript e ci sono vari tipi di memorizzazione nella cache, quindi la differenza non sarà sufficiente per preoccuparti. La grande differenza sta nello stile di codifica e quindi nella manutenibilità: entrambe le piattaforme possono generare HTML o JSON, ma PHP è stato progettato per le persone abituate a modificare i file html statici, mentre il nodo è stato progettato per le persone abituate alla moderna programmazione javascript.
Tom Clarkson,

So che devo caricare un interprete qualche volta, ma vedo un vantaggio avere un'istanza dell'interprete sempre in esecuzione (per le app a bassa CPU, ovviamente) come in Node.js piuttosto che far girare gli interpreti e terminare con ogni richiesta, come in PHP.
Paul d'Aoust,

Sì, e mi aspetto anche che js abbia prestazioni migliori a livello di singola richiesta data la quantità di concorrenza in quello spazio recentemente. Tuttavia, penso che questa sia una parte relativamente piccola della differenza: con il nodo hai il controllo diretto e esattamente la quantità di codice necessaria per soddisfare la richiesta, mentre qualsiasi sistema basato su modelli che presume che stai servendo le pagine aggiungerà sovraccarico e complessità inutili in altri scenari.
Tom Clarkson,
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.