Hej, venner, i denne artikel vil vi sammenligne Node.js versus Ruby on Rails til webudvikling. Hovedårsagen til at jeg skrev denne artikel er, at vores team konstant bliver spurgt om, hvilket sprog eller hvilket framework der er bedst at lære. Anyway, vi giver aldrig et simpelt svar, fordi de ikke er det entydige svar. Så jeg tror, at det næstbedste er at se på alle fakta og statistikker. Vi vil tage et kig på nogle af fordelene og nogle af ulemperne ved både Node.js og Ruby on Rails som server-side-teknologier. Inden vi begynder, vil jeg gerne komme med et par bemærkninger. Vi kan allerede høre kritikerne sige: Hvordan vil du sammenligne Node.js, som er en runtime, med Ruby on Rails, som er et framework? Jeg forstår godt argumentet, men det, jeg vil sammenligne, er de to server-side-teknologier og webstacks. Lad os nu få klarhed over, hvad der er bedre at lære lige nu, og hvad der er bedre at implementere for en virksomhed. Jeg siger ikke, at du skal sammenligne direkte funktioner i Ruby on Rails med Node.js, hvis det får dig til at føle dig bedre til at erstatte Node.js med noget som Express eller nogle andre Node-baserede frameworks. Anyway, vi sammenligner backend-strukturer og stakke, ikke den enkelte teknologi. Vores team har arbejdet med begge teknologier, og nogle af os kan lide begge teknologier. Jeg promoverer ikke den ene frem for den anden. Det er også vigtigt at forstå, at det, der virker for os, måske ikke virker for dig og omvendt. Du skal også huske, at alles hjerner er forskellige. Der findes ikke noget kageskåret svar på dette spørgsmål.
Lad os gå i gang med at se på nogle af lighederne mellem de to teknologier.
- Populære server-side-teknologier.
- Meget let at lære.
- Høj ydeevne.
- Anvendt af topwebsteder/applikationer.
- Stærkt fællesskab.
- Lignende MVC-baseret struktur.
- Hurtig udvikling.
Både Node.js og Rails er velrespekterede og populære server-side teknologier, der kan gøre mange forskellige ting. De kan arbejde med mange forskellige stacks og databaser og så videre. Begge er forholdsvis nemme at lære. Node bruger JavaScript og Rails bruger Ruby. Men Ruby og JavaScript er nemmere at lære end noget som Java, C# eller nogle af de højere niveauer af sprog. De er begge ret tilgivende sprog, og der findes et væld af ressourcer til at lære dem. Node.js og Ruby on Rails yder rigtig godt, og vi vil tale om ydelsesniveauet. Der er mange eksempler på populære websteder, der bruger begge teknologier. Node og Rails har meget stærke og meningsfulde fællesskaber.
Rails har eksisteret lidt længere og har flere gamle kendinge. Men Node bliver mere og mere populær hver dag. Nu er MVC eller Model-View-Controller et designet mønster. Og Ruby on Rails har hård MVC. Du har en mappe til dine modeller, dine controllere og dine views. MVC er muligt med visse frameworks i Node såsom Express. Express er dog meget mere fleksibel i sin struktur end Rails er. Du kan bare tage visse aspekter af MVC. Det er ikke den eneste mulige struktur. Node og Rails bruges til hurtig udvikling og prototyping. Rails har en fantastisk foldningsfunktion, og Express har også generatorer og kommandolinjeværktøjer.
Rails Fordele
- Konsistent struktur.
- Meget meningsskabende.
- Databasemigrationer.
- Speed of Development.
- Ruby er et fantastisk sprog.
- Ruby gems.
- Modenhed og respekteret fællesskab.
Først vil vi se på fordelene ved Ruby on Rails og derefter på ulemperne. Som sagt har Rails en meget stærk MVC-struktur. De fleste Rails-applikationer kommer til at se meget ens ud med hensyn til kernefiler og mapper. Du har dette stærke fundament, og så kan du bygge videre på det med gems og brugerdefinerede pakker og biblioteker. Derudover er Rails meget holdningspræget, hvilket betyder, at det tvinger dig til at følge dets måde at gøre tingene på. Rails forudsætter, at du skriver kode på en bestemt måde, og nogle mennesker vil måske sige, at det er lidt restriktivt. Men det giver også en nemmere og meget renere kode, og det gør det også sværere at skabe fejl og problemer. Det er ikke begrænsende i den forstand, at du ikke kan lave det, du ønsker, men blot den måde, du skal nå dertil på. Hvis du gør det på den rigtige måde, vil det højst sandsynligt være den nemmeste vej.
Rails har også en rigtig god database-migreringsfunktionalitet. De giver os mulighed for at gøre ting som at oprette og redigere tabeller og kolonner i vores database uden at skulle gå manuelt ind og tilføje eller ændre ting. Det giver dig også en fin lille log eller sti, som du kan følge for at se præcis, hvad der er blevet gjort ved strukturen i din database.
Nu til Node. Der findes nogle pakker eller moduler til migreringer såsom DB-migrate, som kan fungere rigtig godt, men det er ikke så dybdegående og brugervenligt som Rails chord migrationssystem. Når det kommer til prototyping og hurtig udvikling er der ikke ret mange teknologier derude, der kan slå Rails. Så med lidt grundlæggende konfiguration og et par scaffolding-kommandoer har du selv en fuldt fungerende CRUD-applikation. Databasemigrationer tilføjes til denne hastighed. Node.js og Express er ret gode til hurtig udvikling, hvis du bruger tredjeparts værktøjer og moduler. Men Rails har alt det der lige ud af boksen.
Der er nogle fordele og ulemper ved Ruby-sproget, men for det meste er det velrespekteret, og det er meget rent. Ruby er et multiparadigmesprog, du kan lave procedurel kode funktionel, men for det meste er det objektorienteret. Alt kan ses som et objekt. RubyGems er en pakkehåndtering til Ruby on Rails, og den bruges til at udvide rammeværkets kernefunktionalitet. Det svarer til npm for Node.js. Alle Rails-programmer har en gem-fil, hvor du kan angive dine gems. Derefter kan du køre en bundler-kommando for at installere dem alle, svarende til npm install med Node.js.
En anden god ting ved Ruby on Rails er, at det har eksisteret i et stykke tid, og at det har et meget respekteret og intelligent fællesskab. De udviklere, der vedligeholder Ruby on Rails, er ekstremt kloge og meget passionerede omkring frameworket. Der er et væld af ressourcer på kerneframeworket, herunder fora, blogindlæg og dokumentation, der kan hjælpe dig, hvis du går i stå. Det er så nogle af de store fordele ved Ruby on Rails.
Rails ulemper
- Performance
- Tå simpel
- Popularitet
- Mangel på dokumentation
Lad os tale om nogle af ulemperne. Nogle af de største klager, som vi har hørt om Ruby on Rails, er, at det er relativt langsomt. Rails er et stort framework med en masse funktioner i sin kerne. Ligesom nogle af de lettere frameworks, har du også faktoren i gem- og applikationsfilafhængigheder. Der er så meget automatisering og stilladsering, at udvikleren ikke rigtig lærer særlig meget om, hvordan Rails-rammen fungerer. Du kender måske til Ruby-sproget, syntaksen eller strukturen af deres applikation, men for en person, der virkelig forstår, hvordan Rails fungerer, er dette fantastisk på grund af den hurtige udvikling. På den anden side er nogle af udviklerne virkelig nødt til at gå den ekstra mil for virkelig at forstå visse ting. Rails er også langt vanskeligere for store projekter end små applikationer. Det kan også have nogle problemer med skalering.
Så en anden ulempe er, at Rails ikke er lige så populært som Node.js. På nuværende tidspunkt er Node.js på forkant med webudvikling, og begejstringen for Rails er virkelig gået nedad. Efter vores mening vil vi, hvis du leder efter et job, helt klart sige, at du skal lære Node og sandsynligvis Express. Flere virksomheder ansætter JS-udviklere end noget andet sprog. Hvis dette var for fem år siden, ville Rails eller Ruby være et af de tre bedste sprog at lære. Men i disse dage er det bare ikke så populært. Så jeg nævnte kort tidligere, at Rails-rammen i kernen har en rigtig god dokumentation og eksempler, så du kan lære simple scaffolding-kommandoer og databasemigration. Det er alt sammen fint nok. Men når man forsøger at lære mere avanceret programmering, og man forsøger at lære om specifikke gems, føles det nogle gange som at lede efter en Newton-nål i en høstak.
Nogle ret store navne har brugt eller bruger Ruby on Rails i deres platform. Jeg tror ikke, at man kan blive meget større end Twitter. Desuden har de flyttet en masse af deres backend-tjenester til Scala og Java på grund af nogle skaleringsproblemer. Men de har brugt Rails i lang tid, og jeg er ret sikker på, at de stadig bruger det i andre aspekter af deres platform, f.eks. i deres partnerskab med Shopify. Derudover har Basecamp, som er en projektstyringsløsning, sagt, at Rails er hjertet og sjælen i deres projekt. Den software, der kører GitHub, blev bygget på Rails. Soundcloud og Hulu, som er en populær streamingtjeneste, blev bygget på Rails. Fra starten har Groupon og LivingSocial, SlideShare og Urban Dictionary brugt Rails i deres udvikling.
Node.js Fordele
- Ekstremt populært.
- Høj ydeevne.
- Asynkron.
- Meget skalerbart.
- JavaScript front og backend.
- Fleksibel filstruktur.
- npm og moduler.
Nu har vi kigget på Rails, så lad os begynde at kigge på Node.js. Vi starter med fordelene. Et stort plus ved Node.js er dens ekstreme popularitet. Det er dybest set den nye banebrydende teknologi inden for webudvikling. Der er en meget stor efterspørgsel på markedet. Det er ekstremt populært for startups. Der er et blomstrende open source-fællesskab omkring Node og Express-rammen. Der er mange veludviklede moduler på npm, og når det drejer sig om hastighed og ydeevne, slår Node Rails lige ud af vandet. Faktisk slår det stort set alting ud af vandet. Det kører på Google JavaScript-motoren, som er lynhurtig. Node bruges til at bygge webapplikationer i realtid, der næsten føles som desktopapplikationer.
Næst er Node.js også asynkront. Det betyder, at når et program sender en anmodning til serveren, behøver det ikke at vente på svaret. Det kan fortsætte med at udføre. Node kører på en enkelt tråd i modsætning til andre sprog, der sender anmodningen. De venter, indtil denne anmodning er færdig, og sender derefter den næste og så videre. Så Node.js er også meget skalerbart, og det spiller en stor rolle i den forbindelse at være på en enkelt tråd. Node fungerer også rigtig godt med NoSQL-databaser som MongoDB, der er meget mere skalerbart end traditionelle relationelle databaser som MySQL. Næsten alle store virksomheder, som jeg læser om, er gået over til Node.js, og de har rapporteret om i hvert fald en rimelig stigning i produktiviteten.
En anden stor Node-fordel er, at den bruger JavaScript, som er meget udbredt med mange webstacks. Mange gange er sproget i frontend’en forskelligt fra backend’en, men det er ikke tilfældet, når man bruger Node.js. Vi bruger JavaScript på frontend og backend. Der er et væld af klientsideframeworks, som dominerer branchen – React, Angular, Vue.js. Så det er et stort plus for Node.js. JavaScript fungerer naturligvis også godt med JSON-API’er, som er meget populære.
Node.js, Express eller Happy.js, alle disse frameworks har en virkelig fleksibel filstruktur. De giver dig mulighed for at opbygge dine applikationer, som du vil. Du kan proppe alting ind i en enkelt app JS-fil. Hvis du ønsker at have en mere traditionel MVC-struktur, mener jeg, at der er både gode og dårlige sider ved dette. Men for det meste, hvis du ved, hvad du laver, og du er en god programmør, så er fleksibilitet en god ting. Ligesom Ruby gems, har Node også sin egen pakkehåndtering kaldet npm, eller Node package manager. Den største forskel mellem npm og Ruby gems er den måde, som afhængigheder håndteres på. Med Ruby installeres afhængigheder globalt. Så du skal bruge en bundler og skal på en måde selv administrere dem. npm tager sig faktisk af alt dette for dine moduler. De bliver lagt i mappen Node-moduler. Derefter kan disse moduler også have deres egen Node-modulmappe med deres egne afhængigheder. npm-moduler synes også at have bedre dokumentation, i det mindste efter min erfaring.
Node.js Ulemper
- Sucks for CPU-intensive opgaver.
- Inkonsistens.
- Nyere teknologi.
- Callback-helvede.
- Tå modulært.
Så vi kiggede på de positive og fordelene ved Node.js. Lad os nu se på nogle ulemper. Lige så god som Node er til mange CRUD-agtige applikationer, lige så dårlig er den til applikationer, der er CPU-intensive. Grunden til dette er, at når den gør noget, der tager et stykke tid, såsom CPU-operation, vil den sætte alle de indkommende anmodninger i kø, fordi den kører på en enkelt tråd. Noget som Apache, der har flere tilgængelige tråde, vil dele denne CPU-tid op mellem dem. Og kun IO-operationer er parallelle, fordi de udføres asynkront. Et eksempel på en CPU-intensiv opgave er noget som 3d-rendering, videokodning, videnskabelig modellering osv.
En anden klage over Node er, at den kan være lidt inkonsekvent. Nogle mener, at API’et bliver ved med at ændre sig med hyppige mellemrum. Det er nogle gange ikke særlig bagudkompatibelt. Ikke kun det, men strukturen af en Express-applikation er generelt meget fri og fleksibel. Nogle gange kan det give udviklere nok reb til at hænge sig selv.
Rails er meget streng, så det er sværere at skrive dårlig kode. Da Node er asynkron, kommer du til at have med mange callback-funktioner at gøre, og de kan ofte boble op og komme ud i det, der kaldes callback-helvede. Der er løsninger på dette, som f.eks. async utilities og brug af promises. Der er et par ting, som du kan gøre for at forhindre dette. Personligt generer det mig ikke, men jeg ved, at nogle udviklere, der ikke er vant til asynkron programmering, har et problem med en masse callbacks.
Som du kan se, har begge disse backend-muligheder deres fordele og ulemper, men de er begge fantastiske teknologier. Alt bør altid vurderes fra sag til sag i stedet for bare at sige, at den ene er bedre end den anden i alle situationer.