Hej killar, i den här artikeln kommer vi att jämföra Node.js kontra Ruby on Rails för webbutveckling. Huvudanledningen till att jag skrev den här artikeln är att vårt team ständigt får frågan om vilket språk eller vilket ramverk som är bäst att lära sig. Hur som helst, vi ger aldrig ett enkelt svar eftersom de inte är det klara svaret. Så jag tror att det näst bästa är att titta på alla fakta och all statistik. Vi ska ta en titt på några av fördelarna och några av nackdelarna med både Node.js och Ruby on Rails för tekniker på serversidan. Innan vi börjar vill jag ta upp ett par saker. Så vi kan redan höra kritikerna säga hur ska du kunna jämföra Node.js som är en körtid med Ruby on Rails som är ett ramverk? Jag förstår argumentet, men det jag tänker jämföra är de två serverbaserade teknikerna och webbstaplarna. Låt oss nu klargöra vad som är bättre att lära sig just nu och vad som är bättre att implementera för ett företag. Jag säger inte att man ska jämföra raka funktioner i Ruby on Rails med Node.js om det får dig att känna dig bättre att ersätta Node.js med något som Express eller några andra Node-baserade ramverk. Hur som helst jämför vi backend-strukturer och stackar, inte den enskilda tekniken. Vårt team har arbetat med båda teknikerna och vissa av oss gillar båda teknikerna. Jag förespråkar inte den ena framför den andra. Det är också viktigt att förstå att det som fungerar för oss kanske inte fungerar för dig och vice versa. Du bör också komma ihåg att allas hjärnor är olika. Det finns inget standardiserat svar på den här frågan.
Låt oss börja med att titta på några av likheterna mellan de båda teknikerna.
- Populära tekniker på serversidan.
- Förhållande lätt att lära sig.
- Hög prestanda.
- Används av toppwebbplatser/applikationer.
- Stark gemenskap.
- Liknande MVC-baserad struktur.
- Snabb utveckling.
Både Node.js och Rails är välrespekterade och populära serverbaserade tekniker som kan göra många olika saker. De kan arbeta med många olika stackar och databaser och så vidare. Båda är ganska lätta att lära sig. Node använder JavaScript och Rails använder Ruby. Men Ruby och JavaScript är lättare att lära sig än något som Java, C# eller några av dessa språk på högre nivå. De är båda ganska förlåtande språk och det finns massor av resurser för att lära sig dem. Node.js och Ruby on Rails presterar riktigt bra och vi kommer att tala om prestandanivån. Det finns många exempel på populära webbplatser som använder båda teknikerna. Node och Rails har mycket starka och åsiktsstyrda communities.
Rails har funnits lite längre och har fler gamlingar. Men Node blir mer populärt för varje dag. Nu är MVC eller Model-View-Controller ett designat mönster. Och Ruby on Rails har hård MVC. Du har en mapp för dina modeller, dina kontrollanter och dina vyer. MVC är möjligt med vissa ramverk i Node, till exempel Express. Express är dock mycket mer flexibel i sin struktur än vad Rails är. Du kan bara ta vissa aspekter av MVC. Det är inte den enda möjliga strukturen. Node och Rails används för snabb utveckling och prototyper. Rails har en fantastisk vikningsfunktion och Express har generatorer och kommandoradsverktyg också.
Rails fördelar
- Konsistent struktur.
- Väldigt åsiktsstyrt.
- Databasmigreringar.
- Snabb utveckling.
- Ruby är ett bra språk.
- Ruby gems.
- Mognad och respekterad gemenskap.
Först ska vi ta en titt på fördelarna med Ruby on Rails och sedan på nackdelarna. Rails har som sagt en mycket stark MVC-struktur. De flesta Rails-applikationer kommer att se väldigt lika ut när det gäller kärnfiler och mappar. Du har den starka grunden och sedan bygger du på den med gems och anpassade paket och bibliotek. Dessutom är Rails mycket åsiktsstyrt, vilket innebär att det tvingar dig att följa dess sätt att göra saker och ting. Rails förutsätter att du skriver kod på ett visst sätt och vissa kan tycka att det är lite begränsande. Men det ger också enklare, mycket renare kod och det gör det också svårare att skapa fel och problem. Det är inte begränsande i den bemärkelsen att du inte kan skapa vad du vill, utan bara det sätt på vilket du ska nå dit. Om du gör det på rätt sätt kommer det med största sannolikhet att vara den enklaste vägen.
Rails har också en riktigt bra funktion för databasmigrering. De låter oss göra saker som att skapa och redigera tabeller och kolumner i vår databas utan att behöva gå in manuellt och lägga till eller ändra saker. Det ger dig också en fin liten logg eller stig som du kan följa för att se exakt vad som har gjorts med strukturen i din databas.
Nu till Node. Det finns en del paket eller moduler för migreringar som DB-migrate som kan fungera riktigt bra, men det är inte lika djupgående och lättanvänt som Rails chord migrationssystem. När det gäller prototyper och snabb utveckling finns det inte så många tekniker som kan slå Rails. Så, med lite grundläggande konfiguration och ett par scaffoldingkommandon har du själv en fullt fungerande CRUD-applikation. Databasmigreringar läggs till den hastigheten. Node.js och Express är ganska bra med snabb utveckling om du använder tredjepartsverktyg och moduler. Men Rails har allt det där direkt ur lådan.
Det finns en del för- och nackdelar med språket Ruby, men för det mesta är det väl respekterat och det är väldigt rent. Ruby är ett språk med flera paradigmer, du kan göra procedurell kod funktionell, men för det mesta är det objektorienterat. Allt kan betraktas som ett objekt. RubyGems är en pakethanterare för Ruby on Rails och används för att utöka ramverkets kärnfunktionalitet. Det liknar npm för Node.js. Alla Rails-program har en gem-fil där du kan ange dina gems. Sedan kan du köra ett bundler-kommando för att installera dem alla, på samma sätt som npm install med Node.js.
En annan bra sak med Ruby on Rails är att det har funnits ett tag och att det har en mycket respekterad och intelligent gemenskap. De utvecklare som underhåller Ruby on Rails är extremt smarta och mycket passionerade för ramverket. Det finns massor av resurser om det centrala ramverket, inklusive forum, blogginlägg och dokumentation för att hjälpa dig om du fastnar. Detta är några av de stora fördelarna med Ruby on Rails.
Rails nackdelar
- Prestanda
- För enkelt
- Popularitet
- Mangel på dokumentation
Låt oss tala om några av nackdelarna. Några av de största klagomålen som vi har hört om Ruby on Rails är att det är relativt långsamt. Rails är ett stort ramverk med många funktioner i sin kärna. Liksom några av de lättare ramverken måste du också ta hänsyn till beroenden av gem- och applikationsfiler. Det finns så mycket automatisering och ställningar att utvecklaren egentligen inte lär sig särskilt mycket om hur Rails-ramverket fungerar. Du kanske känner till Ruby-språket, syntaxen eller strukturen på din applikation, men för någon som verkligen förstår hur Rails fungerar är detta fantastiskt på grund av den snabba utvecklingen. Å andra sidan måste vissa av utvecklarna verkligen anstränga sig extra mycket för att verkligen förstå vissa saker. Rails är också mycket svårare för stora projekt än för små applikationer. Det kan ha vissa problem med skalning också.
En annan nackdel är att Rails inte är lika populärt som Node.js. Just nu ligger Node.js i framkant när det gäller webbutveckling och uppståndelsen för Rails har verkligen sjunkit. Enligt vår åsikt skulle vi, om du letar efter ett jobb, definitivt säga att du ska lära dig Node och förmodligen Express. Fler företag anställer JS-utvecklare än något annat språk. Om detta var för fem år sedan skulle Rails eller Ruby vara ett av de tre främsta språken att lära sig. Men nuförtiden är det helt enkelt inte lika populärt. Så jag nämnde kort tidigare att det centrala Rails-ramverket har riktigt bra dokumentation och exempel, vilket gör att du kan lära dig enkla scaffoldingkommandon och databasmigrering. Det är helt okej. Men när du försöker lära dig mer avancerad programmering och du försöker lära dig om specifika gems känns det ibland som att leta efter en Newton-nål i en höstack.
Några ganska stora namn har använt eller använder Ruby on Rails i sin plattform. Jag tror inte att man kan bli mycket större än Twitter. Dessutom har de flyttat många av sina backend-tjänster till Scala och Java på grund av vissa skalningsproblem. Men de använde Rails länge och jag är ganska säker på att de fortfarande använder det i andra aspekter av sin plattform, t.ex. i sitt partnerskap med Shopify. Dessutom har Basecamp, som är en lösning för projekthantering, sagt att Rails är hjärtat och själen i deras projekt. Programvaran som driver GitHub byggdes på Rails. Soundcloud och Hulu, som är en populär streamingtjänst, byggdes på Rails. Från början har Groupon och LivingSocial, SlideShare och Urban Dictionary använt Rails i sin utveckling.
Node.js fördelar
- Extremt populärt.
- Hög prestanda.
- Asynkron.
- Senast skalbart.
- JavaScript front och backend.
- Flexibel filstruktur.
- npm och moduler.
När vi nu har tittat på Rails ska vi börja titta på Node.js. Vi börjar med fördelarna. Ett stort plus med Node.js är dess extrema popularitet. Det är i princip den nya banbrytande tekniken inom webbutveckling. Det finns en mycket stor efterfrågan på marknaden. Den är extremt populär för nystartade företag. Det finns ett blomstrande open source-community kring Node och Express-ramverket. Det finns många välutvecklade moduler på npm, och när det gäller snabbhet och prestanda slår Node Rails direkt ur vattnet. Egentligen slår Node nästan allting ur vattnet. Den körs på Googles JavaScript-motor som är blixtsnabbt. Node används för att bygga webbprogram i realtid som nästan känns som skrivbordsprogram.
Nästan är Node.js också asynkron. Det innebär att när ett program skickar en begäran till servern behöver det inte vänta på svaret. Det kan fortsätta att exekvera. Node körs på en enda tråd till skillnad från andra språk som skickar begäran. De väntar tills den begäran är klar och skickar sedan nästa och så vidare. Node.js är alltså också mycket skalbar och att köra på en enda tråd spelar en stor roll för detta. Node fungerar också mycket bra med NoSQL-databaser som MongoDB, som är mycket mer skalbar än traditionella relationsdatabaser som MySQL. Nästan alla stora företag som jag läst om har gått över till Node.js och de har rapporterat åtminstone en hyfsad ökning av produktiviteten.
En annan stor fördel med Node är att det använder JavaScript, som används i stor utsträckning med många webbstackar. Många gånger skiljer sig språket på frontend från backend, men så är inte fallet när man använder Node.js. Vi använder JavaScript på front-end och back-end. Det finns massor av ramverk på klientsidan som dominerar branschen – React, Angular, Vue.js. Så det är ett stort plus för Node.js. Självklart fungerar JavaScript också bra med JSON API:er, som är mycket populära.
Node.js, Express eller Happy.js, alla dessa ramverk har en mycket flexibel filstruktur. De låter dig konstruera dina applikationer som du vill. Du kan klämma in allting i en enda app JS-fil. Om du vill ha en mer traditionell MVC-struktur tror jag att det finns både bra och dåliga sidor av detta. Men för det mesta, om du vet vad du gör och är en bra programmerare, är flexibilitet en bra sak. Precis som Ruby gems har Node också en egen pakethanterare som heter npm, eller Node package manager. Den största skillnaden mellan npm och Ruby gems är hur beroenden hanteras. Med Ruby installeras beroenden globalt. Så du måste använda en bundler och måste på sätt och vis hantera dem på egen hand. npm tar faktiskt hand om allt detta för dina moduler. De placeras i mappen Node-moduler. Sedan kan dessa moduler också ha en egen Node-modulmapp med egna beroenden. npm-moduler verkar också ha bättre dokumentation, åtminstone enligt min erfarenhet.
Node.js Nackdelar
- Suger för CPU-intensiva uppgifter.
- Inkonsistens.
- Nyare teknik.
- Callback-helvete.
- To modulärt.
Så vi har tittat på de positiva och fördelarna med Node.js. Nu ska vi titta på några nackdelar. Hur bra Node än är för många CRUD-liknande tillämpningar så suger det helt och hållet för tillämpningar som är processorintensiva. Anledningen till detta är att när den gör något som tar tid, t.ex. en CPU-operation, kommer den att ställa alla inkommande förfrågningar i kö eftersom den körs på en enda tråd. Något som Apache, som har fler tillgängliga trådar, kommer att dela upp CPU-tiden mellan dem. Endast IO-operationer är parallella eftersom de utförs asynkront. Ett exempel på en CPU-intensiv uppgift är något som 3d-rendering, videokodning, vetenskaplig modellering etc.
Ett annat klagomål på Node är att det kan vara lite inkonsekvent. En del anser att API:et hela tiden ändras med täta intervaller. Det är ibland inte särskilt bakåtkompatibelt. Inte bara det, utan strukturen för en Express-applikation är i allmänhet mycket fri och flexibel. Ibland kan det ge utvecklare tillräckligt med rep för att hänga sig.
Rails är mycket strikt, så det är svårare att skriva dålig kod. Eftersom Node är asynkron kommer du att ha att göra med många callback-funktioner och de kan ofta bubbla upp och hamna i det som kallas callback-helvetet. Det finns lösningar på detta, till exempel asynkrona verktyg och användning av löften. Det finns några saker som du kan göra för att förhindra detta. Detta stör mig personligen inte, men jag vet att vissa utvecklare som inte är vana vid asynkron programmering har problem med många callbacks.
Som du kan se har båda dessa backend-alternativ sina för- och nackdelar, men de är båda fantastiska tekniker. Allt bör alltid utvärderas från fall till fall istället för att bara säga att det ena är bättre än det andra i alla situationer.