Selv om Node.js fortsat er den mest anvendte server-side JavaScript-køringstid med en stor margin, har alternative kørselstider som Deno og Bun vakt opmærksomhed, da de forsøger at forbedre Node.js-konceptet.

Deno, den mest populære af de to nyere runtimes, løser nogle af sikkerhedsproblemerne i Node.js og giver mere omfattende understøttelse af teknologier som TypeScript og WebAssembly.

I denne artikel vil du udforske Deno’s grundlæggende principper, lære, hvordan den kan sammenlignes med Node.js og Bun, og følge en praktisk demonstration, hvor Deno bruges til at bygge en simpel HTTP-webserver.

Hvad er Deno?

Efterhånden som udviklere blev fortrolige med JavaScript, så de dets potentiale til programmering på lokale maskiner. Derfor skabte de server-side runtimes – miljøer, der gør det muligt at udføre JavaScript-kode på maskiner uden brug af en browser.

Ryan Dahl udviklede Node.js til dette formål og skabte senere Deno for at løse nogle af de problemer, han stødte på i forbindelse med det oprindelige Node.js-design. Nogle af de bemærkelsesværdige fejl er bl.a. afhængigheden af en centraliseret pakkehåndtering som npm, manglen på et standardbibliotek og slappe standardsikkerhedsindstillinger.

Nogle af Denos vigtigste fordele er bl.a. følgende:

  • Sikkerhed som standard – Brugeren skal udtrykkeligt give tilladelse til, at koden kan få adgang til netværket, filsystemet eller miljøet.
  • Indbygget understøttelse af TypeScript og WebAssembly – Det er lige så nemt at køre TypeScript- og WebAssembly-applikationer i Deno som at køre JavaScript-programmer. Køretidssystemet kompilerer sprogene på samme måde som det gør med JavaScript.
  • Endecentraliseret pakkehåndtering – I stedet for at være afhængig af et pakkeregister som npm eller Buns pakkehåndtering kan Deno importere kode direkte fra URL’er. Denne mulighed betyder, at du kan indlæse afhængigheder, uanset hvor de er hostet, herunder dit GitHub-repositorium, din server eller dit CDN. Deno tilbyder også en script-hosting-tjeneste for endnu nemmere adgang.
  • Overholdelse af webstandarder – Deno sigter mod at følge de samme API’er som browsere, hvilket betyder, at kode skrevet til browsere nemt kan oversættes til runtime.

Store virksomheder og store brancheaktører som Slack, Netlify og Supabase har taget Deno til sig, men udbredelsen blandt webudviklere har været mindre udbredt. Ifølge Stack Overflow-undersøgelsen fra 2022 brugte kun 1,47 % af de professionelle udviklere, der svarede på undersøgelsen, Deno, mens 46,31 % oplyste, at de brugte Node.js.

Hvad gør Deno?

Som enhver anden JavaScript-køringstid gør Deno det muligt for udviklere at køre JavaScript på serversiden. Som følge heraf kan du bruge Deno til at udføre en lang række programmeringsopgaver.

Deno excellerer mest i opgaver som f.eks. udvikling af serverapplikationer, der reagerer på web-baserede brugeranmodninger. Hvis du f.eks. er ved at oprette en online boghandel, kan du bruge Deno til at bygge en app, der henter oplysninger fra en PostgreSQL-database, opbygger den side, brugeren ønsker at se, og sender den til browseren til gengivelse.

Du kan også bruge Deno til programmeringsopgaver på lavere niveau, f.eks. til at bygge et kommandolinjeværktøj til at administrere dine to-do-opgaver via terminalen. Med andre ord kan du bruge Deno til at opnå de samme mål, som du ville opnå ved hjælp af sprog som Python eller Ruby.

Deno vs Node

Deno har til formål at være en forbedring i forhold til Node.js, og det løfte indfrier det på flere vigtige områder. Deno forbedrer sikkerheden ved at muliggøre finere adgangskonfigurationer for forskellige kodemoduler. Den fokuserer også på overholdelse af webstandard-API’er, hvilket gør det muligt for udviklere at bruge den samme kode på både browser- og serversiden.

For teams, der arbejder med JavaScript-projekter på serversiden, er Deno blevet et levedygtigt alternativ til Node. Og selv om deres lignende funktionalitet har overbevist nogle udviklere om, at Deno kan erstatte Node.js, er denne mulighed usandsynlig af et par vigtige grunde.

Node.js er den mest populære JavaScript-køringstid, og den har opbygget et stort økosystem af færdigskrevne pakker og et stort, aktivt brugerfællesskab. Disse uvurderlige ressourcer hjælper Node.js med at forblive en yderst attraktiv køretid.

I modsætning hertil er Deno ny: Version 1.0 blev udgivet i maj 2020, så relativt få udviklere har haft tid til at lege med den. At lære et nyt værktøj forlænger udviklingstidslinjerne. Desuden er det ikke klart, om Deno ville give betydelige fordele for mange enkle projekter.

Men hvis du udvikler en applikation inden for et område, hvor sikkerhed er afgørende, f.eks. finanssektoren, kan Denos sikkerhedsfunktioner måske gøre et skift værd at foretage.

