Ciao, ragazzi, in questo articolo confronteremo Node.js contro Ruby on Rails per lo sviluppo web. La ragione principale per cui ho scritto questo articolo è che al nostro team viene costantemente chiesto quale linguaggio o quale framework è meglio imparare. Comunque, non diamo mai una risposta semplice perché non è una risposta chiara. Quindi penso che la prossima cosa migliore sia guardare tutti i fatti e le statistiche. Daremo un’occhiata ad alcuni dei vantaggi e ad alcuni degli svantaggi sia di Node.js che di Ruby on Rails per le tecnologie lato server. Prima di iniziare, vorrei fare un paio di punti. Possiamo già sentire i critici che dicono: come potete paragonare Node.js che è un runtime a Ruby on Rails che è un framework? Capisco l’argomentazione, ma quello che voglio confrontare sono le due tecnologie lato server e gli stack web. Ora facciamo chiarezza su cosa è meglio imparare subito e cosa è meglio implementare per un business. Non sto dicendo di confrontare direttamente le caratteristiche di Ruby on Rails con quelle di Node.js se vi fa sentire meglio sostituire Node.js con qualcosa come Express o qualche altro framework basato su Node. Comunque, confrontiamo strutture e stack di backend, non la singola tecnologia. Il nostro team ha lavorato con entrambe le tecnologie e ad alcuni di noi piacciono entrambe le tecnologie. Non sto promuovendo una rispetto all’altra. È anche importante capire che ciò che funziona per noi potrebbe non funzionare per voi e viceversa. Inoltre, dovreste ricordare che il cervello di ognuno è diverso. Non c’è una risposta “cookie cutter” per questa domanda.

Andiamo avanti e iniziamo a guardare alcune delle somiglianze tra le due tecnologie.

  • Tecnologie lato server popolari.
  • Facile da imparare.
  • Alte prestazioni.
  • Utilizzato dai migliori siti web/applicazioni.
  • Comunità forte.
  • Struttura simile basata su MVC.
  • Sviluppo rapido.

Sia Node.js che Rails sono tecnologie lato server ben rispettate e popolari che possono fare molte cose diverse. Possono lavorare con molti stack e database diversi e così via. Entrambe sono abbastanza facili da imparare. Node usa JavaScript e Rails usa Ruby. Ma Ruby e JavaScript sono più facili da imparare di qualcosa come Java, C# o alcuni di quei linguaggi di livello superiore. Sono entrambi linguaggi piuttosto indulgenti e ci sono un sacco di risorse per impararli. Node.js e Ruby on Rails funzionano molto bene e parleremo del livello di performance. Ci sono molti esempi di siti web popolari che usano entrambe le tecnologie. Node e Rails hanno delle comunità molto forti e piene di opinioni.

Rails è stato in giro un po’ più a lungo e ha più vecchie conoscenze. Ma Node sta diventando sempre più popolare ogni giorno. Ora MVC o Model-View-Controller è un modello progettato. E Ruby on Rails ha un MVC duro. Hai una cartella per i tuoi modelli, i tuoi controller e le tue viste. MVC è possibile con alcuni framework in Node come Express. Tuttavia Express è molto più flessibile nella sua struttura rispetto a Rails. Puoi solo prendere alcuni aspetti dell’MVC. Non è l’unica struttura possibile. Node e Rails sono usati per lo sviluppo rapido e la prototipazione. Rails ha una fantastica funzione di piegatura e anche Express ha generatori e strumenti a riga di comando.

Vantaggi di Rails

  • Struttura consistente.
  • Molto opinionata.
  • Migrazioni di database.
  • Velocità di sviluppo.
  • Ruby è un grande linguaggio.
  • Gemme di Ruby.
  • Maturità e comunità rispettata.

Prima, daremo un’occhiata ai vantaggi di Ruby on Rails e poi agli svantaggi. Come ho detto, Rails ha una struttura MVC molto forte. La maggior parte delle applicazioni Rails saranno molto simili in termini di file e cartelle principali. Avete questa forte base e poi ci costruite sopra con gemme e pacchetti e librerie personalizzate. Inoltre, Rails è molto presuntuoso, il che significa che vi fa aderire al suo modo di fare le cose. Rails presuppone che scriverete codice in un certo modo e alcune persone potrebbero dire che è un po’ restrittivo. Ma rende anche il codice più facile, molto più pulito e rende anche più difficile creare errori e problemi. Non è restrittivo nel senso che non si può creare ciò che si vuole, ma solo il modo in cui ci si arriva. Se lo fai nel modo giusto, molto probabilmente sarà il percorso più facile.

Rails ha anche un’ottima funzionalità di migrazione di database. Ci permettono di fare cose come creare e modificare tabelle e colonne nel nostro database senza dover andare manualmente ad aggiungere o cambiare cose. Ti dà anche un piccolo log o un percorso che puoi seguire per vedere esattamente cosa è stato fatto alla struttura del tuo database.

