Node.js är visserligen fortfarande den mest använda serverbaserade JavaScript-körtiden med stor marginal. Men alternativa körtider som Deno och Bun har dock fått uppmärksamhet eftersom de försöker förbättra Node.js-konceptet.

Deno, den mer populära av de två nyare körtiderna, tar exempelvis itu med vissa säkerhetsproblem som är inneboende i Node.js. Den ger dessutom mer omfattande stöd för tekniker som TypeScript och WebAssembly.

I den här artikeln så kommer du att utforska grunderna för Deno, lära dig hur den står sig jämfört med Node.js och Bun. Du kommer sedan att följa en praktisk demonstration där Deno används för att bygga en enkel HTTP-webbserver.

Vad är Deno?

När utvecklare blev bekanta med JavaScript såg de dess potential för programmering på lokala maskiner. Därför så skapade de körtids-miljöer på serversidan. Som ett resultat så blir det möjligt att köra JavaScript-kod på maskiner utan att använda en webbläsare.

Ryan Dahl utvecklade Node.js för detta ändamål. Han skapade sedan Deno för att åtgärda några av de problem som han stötte på med den ursprungliga Node.js-designen. Några anmärkningsvärda brister är exempelvis beroendet av en centraliserad pakethanterare som npm, avsaknaden av ett standardbibliotek och slappa standardiserade säkerhetsinställningar.

Några av Denos främsta fördelar är följande:

  • Säkerhet som standard – Användaren måste uttryckligen ge tillstånd för att koden ska få tillgång till nätverket, filsystemet eller miljön.
  • Inbyggt stöd för TypeScript och WebAssembly – Att köra TypeScript- och WebAssembly-applikationer i Deno är lika enkelt som att köra JavaScript-program. Körtiden kompilerar språken precis som den gör med JavaScript.
  • En decentraliserad pakethanterare – Istället för att förlita sig på ett paket-arkiv som npm eller Buns pakethanterare så kan Deno importera kod direkt från webbadresser. Som ett resultat så kan du ladda in beroenden från var de än finns. Detta inkluderar exempelvis ditt GitHub-arkiv, din server eller ditt CDN. Deno erbjuder dessutom en tjänst för script-hosting för ännu enklare åtkomst.
  • Överensstämmelse med webbstandarder – Deno strävar efter att följa samma API: er som webbläsare gör. Kod som har skrivits för webbläsare kan därför lätt översättas till körtiden.

Stora företag och viktiga branschaktörer som Slack, Netlify och Supabase har anammat Deno. Dess användning bland webbutvecklare har dock varit mindre utbredd. Enligt en undersökning från år 2022 av Stack Overflow så använde endast 1,47 % av de professionella utvecklare som svarade på undersökningen Deno, medan 46,31 % uppgav att de använde Node.js.

Vad gör Deno?

Precis som alla JavaScript-körtider så gör Deno det möjligt för utvecklare att köra JavaScript på serversidan. Som ett resultat av detta så kan du använda Deno för att utföra en mängd olika programmeringsuppgifter.

Deno utmärker sig mest i uppgifter som att utveckla serverapplikationer som svarar på webbaserade användarförfrågningar. Om du exempelvis skapar en bokhandel på nätet så kan du använda Deno för att bygga en applikation som hämtar information från en PostgreSQL-databas. Den bygger sedan upp den sida som användaren vill se och skickar den till webbläsaren för rendering.

Du kan dessutom använda Deno för programmeringsuppgifter på lägre nivå. Det kan exempelvis handla om ett kommandoradsverktyg för att hantera dina uppgifter via terminalen. Med andra ord så kan du använda Deno för att uppnå samma mål som du skulle uppnå med hjälp av språk som Python eller Ruby.

Deno vs Node

Deno syftar till att vara en förbättring av Node.js, och det löftet uppfylls på flera viktiga områden. Denna körtid förbättrar säkerheten genom att möjliggöra finkornigare åtkomstkonfigurationer för olika kodmoduler. Deno fokuserar dessutom på överensstämmelse med webbstandard API: er. Som ett resultat så kan utvecklare använda samma kod på både webbläsar- och serversidan.

För grupper som arbetar med JavaScript-projekt på serversidan så har Deno blivit ett gångbart alternativ till Node. Även om deras liknande funktionalitet har övertygat vissa utvecklare om att Deno skulle kunna ersätta Node.js är denna möjlighet osannolik av några viktiga skäl.

Node.js är den mest populära JavaScript-körtiden och har samlat ihop ett stort ekosystem av förskrivna paket. Den har dessutom ett stort, aktivt användar-community. Dessa ovärderliga resurser bidrar till att Node.js förblir en extremt attraktiv körtid.

Deno är däremot ny: version 1.0 släpptes i maj år 2020. Det är med andra ord relativt få utvecklare som har haft tid att leka med den. Att lära sig ett nytt verktyg förlänger utvecklingstiderna. Dessutom så är det inte klart om Deno skulle medföra betydande fördelar för många enkla projekt.

Men om du exempelvis bygger en applikation inom ett område där säkerhet är viktigt, som finans, kan Denos säkerhetsfunktioner göra det värt bytet.

Deno vs Bun

Den tidigare Stripe-ingenjören Jarred Sumner släppte först Bun i juli år 2022 för betatestning. Bun är en mer experimentell körtid än Deno. Till skillnad från Deno så är Bun dessutom utformad för att ha omfattande bakåtkompatibilitet med Node.js.