Deno vs Bun

Den tidligere Stripe-ingeniør Jarred Sumner frigav først Bun i juli 2022 til betatest. Bun er en mere eksperimentel runtime end Deno og er i modsætning til Deno designet til at have omfattende bagudkompatibilitet med Node.js.

Bun kan også prale af en lynhurtig ydeevne, der overgår Node.js og Deno. Nøglefunktioner muliggør disse muligheder:

  • En bedre motor – I stedet for Googles V8 JavaScript- og Web Assembly-motor bruger Bun den hurtigere og mere effektive JavaScriptCore som den underliggende JavaScript-motor.
  • Mere kodekontrol – Bun er skrevet i Zig, et lavniveausprog, der giver større kontrol end JavaScript over udførelsen af kode.
  • Finjusteret effektivitet – Holdet, der arbejdede på Bun, prioriterede profilering, benchmarking og optimering under udviklingen for at sikre kodens effektivitet.

Bun er så ny, at der er relativt lidt support fra fællesskabet til at hjælpe med fejlfinding. Ikke desto mindre kan Bun være sjovt at eksperimentere med. Teams, der specifikt har brug for et ydelsesløft, kan finde Bun nyttig for deres projekter, men webudvikling prioriterer ofte andre faktorer end ydelse.

Kom godt i gang med Deno

Nu hvor du har lært lidt om Deno, og hvordan den sammenligner sig med andre populære JavaScript-køretider, er det tid til at se, hvordan den fungerer. I dette afsnit lærer du at oprette en simpel server i Deno, der svarer på HTTP-forespørgsler med “Hello from the server!”

Installation af Deno

Du kan installere Deno på en maskine som en binær eksekverbar fil ved hjælp af disse installationsvejledninger fra den officielle dokumentation. På macOS kan du f.eks. installere Deno med kommandoen brew install deno.

En anden måde at begynde at arbejde med Deno på er at installere den som en npm-pakke, som f.eks:

Opret en mappe til dit projekt (deno_example måske), og kør kommandoen npm init i den. (Du kan acceptere alle de standardindstillinger, der foreslås af init, da den opretter en grundlæggende package.json-fil)

Når du har initialiseret din applikation, skal du køre npm install deno-bin for at installere den binære Deno-pakke. Nu kan du opdatere filen package.json for at aktivere programmets lancering med npm start. Tilføj den fede linje nedenfor til objektegenskaben “scripts” i standardpakken package.json-filen:

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

Denne tilføjelse af scripts gør det muligt for Deno at køre app.ts-modulet med netværksprivilegier (--allow-net). Husk, at når du arbejder med Deno, skal du eksplicit tillade adgang til et netværk eller filsystem.

Nu er du klar til at oprette app.ts-modulet, der er ansvarligt for at lytte på en port og betjene brugerforespørgsler.

Oprettelse af app.ts-modulet

Det er ekstremt enkelt at oprette en grundlæggende server i Deno. Først skal du oprette en app.ts-fil og indsætte følgende kode:

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

Koden bruger funktionen serve fra server.ts Deno library gemt på det officielle Deno.land-websted. Denne kode indeholder også en serve -funktionshåndtering til indgående anmodninger. Handler-funktionen svarer på alle anmodninger med “Hello from the server!”

serve -funktionen tager også valgfrie parametre, f.eks. det portnummer, som du ønsker at servere på. Her bruger kodeeksemplet disse parametre til at servere på port 8000.

Derefter starter du serveren ved at køre npm start. Dette skulle starte en server, der lytter på localhost:8000 og besvarer anmodninger med en hilsen.

Deno-server i aktion
Deno-server i aktion

Hvis du ønsker at udvide serveren til en fuldgyldig API, skal du sandsynligvis tilføje databaseforbindelse. Det er nemt at gøre, da Deno-fællesskabet har oprettet drivere, der understøtter populære databaser som MariaDB/MySQL, PostgreSQL, MongoDB og flere.

Opsummering

Runtimes spænder fra almindelige og pålidelige til meget eksperimentelle. Valget af den rigtige til dit projekt afhænger af dit projekt, og hvordan du ønsker, at din runtime skal hjælpe dig med at nå dine mål.

Node.js fungerer godt til de fleste projekter. Det har et stort økosystem og et stort fællesskab, der kan hjælpe med en lang række fejlfindingsscenarier.

Deno har fordelen af ekstra sikkerhed og en bedre udvikleroplevelse. Samtidig er det bedst egnet til erfarne teams, så fordelene opvejer de tids- og arbejdsomkostninger, der er forbundet med at lære en ukendt runtime.

Endelig er Bun ganske vist for eksperimentel til de fleste professionelle projekter, men det er en unik og sjov runtime at hente til et personligt projekt eller til at udvide.

Alt i alt tilbyder Deno en balance mellem fordelene ved Node.js og de eksperimentelle muligheder ved Bun. Mens Node.js er et brugbart valg til de fleste projekter, kan Deno være på forkant med, hvordan webudvikling vil udvikle sig i fremtiden.

I mellemtiden kan du øve dig i Deno ved at tilmelde dig Kinstas Applikation Hosting Hobby Tier – kodning nu og skalering senere.

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 ;).