11 mars 2025 (updated: 11 mars 2025)
Chapters
Effektene av noen valg kan vare i årevis. Programvareutviklere, uansett erfaringsnivå, kjenner dette problemet perfekt, og teknologivalg er en av dem.
Å skrive om en gammel kode i et sensitivt og komplisert banksystem? Eller vil du bare bygge et nytt hobbyprosjekt — teknologivalg er alltid en veldig komplisert beslutning, fordi mange faktorer, som prosjektteamets størrelse eller oppgaveplanlegging, spiller inn i det.
Hva skal man velge da? I denne artikkelen, vil jeg sammenligne to av de mest kjente teknologiene for å lage webapplikasjoner - Ruby on Rails og Node.js. Begge er mye tilpasset i mange forskjellige prosjekter og produkter i små og store programvareselskaper. Jeg vil vise deres egenskaper og forskjeller mellom dem i spesifiserte kategorier.
Ruby on Rails-rammeverket ble introdusert i 2004 av David Heinemeier Hansson, som et enkelt og mer komfortabelt alternativ for å lage full-stack webapplikasjoner i Ruby-språket. Dets største fordel er “out of the box” klar prosjektkonfigurasjon ved å gi programmerere klare moduler og verktøy for rask og enkel implementering av de viktigste elementene i hver webapplikasjon. Den viktigste regelen som Rails representerer er “Don’t repeat yourself” som tvinger utviklere til å lage gjenbrukbare moduler og kodebiter for å redusere risikoen for feil. Disse funksjonene har fått mange kjente selskaper som Hulu, Airbnb og Github til å gi Rails en sjanse og skape mange vellykkede digitale produkter.
For å være 100% presis, er Node.js ikke et rammeverk. Dette er en åpen kildekode runtime-miljøplattform basert på Javascript-språket, for å kjøre JS utenfor nettleseren. Det ble introdusert i 2009 av Ryan Dahl, hvis oppdrag var å skape et utviklermiljø der du kunne bruke bare ett programmeringsspråk for å lage backend- og frontend-deler av en webapplikasjon. Dens høye effektivitet, ytelse og konfigurasjonsfleksibilitet har fått mange fans i hele bransjen, noe som fremgår av dens brede bruk i mange kjente selskaper, f.eks. Medium, Uber og Netflix.
Teknologisammenligninger er aldri en enkel oppgave. Enten det er rammeverk, språk eller andre verktøy vi skal velge, er jobben vår alltid den samme - å tilføre verdi til sluttbrukeren. Detaljene er avgjørende - hvor raskt, i hvilket omfang, eller teamstørrelse er bare noen få viktige faktorer som vil være nyttige i beslutningsprosessen vår. Til slutt, besluttet vi å bruke tre enkle kategorier og prøvde å finne ut hvilket av de to Rails vs Node-rammeverkene som ville passe best.
Vi hører vanligvis at ytelse er det viktigste elementet når det gjelder valg av teknologier. Jeg er enig i at dette er en betydelig faktor, men ikke helt avgjørende i noen tilfeller. Alt avhenger av prosjektets størrelse og egenskaper, behandlet datavolum, eller antall brukere. Både Node og Rails varierer fra hverandre når det gjelder effektivitet.
Ruby on Rails er basert på Ruby-språket som, til tross for stor sympati i utviklerfellesskapet, ikke er et perfekt verktøy for å lage svært effektiv programvare. Det er et tolket språk, som har en søppeloppsamler - et verktøy for automatisk minnehåndtering, hovedsakelig for å rydde opp i minnet til en brukt app. Søppeloppsamleren er hovedårsaken til den midlertidige nedgangen i webapplikasjonen og dens ressurskrevende utnyttelse. Selvfølgelig finnes det mange forskjellige løsninger for å forbedre effektiviteten, som f.eks. JIT-kompilatorer, men vanligvis bruker det vår tid og penger. Rene, “out of the box” Rails er ikke perfekte for svært effektive, sensitive systemer som f.eks. streamingtjenester.
På den annen side er Node.js bygget litt annerledes. Dets arkitektur er basert på Single-threaded Event Loop-arkitektur, som betyr (uten å gå inn på tekniske detaljer) at det håndterer flere samtidige forespørselene med høy ytelse uten unødvendig belastning på hovedapptråden. Slik arkitektur gir Node en stor fordel når det gjelder ytelse blant mange forskjellige plattformer. I tillegg, med Javascript V8-motoren fra Google sammen med JS-språkets fordeler (f.eks. asynkronitet) gir oss en veldig kraftig og rask plattform for å lage webapplikasjoner for tung databelastning.
Så, alt avhenger av skalaen - for små prosjekter uten mange oppgaver og funksjoner, vil Ruby on Rails være et godt valg. Men når produktet vårt vokser og antall forespørselene og dataene blir større og større, vil Node.js være et bedre alternativ for å håndtere alle oppgavene.
Når du velger et rammeverk, er det viktig å ha fleksibilitet i implementeringen av løsninger. Det spiller ingen rolle hvilken måte eller mønster for å lage programvare du velger, du vil at dette valget skal føles som en komfortabel og uanstrengt beslutning. La oss se hva Rails og Node.js har å tilby.
Ved bruk av Node har utviklere et bredt spekter av konfigurasjonsmuligheter. En-trådet Event Loop-arkitektur, sammen med full støtte for asynkron kommunikasjon mellom ulike komponenter, gjør Node til en flott plattform for svært tilpasset programvare. Det støtter "Model View Presenter" (MVP) og "Model View Controller" (MVC) skrivemønstre som lar hver utvikler velge sin egen strategi og kodekonvensjon. En stor fordel med å bruke Node.js er muligheten til å lage all backend- og frontend-infrastruktur ved å bruke bare ett språk - Javascript (eller Typescript, som er enda mer populært i dag). Dette er spesielt nyttig når man skriver tilpassede serverbaserte apper og mikrotjenestekomponenter i større team.
Ruby on Rails drives av regelen "Konvensjon fremfor konfigurasjon". Ved å holde seg nærmere monolittisk arkitektur, er prosjektkonfigurasjonen i Rails-rammeverket satt "ut av boksen", noe som sparer tid i de fleste utviklingsprosesser. Moduler som ActiveRecord eller verktøy som modellskjelett, sammen med det velkjente MVC-mønsteret - alle disse tingene er for rask og smertefri full-stack webapp-opprettelse og distribusjon, for å bringe ideer til sluttbrukeren og teste det til lave kostnader. Med Ruby som et objektorientert programmeringsspråk med veldig enkel og lettlest syntaks, er det mye enklere og raskere å levere nye funksjoner enn i andre backend-rammeverk. Takket være dette fokuserer utviklerne mer på å implementere forretningslogikk i appen vår, i stedet for å bruke tid på konfigurasjon og oppsett av kodekonvensjon.
Begge eksemplene har veldig forskjellige tilnærminger her. Node.js har flotte konfigurasjonsmuligheter, noe som gir mye mening når vi trenger å lage svært tilpasset og effektiv programvare, f.eks. finanssystemer eller streaming. Det er et flott valg når du planlegger å lage systemet ditt basert på mikrotjenestearkitektur. På den annen side vil Ruby on Rails være flott for prosjekter der forretningslogikk og idétesting er mye viktigere enn infrastruktur eller ytelse. Takket være dette fokuserer utviklerne hovedsakelig på å levere en idé til brukeren.
Våre ambisjoner er store, og våre håp er enda større - vi ønsker at produktet vårt skal brukes av millioner over hele verden, og bringe nye brukere hver dag, samtidig som vi prøver å utvikle produktet vårt ved å legge til nye funksjoner som gjør det bedre. Hvis du føler det samme, tro meg - jeg ønsker deg alt godt, men først ting først. La oss sjekke potensialet til både Rails og Node for skalerbarhet og vekst for å håndtere alle disse ambisiøse planene.
Rails-prosjekter er gjerne bygget med monolittisk arkitektur i tankene, noe som gjør det til et mindre ideelt rammeverk for skalering. Sammen med ytelsesproblemer, blir det et godt valg for Proof of Concepts eller MVP-er, men for større prosjekter er det mye vanskeligere å vedlikeholde. Men la oss være presise - vanskelig betyr ikke umulig. Dette krever imidlertid investering av mange ressurser sammenlignet med andre mainstream rammeverk. Raskt skalerte RoR-applikasjoner lider av utilstrekkelig minnehåndtering og dårlig samtidighet. Imidlertid har teknologigiganter med en rik Rails-implementasjonskultur vist at RoR kan skalere applikasjoner som håndterer høyere trafikk. Shopify’s Black Friday Cyber Monday-helg i 2022 viser dette perfekt:
Another Black Friday Cyber Monday (BFCM) weekend done and dusted!
— Shopify Engineering (@ShopifyEng) November 30, 2022
We achieved 99.999+% uptime while averaging 3 Terabytes per minute of egress traffic across our infrastructure.
That’s 4.3 Petabytes per day! 🤯
Check out the thread for more awesome performance stats 🧵👇
Når det gjelder skalerbarhet, er Node.js en ren vinner. Dens arkitektur basert på en hendelsesdrevet modell og mikroservices (som vanligvis skalerer mye lettere enn monolitter) gjør at progressive applikasjoner kan deles opp i mindre, uavhengige deler. Hver av disse delene vil være i stand til å håndtere et høyt volum av forespørsel. Takket være dette er det lettere å organisere arbeidet i et selskap - alt vi trenger å gjøre er å dele eksisterende utviklingsteam opp i mindre deler for å jobbe med separate mikroservices. Alle disse tingene gjør Node.js til en flott kandidat for å lage store, skalerbare systemer.
Hva er bedre for ditt neste prosjekt - Ruby on Rails eller Node.js? Som du kan se, er dette to helt forskjellige teknologier laget for å tjene svært forskjellige formål. Node.js er en flott plattform for større applikasjoner som serverbackend-apper og API-er, støttet av en godt skalerbar og effektiv mikroservicearkitektur. Rails derimot har mye mer fordel når du trenger å levere et initialt prosjekt eller idé til sluttbrukeren raskt - uten å fokusere på ytelse, skalerbarhet eller andre lignende ting - bare slipp ideen din så raskt som mulig og se hva brukerne synes om den.
Når vi ser på 2022 Stack Overflow Developer Survey kan vi se at blant alle rammeverk Node.js er elsket av nesten 68% av respondentene og over 11% ønsker å lære det. Rails-tallene er henholdsvis 55% og 3% - det er mye mindre og det viser at vi for øyeblikket lever i Javascript / Node.js hype-tider, mens Rails, til tross for et stort fellesskap som støtter og slipper nye versjoner hvert år, blir mindre populært. Hvorfor? Språket er nøkkelen der, antar jeg. Javascript er det mest populære språket akkurat nå. 2022 markerer det tiende året på rad som det mest brukte programmeringsspråket i verden. Ved å bruke det kan du lage både backend- og frontend-applikasjoner og spare tid på å lære en annen backend-teknologi eller rammeverk.
En ting å huske på - uansett hvilken teknologi du velger, er forretningsmodellen og en tilpasset strategi de viktigste tingene for utviklingen av produktet ditt. Når det vurderes godt, hjelper det deg å tilfredsstille behovene til produktet og brukerne helhetlig, uten å ofre den ene for den andre på lang sikt.
11 mars 2025 • Maria Pradiuszyk