Bun har även en otroligt snabb prestanda som överträffar Node.js och Deno. De viktigaste funktionerna möjliggör dessa möjligheter:

  • En bättre motor – Istället för Google’s V8 JavaScript- och Web Assembly-motor så använder Bun den snabbare och effektivare JavaScriptCore som underliggande JavaScript-motor.
  • Mer kodkontroll – Bun är skriven i Zig, ett lågnivåspråk som ger en större kontroll över kodutförandet än JavaScript.
  • Finjusterad effektivitet – Teamet som arbetade med Bun prioriterade profilering, riktmärkestestning och optimering under utvecklingen. Allt för att säkerställa kodens effektivitet.

Bun är så ny att det finns relativt lite stöd från dess community för att hjälpa till med felsökning. Trots detta så kan Bun vara kul att experimentera med. Grupper som specifikt behöver en prestandaförstärkning kan finna Bun användbar för sina projekt. Vid webbutveckling så prioriteras dock ofta andra faktorer än prestanda.

Komma igång med Deno

Nu har du lärt dig lite om Deno och hur den jämför sig med andra populära JavaScript-körtider. Det är dags att se hur den fungerar. I det här avsnittet så får du exempelvis lära dig hur du skapar en enkel server i Deno som svarar på HTTP-förfrågningar med ”Hello from the server!”

Installation av Deno

Du kan installera Deno på en maskin som en binär körbar fil med hjälp av dessa installationsinstruktioner från den officiella dokumentationen. På macOS så kan du exempelvis installera Deno med kommandot brew install deno.

Ett annat sätt att börja arbeta med Deno är att installera det som ett npm-paket, så här:

Skapa en mapp för ditt projekt (kanske deno_example) och kör kommandot npm init i den. (Du kan acceptera alla standardalternativ som föreslås av init eftersom det skapar en grundläggande package.json-fil.)

Efter att ha initialiserat din applikation så kör du npm install deno-bin för att installera det binära paketet Deno. Nu kan du uppdatera package.json-filen för att möjliggöra lanseringen av applikationen med npm start. Lägg till den fetstilade raden nedan till objektegenskapen ”scripts” i standardfilen package.json:

"scripts": {
    "start": "deno run --allow-net app.ts",
    "test": "echo "Error: no test specified" && exit 1"
  },

Detta tillägg av skript gör det möjligt för Deno att köra modulen app.ts med nätverksrättigheter (--allow-net). Kom ihåg att när du arbetar med Deno så måste du uttryckligen tillåta åtkomst till ett nätverk eller ett filsystem.

Nu är du redo att skapa modulen app.ts, som ansvarar för att lyssna på en port och betjäna användarförfrågningar.

Skapa modulen app.ts

Att skapa en grundläggande server i Deno är extremt enkelt. Först så skapar du en app.ts-fil och klistrar sedan in följande kod:

import { serve } from "https://deno.land/[email protected]/http/server.ts";
serve((_req) => new Response("Hello from the server!"), { port: 8000 });

Koden använder funktionen serve från server.ts Deno library som finns lagrad på den officiella webbplatsen Deno.land. Den inkluderar även funktionen serve som hanterar inkommande förfrågningar. Hanteringsfunktionen svarar på varje begäran med ”Hello from the server!”

Funktionen serve tar dessutom emot valfria parametrar, exempelvis det portnummer som du vill servera på. Här använder kodexemplet dessa parametrar för att servera på port 8000.

Därefter så startar du servern genom att köra npm start. Detta bör starta en server som lyssnar på localhost:8000 och svarar på förfrågningar med en hälsning.

Deno-server i aktion
Deno-server i aktion

Om du vill utöka servern till ett fullfjädrat API så behöver du förmodligen lägga till databasanslutning. Detta är lätt att göra eftersom Deno’s community har skapat drivrutiner som stöder populära databaser som MariaDB/MySQL, PostgreSQL, MongoDB med flera.

Sammanfattning

Körtider varierar från vanliga och pålitliga till mycket experimentella. Att välja rätt för ditt projekt beror på vad du ska göra och hur du vill att körtiden ska hjälpa dig att nå dina mål.

Node.js fungerar bra för de flesta projekt. Den har exempelvis ett stort ekosystem och ett stort community som kan hjälpa till med ett stort antal felsökningsscenarier.

Deno har fördelen av extra säkerhet och en bättre utvecklarupplevelse. Samtidigt så lämpar den sig bäst för erfarna team. Fördelarna uppväger med andra ord den tids- och arbetskostnad som det innebär att lära sig en obekant körtid.

Slutligen, Bun är visserligen för experimentell för de flesta professionella projekt. Men det är trots detta en unik och rolig körtid att plocka upp för ett personligt projekt eller för att expandera.

På det hela taget så erbjuder Deno en balans mellan fördelarna med Node.js och de experimentella möjligheterna med Bun. Medan Node.js är ett användbart val för de flesta projekt så kan Deno ligga i framkant när det gäller hur webbutveckling kommer att utvecklas i framtiden.

Under tiden så kan du öva upp dina Deno-kunskaper genom att registrera dig för Kinsta’s Hobby Nivå för applikationshosting – kodning nu och skalning senare.

Jeremy Holcombe Kinsta

Content & Marketing Editor at Kinsta, WordPress Web Developer, and Content Writer. Outside of all things WordPress, I enjoy the beach, golf, and movies. I also have tall people problems ;).