Ora passiamo a Node. Ci sono alcuni pacchetti o moduli per le migrazioni come DB-migrate che può funzionare davvero bene, ma non è così approfondito e facile da usare come il sistema di migrazione degli accordi di Rails. Quando si tratta di prototipazione e sviluppo rapido non ci sono troppe tecnologie là fuori che possono battere Rails. Quindi, con qualche configurazione di base e un paio di comandi di scaffolding si ha un’applicazione CRUD completamente funzionante. Le migrazioni di database sono aggiunte a quella velocità. Node.js e Express sono abbastanza buoni con uno sviluppo veloce se si usano strumenti e moduli di terze parti. Ma Rails ha tutta quella roba proprio fuori dalla scatola.

Ci sono alcuni pro e contro del linguaggio Ruby, ma per la maggior parte, è ben rispettato ed è molto pulito. Ruby è un linguaggio multi-paradigma, si può fare codice procedurale funzionale, ma per la maggior parte, è orientato agli oggetti. Tutto può essere visto come un oggetto. RubyGems è un gestore di pacchetti per Ruby on Rails ed è usato per estendere le funzionalità di base del framework. È simile a npm per Node.js. Tutte le applicazioni Rails hanno un file gem dove potete specificare le vostre gemme. Poi si può eseguire un comando bundler per installarle tutte, in modo simile a npm install con Node.js.

Un’altra grande cosa di Ruby on Rails è che è in giro da un po’ e ha una comunità molto rispettata e intelligente. Gli sviluppatori che mantengono Ruby on Rails sono estremamente intelligenti e molto appassionati al framework. C’è una tonnellata di risorse sul framework di base, inclusi forum, post sul blog e documentazione per aiutarvi se vi bloccate. Questi sono alcuni dei grandi vantaggi di Ruby on Rails.

Svantaggi di Rails

  • Performance
  • Troppo semplice
  • Popolarità
  • Mancanza di documentazione

Parliamo di alcuni degli svantaggi. Alcune delle maggiori lamentele che abbiamo sentito su Ruby on Rails è che è relativamente lento. Rails è un grande framework con un sacco di caratteristiche nel suo nucleo. Così come alcuni dei framework più leggeri, avete anche il fattore delle dipendenze dei gem e dei file dell’applicazione. C’è così tanta automazione e scaffolding che lo sviluppatore non impara molto su come funziona il framework Rails. Può conoscere il linguaggio Ruby, la sintassi o la struttura della sua applicazione, ma per qualcuno che capisce davvero come funziona Rails, questo è ottimo per il suo rapido sviluppo. D’altra parte, alcuni sviluppatori devono davvero fare il passo più lungo della gamba per capire davvero certe cose. Rails è anche molto più difficile per grandi progetti che per piccole applicazioni. Può anche avere alcuni problemi di scalabilità.

Un altro svantaggio è che Rails non è così popolare come Node.js. In questo momento, Node.js è all’avanguardia nello sviluppo web e l’entusiasmo per Rails è davvero diminuito. A nostro parere, se stai cercando un lavoro, ti diremmo sicuramente di imparare Node e probabilmente Express. Più aziende stanno assumendo sviluppatori JS che qualsiasi altro linguaggio. Se questo fosse stato cinque anni fa, Rails o Ruby sarebbero stati tra i primi tre linguaggi da imparare. Ma in questi giorni non è così popolare. Quindi ho accennato brevemente prima che il nucleo del framework Rails ha una documentazione ed esempi davvero buoni, che ti permettono di imparare semplici comandi di scaffolding e la migrazione dei database. Tutto questo va bene. Tuttavia, quando si cerca di imparare una programmazione più avanzata e si cerca di conoscere gemme specifiche, a volte sembra di cercare un ago di Newton in un pagliaio.

Alcuni nomi piuttosto grandi hanno usato o usano Ruby on Rails nella loro piattaforma. Non credo che si possa diventare molto più grandi di Twitter. Inoltre, hanno spostato molti dei loro servizi di backend a Scala e Java a causa di alcuni problemi di scalabilità. Ma hanno usato Rails per molto tempo e sono abbastanza sicuro che lo usano ancora in altri aspetti della loro piattaforma, come la loro partnership con Shopify. Inoltre, Basecamp, che è una soluzione di gestione dei progetti, ha detto che Rails è il cuore e l’anima del loro progetto. Il software che gestisce GitHub è stato costruito su Rails. Soundcloud e Hulu, che è un popolare servizio di streaming, sono stati costruiti su Rails. Fin dall’inizio, Groupon e LivingSocial, SlideShare e Urban Dictionary hanno usato Rails nel loro sviluppo.

Svantaggi di Node.js

  • Estremamente popolare.
  • Prestazioni elevate.
  • Asincrono.
  • Molto scalabile.
  • JavaScript front e backend.
  • Struttura dei file flessibile.
  • npm e moduli.

