Node.js vs Golang: Battle of the Next-Gen Sprog

For nylig har der været kritik af værdien af ​​at bruge Node.js i et højtydende, netværksapplikationsmiljø, og nogle udviklere er flyttet til Go-sproget.

Der er også flere højprofilerede virksomhedseksempler, der skifter til at bruge Go, ud over skaberen af ​​sproget, Google. Dropbox er flyttet til Go og hævder betydelige ydelsesforøgelser, og udviklerne af Docker-virtualiseringssystemet bruger også Go.

Det er dog vigtigt at bemærke, at Node.js stadig bruges af et meget bredere publikum, har flere moduler, er lettere at bruge og ikke kommer nogen som helst tid snart. Hvis du opretter en webapplikation, vil Node.js sandsynligvis være dit valg af sprog, da Go i øjeblikket bruges mere som et scriptingsprog, når fokus på samtidighed og hastighed er prioriteret.

I denne artikel skal vi se på forskellene mellem Node.js og Go fra udviklerens synspunkt for at afsløre styrker og svagheder i hvert miljø.

Node.js og Javascript-sproget

Node.js Emblem

Node.js-emblem

Node.js (og dens nylige gaffel, IO.js) er en stadig mere populær platform bygget på en hurtig, JavaScript-baseret runtime: V8.

V8 er en JS-virtuel maskine oprettet af Google, der er designet til at bygge skalerbare, netværksapplikationer. Det samler JavaScript-kode til den oprindelige maskinkode ved hjælp af nogle komplekse optimeringer. V8 udfører også hukommelsesallokering og indsamling af affald af JS-objekter.

Selvom disse dynamiske optimeringer til et dynamisk typisk sprog tilbyder en masse fleksibilitet for udviklere, kommer de med nogle ydelsesomkostninger til tider.

Da Node.js er skrevet i JavaScript, arver det de fleste af egenskaberne på det sprog. JavaScript er så populært i disse dage, at ECMAScript-standardudviklingen hovedsageligt sker på en evolutionær måde snarere end på en revolutionær måde.

Dette har nogle vigtige bivirkninger til JavaScript og Node-udvikling:

  • Nogle af JavaScript-sprogfejlene er vanskelige at løse uden at bryde bagudkompatibilitet, skønt de værste problemer løses.
  • Nyttige, men radikale, JS-sprogfunktioner er muligvis ikke implementeret eller kun “patches på” som en tilføjelsessyntaks. Dette kan føre til et messier sprogdesign sammenlignet med sprog, der integrerer funktioner rent i deres design. Et godt eksempel på dette er samtidig computing med JS. Den bedste praksis for JS til samtidig computing gik fra et samtidigheds-API (ved hjælp af begivenhedsbaserede tilbagekald) til nedlæggelse af løfter til den kommende support til async-generatorer. I disse dage er callback helvede stadig et alvorligt problem med mange Node.js-applikationer; dette har dog ført til mindre læselig kode, langsommere udvikling og måske endda flere bugs.

Alt dette betyder, at JavaScript-sproget udvikler sig ret langsomt (og nogle vil også sige dårligt), selv når det er kendt, at gode begreber fra andre sprog fungerer bedre.

Node.js har stadig et enormt samfund, og der skrives en masse gode applikationer til det, så vi ønsker ikke at skræmme dig væk med nogle af dets faldgruber i små tilfælde; det er stadig en fantastisk platform at arbejde med, ifølge langt de fleste udviklere.

Go-sproget eller Golang

Golang-gopher

Golang Gopher

Go, der også benævnes “Golang”, er et samlet systemorienteret programmeringssprog, som Google startede i 2007. Go kan betragtes som resultatet af en ret konservativ sprogudvikling fra sprog som C og C++.

Gå forbedrer nogle af de sprog, der er bekymrede for:

  • dårlig afhængighedsstyring
  • besværlige typer systemer
  • vanskelig hukommelsestyring
  • mangel på parallel beregningsstøtte
  • mangel på multi-core support

Go reducerer også den nødvendige mængde kodetype ved at være mere udtryksfuld end C eller C++.

Go gør det meget lettere at skrive robuste, netværksapplikationer uden at ofre meget i vejen for ydeevnen sammenlignet med C eller C ++. Den høje ydeevne skyldes i vid udstrækning den statiske kompilering af den statisk-typede Go-kode. En masse optimeringer er mulige, når en compiler kan udføre alt kodekontrolarbejdet på forhånd i modsætning til det dynamiske JS-kompilatorarbejde, der er udført under kørsel.

Golang vs Node.js Sammenligning af funktioner

Vi kan begynde at se, hvorfor det for nogle typer applikationsudvikling kan være nyttigt at bruge Go i stedet for Node.js; dog er Node.js stadig et meget nyttigt sprog i mange tilfælde.

Lad os sammenligne styrker og svagheder ved hvert programmeringssprog, så det kan være lettere at vælge hvilket miljø der er det rigtige værktøj til dit næste job.


node.js

