Node.js vs Go:
Då den är ansvarig för all affärslogik och andra känsliga operationer under huven, är baksidan av din app verkligen den viktigaste delen av din produkt. Det finns många faktorer som definierar kvaliteten på en app, t.ex. dess förmåga att prestera bra och skala smidigt samt kodens underhållbarhet och den övergripande systemsäkerheten. Allt detta beror direkt på kvaliteten på webbapplikationens backend. Därför är det viktigt att välja rätt verktyg för ditt projekt.
När det gäller att välja en teknisk stack för backendutveckling har du en uppsjö av alternativ: Ruby, Node.js, Go, Python, PHP osv. Inom denna mångfald kan det vara betungande att fatta ett beslut utan att känna till viktiga fakta om var och en av dessa tekniker. Vi är här för att hjälpa dig med detta beslut.
På Yalantis är de primära teknikerna vi använder för backend-utveckling Ruby, Go och Node.js. I den här artikeln kommer vi att ägna stor uppmärksamhet åt Go och Node.js – dessa två tekniker har ansetts vara de mest lovande backend-teknikerna på senare tid. Node.js, en JavaScript-körtidsmiljö, utsågs till det mest använda utvecklingsverktyget 2018, medan Go, ett programmeringsspråk som utvecklats av Google, har visat snabb tillväxt i popularitet de senaste åren.
Under 2018 utsåg JetBrains Go till det mest lovande språket. Uber, UpGuard och Koding har migrerat från Node.js till Go, och Basecamp, som utvecklade ramverket Ruby on Rails, använder aktivt Go för sina backend-tjänster. Låt oss ta reda på vilket av dessa två verktyg som är bäst för ditt projekt.
Vara Node.js
Node.js är en JavaScript-körtidsmiljö som bygger på Google Chromes V8-motor. Node.js presenterades för första gången på JSConf 2008 och mottogs väl av utvecklargemenskapen. Node.js är ett plattformsoberoende verktyg med öppen källkod som främst används för att skapa webbservrar. Det kör JavaScript-kod, så att utvecklare kan skriva både server- och klientkod utan att behöva lära sig två helt olika programmeringsspråk.
Under 2014 skapades en oberoende gaffel av Node.js, kallad io.js. Ett år senare började io.js- och Node.js-communiteterna samarbeta under den nybildade Node.js Foundation.
Nu bevittnar vi ett brett införande av denna teknik. Populära företag som Netflix, eBay och Groupon använder Node.js för fullständig webbutveckling. Node.js är det mest använda ramverket för JavaScript. Och JavaScript har varit det främsta programmeringsspråket under de senaste åren enligt den årliga undersökningen av utvecklare på StackOverflow.
Du kan använda Node.js på flera olika sätt. Enligt en undersökning från 2017 av Node.js Foundation tillämpar 39 % av de företag som använder Node.js i första hand det för backend- och fullstackutveckling. Det är mindre vanligt att det används för frontendutveckling och för att skapa skrivbordsapplikationer.
Bearbetar Go
Go, även kallat Golang, är ett öppen källkod, statiskt typat, kompilerat, plattformsoberoende och blixtsnabbt programmeringsspråk som först introducerades av Google 2009. Go är mångsidigt, det är ett bra språk för backendutveckling. Googles utvecklare ville blanda de goda sidorna av befintliga språk och samtidigt lösa deras vanligaste problem. Precis som C++ och Java är Go ett statiskt typat språk med hög effektivitet på hög nivå. Go liknar också C när det gäller hastighet och syntax. Det är ett tydligt och enkelt språk som gör det möjligt för utvecklare att skriva läsbar och underhållbar kod.
Läs också:
Den första stabila versionen av Go dök upp 2011 och gav utvecklare robusta goroutiner, en skräpplockare och en inbäddad testmiljö. Långsamt men stadigt har Go erövrat utvecklargemenskapen.
Enligt Tiobe Index var Go årets programmeringsspråk 2009 och 2016. Under 2019 klättrade Go till 16:e plats i Tiobe Index och verkar vara redo att fortsätta att vinna i popularitet. PYPL-indexet vittnar också om Go:s popularitet och placerar språket på 17:e plats. I Stack Overflows utvecklingsundersökning 2018 är Go det 16:e mest populära programmeringsspråket. Webbappar som använder Go är bland annat Uber, BBC, SoundCloud och Basecamp.
Golang vs Node.js jämförelse: Nu när vi har gett grundläggande information om Node.js och Go kan vi jämföra dem när det gäller skalbarhet, prestanda, felhantering och andra kriterier. Så vem kommer att vinna i striden mellan Go och Node.js?
Kriterium #1 Prestanda
Prestanda påverkar i hög grad en apps laddnings- och svarstider. Därför påverkar det direkt kundernas tillfredsställelse med din app.
De flesta utvecklare påpekar att Go visar samma prestanda som C och C++, vilket är riktigt bra. Go har ingen virtuell maskin och kompilerar till maskinkod, så programmen exekveras snabbt utan uppvärmningstid.
Go har också en inbyggd skräpplockare som övervakar och identifierar upptaget minne som inte längre behövs och frigör det för återanvändning. Detta minskar risken för säkerhetssårbarheter på grund av kodkapsling och ger effektiv minneshantering.
Go är en idealisk lösning för att bygga mikrotjänster på grund av det lilla minnesavtrycket och den snabba prestandan hos Go-appar samt bekvämligheten med statiskt länkade binärer.
Node.js anses vara en av de bästa backend-lösningarna av flera skäl:
-
Node.js har ärvt sin asynkrona och icke-blockerande karaktär från JavaScript. Detta innebär att små uppgifter utförs i bakgrunden och inte påverkar huvudtråden.
-
Node.js använder V8-motorn som hittills anses vara den snabbaste JavaScript-motorn.
-
Node.js-kod kan återanvändas. Detta är avgörande för händelsebaserade tillämpningar som uppdaterar data i realtid, och den används ofta för snabbmeddelanden, videochattar och onlinespel.
2013 bytte PayPal från Java till Node.js och delade med sig av sina erfarenheter av att använda Node.js. De sa att efter övergången till Node.js serverades deras sidor 200 ms snabbare och den genomsnittliga svarstiden minskade med 35 %.
När det gäller rå prestanda är Go den obestridliga ledaren. Men i verkligheten visar Node.js och Go lika bra prestanda.
För att jämföra skillnaderna i prestanda mellan dessa två språk kan du också kolla in syntetiska tester från The Computer Language Benchmarks Game.
Kriterium #2 Skalbarhet och samtidighet
Samhällighet är ett programs förmåga att organisera sitt utförande i flera separata flöden och kommunicera mellan dem. Tekniker för samtidig programmering är ett bra sätt att använda processorn effektivt och öka appens prestanda.
Concurrency är en viktig faktor för appar i företagsskala eller appar som måste hantera tusentals förfrågningar samtidigt. Ju mer samtidig en app är, desto mindre chans att appen kraschar vid hög belastning.
Rob Pike, skaparen av Go, säger att Go är ett utmärkt verktyg för stora programvaruprojekt. Med kanaler och goroutiner är samtidighet en stark sida av Go. Goroutiner är metoder eller funktioner som körs parallellt med andra metoder eller funktioner. Goroutiner är lätta: deras initiala storlek är endast 4 KB, jämfört med operativsystemets trådar som initialt är 1 MB. Go-miljön gör det möjligt för utvecklare att köra tusentals goroutiner samtidigt utan att använda för mycket RAM-minne. Information mellan två Goroutines skickas via kanaler som döljer komplexiteten och låter dig strukturera dina program på ett underhållbart sätt.
Då Node.js är enkeltrådad blockerar ibland CPU-bundna uppgifter händelseslingan och gör ditt program långsammare. Som ett resultat får du en långsam app och irriterade användare.
Kriterium #3 Gemenskap
Både Node.js och Go är öppen källkod, vilket innebär att hela gemenskaper är engagerade i att förbättra dessa språk, åtgärda fel och skapa nya förslag. Och både Node.js och Golang har förvaringsutrymmen på GitHub. En stor gemenskap innebär också många utvecklare, vilket gör det lättare att hitta rätt specialist.
Node.js är ett moget verktyg med ett stort och livligt open source-community. Node.js Foundation är inriktad på att möjliggöra en utbredd användning av Node.js. Under sitt första år bildade denna stiftelse ett team av yrkesmän med ansvar för säkerhet och skapade en långsiktig stödplan för förbättrad stabilitet. För närvarande består den tekniska styrkommittén av 18 medlemmar, medan antalet bidragsgivare överstiger 2 000.
GoDaddy, Intel, IBM, Microsoft, PayPal och NodeSource är aktiva medlemmar i Node.js Foundation. Varje år organiserar gemenskapen Node+JS Interactive, ett evenemang där utvecklare tillkännager nya förbättringar och ändringar av Node.js. Hittills har Node.js nått en miljard nedladdningar och 56 000 stjärnor på GitHub.
Go-samfundet är mycket mindre men fortsätter att växa varje år. Googles stöd är ett ganska tungt vägande skäl för att övergå till Go. GopherCon, som hålls årligen, samlar Go-utvecklare från hela världen för att diskutera nya möjligheter och förändringar. Denna konferens hade lett till ett ökande antal utvecklare som var intresserade av att bidra till Go-communityt och Go-projekten. Enligt en Golang-undersökning 2017 ville 59 % av de svarande bidra till Go-communityt, vilket var en ökning från 55 % året innan.
Kriterium #4 Verktyg
Färdiga lösningar underlättar utvecklingen och minskar kostnaderna för utveckling av webbappar.
Ett stort utbud av utvecklingsverktyg och ramverk är ett annat skäl att välja Node.js. Node.js är ett händelsebaserat ramverk med en mikrotjänstarkitektur. En mikrotjänstarkitektur innebär att en applikation är uppdelad i mindre moduler med väldefinierade operativa gränssnitt så att du enkelt kan lägga till nya komponenter till din app.
Npm, som står för Node.js package manager, är en av de bästa sakerna med Node.js. Den består av cirka 800 000 färdiga ”byggblock” (verktyg för ett visst fall) som kan installeras och köras utan problem. Men välj dessa klokt – även om kärntekniken är riktigt bra saknar npm en välstrukturerad lista över block, och ibland kan det ta tid att hitta rätt block.
Go har ett mindre antal verktyg jämfört med Node.js. Detta kan förklaras av att Go har ett standardmässigt fullfjädrade bibliotek med funktioner som inte behöver stöd från tredje part. Men å andra sidan har Go inget inbyggt GUI-bibliotek.
Även om antalet Node.js-verktyg vida överstiger antalet Go-verktyg har Go sådana robusta verktyg som Gofmit, Godoc, GoMetaLiner och Go run.
Kriterium #5 Felhantering
Node.js använder den traditionella tekniken try…catch error, där fel fångas upp omedelbart när de uppstår.
Till skillnad från NodeJS skiljer Go mellan körtids- och kompileringsfel, som ska hanteras på olika sätt. Detta ger dock upphov till svårigheter för utvecklare. Men skaparna av Go har gjort sitt yttersta för språkutvecklingen. I augusti 2018 meddelade Go-utvecklarna att de hade börjat arbeta med Go 2. Nästa version förväntas äntligen få ytterligare stöd för felhantering, skrivskyddade värden och någon form av generics. Det förkortar utvecklarens tid för felsökning eftersom det hjälper till att hitta fel snabbare.
Vad säger stora teknikföretag om Go och Node.js?
Nu ska vi se vad populära företag säger om att använda Go och Node.js för mjukvaruutveckling.
-
Go
Under 2016 migrerade Uber från Node.js till Go för att förbättra prestandan i sin mikrotjänst för sökning av geofence. Denna mikrotjänst visade sig vara företagets tjänst med flest förfrågningar per sekund (QPS). Det fanns flera anledningar till att Uber bestämde sig för att migrera till Go. För det första hindrar den dynamiskt typade och tolkade karaktären hos Node.js förmågan att hantera CPU-intensiva point-in-polygon-algoritmer på ett effektivt sätt.
För det andra behövde Uber uppdatera information från flera källor samtidigt för att se till att de hade den färskaste geofence-informationen. Detta tog mycket tid med Node.js, eftersom det är enkeltrådigt. Goroutines gjorde det möjligt för Uber-appen att utföra flera uppgifter samtidigt.
Uber-utvecklare har delat med sig av sina erfarenheter av att använda Go och sagt att Go är extremt lätt att lära sig och underhålla, de lyfte också fram Go:s tillförlitlighet: Uber har upplevt 99,99 % tillgänglighet med Go. De har också lyft fram att språket har hög prestanda när det gäller genomströmning och latens. Uber-appen kan hantera en toppbelastning på 170 000 förfrågningar per sekund.
Basecamp har också lyft fram Go:s enkelhet. Noah Lorang, dataanalytiker på Basecamp, säger att Go är en utmärkt lösning för att bygga datapipelines tack vare sina goroutiner. Enligt honom är Go:s främsta fördelar det robusta standardbiblioteket, den enkla syntaxen och den enkla processen för refaktorisering och driftsättning.
-
Node.js
Hela användargränssnittet i Netflix-appen är byggt med Node.js. Netflix utvecklingsteam valde Node.js eftersom de ville ha en snabb och lättviktig applikation. Genom att gå över till Node.js uppnådde de en 70-procentig minskning av appens starttid.
Groupons director of software engineering Adam Geitgey har förklarat varför Groupon övergick från Ruby till Node.js. Han säger att JavaScript är nära ett universellt språk, så det är lätt för deras frontend-utvecklare att lära sig och använda Node.js. Tack vare Node.js prestanda kan Groupon dessutom behandla mer än 425 000 aktiva erbjudanden utan problem.
Priset går till…
Som ni ser är det ganska svårt att säga säkert om Node.js eller Golang är bättre. Det beror i hög grad på typen och egenskaperna hos den app du vill skapa. Varje uppgift kräver rätt verktyg, och Go och Node.js är bra på olika saker.
Men medan Go är perfekt för mikrotjänster och projekt i företagsskala som måste hantera höga belastningar har Node.js ett stort utbud av färdiga lösningar för nästan alla utvecklingsutmaningar så att du dramatiskt kan minska tiden för utveckling av skräddarsydd programvara.
Kan du inte bestämma dig för vilket verktyg du ska välja? Skriv till oss så hjälper vi dig att fatta rätt beslut beroende på ditt projekt.