Ora che abbiamo visto Rails, iniziamo a guardare Node.js. Inizieremo con i vantaggi. Un enorme vantaggio di Node.js è la sua estrema popolarità. È fondamentalmente la nuova tecnologia all’avanguardia nello sviluppo web. C’è una domanda di mercato molto alta. È estremamente popolare per le startup. C’è una fiorente comunità open-source intorno a Node e al framework Express. Ci sono molti moduli ben sviluppati su npm, e quando si tratta di velocità e prestazioni Node batte Rails fuori dall’acqua. A dire il vero, fa fuori dall’acqua praticamente qualsiasi cosa. Gira sul motore JavaScript di Google che è velocissimo. Node è usato per costruire applicazioni web in tempo reale che sembrano quasi applicazioni desktop.

Inoltre, Node.js è anche asincrono. Questo significa che quando un programma invia una richiesta al server, non deve aspettare la risposta. Può continuare ad eseguire. Node viene eseguito su un singolo thread, al contrario di altri linguaggi che inviano la richiesta. Aspettano fino a quando la richiesta è fatta, poi inviano quella successiva e così via. Quindi Node.js è anche molto scalabile e l’essere su un singolo thread gioca un ruolo importante in questo. Node funziona anche molto bene con i database NoSQL come MongoDB, che è molto più scalabile dei tradizionali database relazionali come MySQL. Quasi tutte le grandi aziende di cui ho letto sono passate a Node.js, e hanno riportato almeno un aumento decente della produttività.

Un altro grande vantaggio di Node è che usa JavaScript, che è ampiamente utilizzato con molti stack web. Molte volte, il linguaggio sul front-end è diverso dal back-end, ma questo non è il caso quando si usa Node.js. Stiamo usando JavaScript sul front-end e sul back-end. Ci sono un sacco di framework lato client che stanno dominando l’industria – React, Angular, Vue.js. Quindi questo è un enorme vantaggio per Node.js. Ovviamente, JavaScript funziona bene anche con le API JSON, che sono molto popolari.

Node.js, Express, o Happy.js, ognuno di questi framework ha una struttura di file davvero flessibile. Ti permettono di costruire le tue applicazioni come vuoi. Potete incastrare tutto in un singolo file JS dell’applicazione. Se volete avere una struttura MVC più tradizionale, penso che ci siano lati positivi e negativi in questo. Ma per la maggior parte, se sai cosa stai facendo e sei un buon programmatore, allora la flessibilità è una buona cosa. Come le gemme di Ruby, anche Node ha il suo gestore di pacchetti chiamato npm, o Node package manager. La più grande differenza tra npm e le gemme di Ruby è il modo in cui vengono gestite le dipendenze. Con Ruby, le dipendenze sono installate globalmente. Quindi devi usare un bundler e devi gestirle per conto tuo. npm in realtà si occupa di tutto questo per i tuoi moduli. Vengono messi nella cartella Node modules. Poi questi moduli possono anche avere la propria cartella Node modules con le proprie dipendenze. I moduli npm sembrano anche avere una migliore documentazione, almeno nella mia esperienza.

Node.js Svantaggi

  • Fa schifo per compiti intensivi della CPU.
  • Incoerenza.
  • Nuova tecnologia.
  • Callback hell.
  • Troppo modulare.

Allora abbiamo visto gli aspetti positivi e i vantaggi di Node.js. Ora guardiamo alcuni svantaggi. Per quanto Node sia buono per molte applicazioni in stile CRUD, fa assolutamente schifo per le applicazioni che sono intensive di CPU. La ragione di questo è che ogni volta che fa qualcosa che richiede un po’ di tempo come le operazioni della CPU, metterà in coda tutte le richieste in arrivo perché gira su un singolo thread. Qualcosa come Apache, che ha più thread disponibili, dividerà quel tempo di CPU tra loro. E solo le operazioni IO sono parallele perché vengono eseguite in modo asincrono. Un esempio di un compito intensivo della CPU è qualcosa come il rendering 3d, la codifica video, la modellazione scientifica, ecc.

Un’altra lamentela su Node è che può essere un po’ incoerente. Alcuni ritengono che l’API continui a cambiare ad intervalli frequenti. A volte non è molto compatibile all’indietro. Non solo, ma la struttura di un’applicazione Express, in generale, è molto libera e flessibile. A volte può dare agli sviluppatori abbastanza corda per impiccarsi.

Rails è molto rigido, quindi è più difficile scrivere cattivo codice. Dal momento che Node è asincrono, avrete a che fare con un sacco di funzioni di callback, che spesso possono gonfiarsi e finire in quello che viene chiamato callback hell. Ci sono soluzioni a questo, come le utilità asincrone e l’uso di promesse. Ci sono alcune cose che si possono fare per prevenire questo. Questo personalmente non mi preoccupa, ma so che alcuni sviluppatori che non sono abituati alla programmazione asincrona hanno un problema con un sacco di callback.

Come potete vedere entrambe queste opzioni di backend hanno i loro pro e contro, ma sono entrambe tecnologie fantastiche. Tutto dovrebbe sempre essere valutato caso per caso, piuttosto che dire semplicemente che una è meglio dell’altra in tutte le situazioni.

Si può dire che la tecnologia è meglio dell’altra in tutte le situazioni.

Articles

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.