ModenhedModen og robust for sin alderÆldre, men API’et ændrer stadig noget. De nylige IO.js Node-gaffelændringer kan også blive en årsag til API-problemer for udviklere, der skriver og bruger Node-moduler. Hvor stort dette problem vil være, er ikke klart lige nu.
YdeevneTilsvarende ydelsesegenskaber som med C eller C ++, hvilket er meget godtPå grund af JS’s dynamisk typede karakter kan Node ikke nå den rå ydelse af CPU- eller hukommelsesbundne opgaver, som Go kan udføre i mange test. I de almindelige brugstilfælde, hvor netværkskommunikation eller databaseinteraktion er involveret, er ydelsen af ​​Node og Go dog ofte ens.
samtidighedGo bruger koroutiner kaldet goroutiner. En goroutine er en let tråd, der styres af Go runtime. Kommunikation mellem goroutiner foregår meget elegant ved hjælp af kanaler. Se denne video for mere.Knudepunktet lider under JavaScript’s mindre end elegante samtidige support ved hjælp af event-tilbagekaldsmekanismen. For mange applikationer er det imidlertid nok at arbejde med JS-løfter og den kommende async-generatorstøtte (også kaldet “semi-coroutines”). Noget som Koa-rammen understøtter allerede async-generatortilgangen i Node.
SkalerbarhedGo var virkelig designet til skalerbarhed og samtidighed uden for meget besvær.Flere personer og virksomheder, der bruger Node.js, har fremsat påstande om, at Node har nogle problemer i miljøer, der er nødt til at skalere massivt. Måske kan Node overvinde disse massive skaleringsproblemer i tide.
Let udviklingMennesker, der kommer fra en JS / Node-baggrund, bliver nødt til at lære nogle nye programmeringskoncepter, såsom: koroutiner, kanaler, streng indtastning (med kompilering), grænseflader, strukturer, pointer og nogle andre forskelle.For en JS-udvikler er det virkelig let at komme ind på Node-programmering.
Frontend & BagendeSelvom du kan køre Go-kode i browseren ved hjælp af gopherjs, er JS stadig den måde, de fleste udviklere kan lide at programmere frontend. Go er mere rettet mod backend, især til at udvikle højtydende samtidige tjenester på serversiden.Det er virkelig ikke nødvendigt at skulle udføre en mental kontekst-switch, mens du udvikler et JS-baseret klientserver-system.
pakker & ToolingAntallet af standard Go-pakker vokser støt, i øjeblikket på over 100, og Go-community-pakkerne kan let søges. Selvom der ikke er så mange forskellige udviklervenlige applikationsrammer at vælge imellem sammenlignet med Node endnu, kan du se på “go get” -pakke fra Go-samfundet, som i øjeblikket ligger på over 58.000 til rådighed til brug og vokser.Antallet af Node-pakker ligger i øjeblikket på mere end 100.000. Dette betyder, at der er udført meget grundlæggende arbejde, og det kan gøre visse softwareprojekter meget lettere og / eller billigere at implementere. Nodes værktøj er også fremragende. Npm-pakkeadministrator lærte af alle de pakkeadministratorer, der kom før, og gjorde de fleste ting rigtigt.
Udvikler Mindshare En nylig undersøgelse viste stigningen af ​​Gå til et sted i top 20. Det tempo, hvor dette skete, overskred forventningerne. Go har bestemt en masse fart, der opbygges, især med den nylige støtte fra Android mobile OS.Knude er meget mere populær på dette tidspunkt af mange størrelsesordrer. At få god hosting support, kommerciel support og Node.js freelancere til dit projekt vil være meget lettere for NodeJS på dette tidspunkt..
FejlhåndteringFejlhåndtering i Golang kræver, at du implementerer eksplicit fejlkontrol, hvilket kan gøre fejlfinding til fejl vanskelig. Nogle hævder dog, at du generelt får en renere applikation, når du først har forstået Golang-fejlhåndtering. Fejlhåndtering i Node.js kan til tider være inkonsekvent, men det tilbyder den mere almindelige kast / fangstmekanisme for fejl, som udviklere er vant til at bruge med andre sprog.

Oversigt over Node.js vs Golang

Valget mellem Node.js eller Go afhænger meget af, hvilken type udvikling der passer dig bedst, og hvor massiv netværkstjenesten skal skaleres.

Go har muligvis endnu ikke alle community-pakker eller mindshare, som Node har, men dens syntaktisk renere samtidighedsmodel, bedre rå CPU- og hukommelsesbundet ydelse og dens evne til at opskalere bedre med samtidige belastninger kan skabe et bedre fundament for visse netværk applikationstyper.

Hvis du har brug for visse Node.js-pakker, som endnu ikke er tilgængelige til Go, og som ville være vanskelige eller dyre at implementere igen i Go, kan Node være det klogere valg.

Hvis du har lyst til at installere Go på dit Ubuntu / Linux-system, så kig på vores guide til installation af Go. Besøg derefter GoByExample og online Go-bogen for nogle flere gode tutorials.

Hvis du ønskede at give Node.js et skud, skal du tjekke vores guide til installation af Node.js såvel som vores liste over gratis Node.js hosting-tjenester. Gå derefter videre til NodeSchool.io for nogle gode tutorials om programmering med Node.js.

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me