Hoewel Node.js met grote voorsprong de meest gebruikte server-side JavaScript runtime blijft, hebben alternatieve runtimes zoals Deno en Bun de aandacht getrokken door hun poging het Node.js concept te verbeteren.
Deno, de populairdere van de twee nieuwere runtimes, pakt enkele beveiligingsproblemen aan die inherent zijn aan Node.js en biedt uitgebreidere ondersteuning voor technologieën als TypeScript en WebAssembly.
In dit artikel zul je de basis van Deno verkennen, leren hoe het zich verhoudt tot Node.js en Bun, en een praktische demonstratie volgen die Deno gebruikt om een eenvoudige HTTP webserver te bouwen.
Wat is Deno?
Toen developers vertrouwd raakten met JavaScript, zagen ze de mogelijkheden ervan voor het programmeren op lokale machines. Dus creëerden ze server-side runtimes – omgevingen die het mogelijk maken JavaScript code uit te voeren op machines zonder een browser te gebruiken.
Ryan Dahl ontwikkelde Node.js voor dit doel en creëerde later Deno om enkele problemen aan te pakken die hij tegenkwam met het oorspronkelijke Node.js ontwerp. Enkele opmerkelijke gebreken zijn de afhankelijkheid van een gecentraliseerde pakketbeheerder als npm, het ontbreken van een standaard bibliotheek, en lakse standaard beveiligingsinstellingen.
Enkele van Deno’s belangrijkste voordelen zijn de volgende:
- Standaard beveiliging – De gebruiker moet expliciet toestemming geven voor code om toegang te krijgen tot het netwerk, het bestandssysteem of de omgeving.
- Ingebouwde ondersteuning voor TypeScript en WebAssembly – Het draaien van TypeScript en WebAssembly programma’s in Deno is net zo eenvoudig als het draaien van JavaScript programma’s. De runtime compileert de talen net als bij JavaScript.
- Een gedecentraliseerde pakketbeheerder – In plaats van te vertrouwen op een pakketrepository zoals npm of Bun’s pakketbeheerder, kan Deno code direct vanuit URL’s importeren. Deze mogelijkheid betekent dat je dependencies kunt laden van waar ze ook worden gehost, inclusief je GitHub repository, server of CDN. Deno biedt ook een script-hosting service voor nog eenvoudigere toegang.
- Naleving van webstandaarden – Deno streeft ernaar dezelfde API’s te volgen als browsers doen, wat betekent dat code die voor browsers is geschreven gemakkelijk te vertalen is naar de runtime.
Grote bedrijven en grote industriële spelers zoals Slack, Netlify en Supabase hebben Deno geadopteerd, maar de adoptie ervan onder webdevelopers is minder wijdverbreid. Volgens het Stack Overflow onderzoek uit 2022 gebruikte slechts 1,47% van de professionele developers die reageerden Deno, terwijl 46,31% aangaf Node.js te gebruiken.
Wat doet Deno?
Zoals elke JavaScript runtime stelt Deno developers in staat om JavaScript aan de serverside uit te voeren. Daardoor kun je Deno gebruiken om een grote verscheidenheid aan programmeertaken uit te voeren.
Deno blinkt het meest uit in taken als het ontwikkelen van serverapplicaties die reageren op web-gebaseerde gebruikersverzoeken. Als je bijvoorbeeld een online boekenwinkel maakt, kun je Deno gebruiken om een app te bouwen die informatie uit een PostgreSQL database haalt, de pagina bouwt die de gebruiker wil bekijken, en die naar de browser stuurt om te renderen.
Je kunt Deno ook gebruiken voor programmeertaken op lager niveau, zoals het bouwen van een commandoregeltool om je taken via de terminal te beheren. Met andere woorden, je kunt Deno gebruiken om dezelfde doelen te bereiken als met talen als Python of Ruby.
Deno vs Node
Deno wil een verbetering zijn ten opzichte van Node.js, en het lost die belofte op verschillende belangrijke gebieden in. Deno verbetert de veiligheid door gedetailleerdere toegangsconfiguraties voor verschillende codemodules mogelijk te maken. Het richt zich ook op web-standaard API compliance, waardoor developers dezelfde code kunnen gebruiken aan zowel de browser- als de serverzijde.
Voor teams die werken aan server-side JavaScript projecten is Deno een levensvatbaar alternatief geworden voor Node. En hoewel hun vergelijkbare functionaliteit sommige developers ervan heeft overtuigd dat Deno Node.js zou kunnen vervangen, is deze mogelijkheid om een paar belangrijke redenen onwaarschijnlijk.
Node.js is de populairste JavaScript runtime en heeft een uitgebreid ecosysteem van vooraf geschreven pakketten en een grote, actieve gebruikersgemeenschap opgebouwd. Deze onschatbare bronnen helpen Node.js een uiterst aantrekkelijke runtime te blijven.
Deno daarentegen is nieuw: versie 1.0 werd uitgebracht in mei 2020, dus relatief weinig developers hebben de tijd gehad om ermee te spelen. Het leren van een nieuwe tool zorgt er natuurlijk voor dat het ontwikkelen aanvankelijk langzamer gaat. Bovendien was het niet duidelijk of Deno voor veel eenvoudige projecten significante voordelen zou opleveren.
Maar als je een applicatie bouwt op een gebied waar beveiliging essentieel is, zoals financiën, dan zouden de beveiligingsmogelijkheden van Deno een overstap de moeite waard kunnen maken.
Deno vs Bun
Voormalig Stripe engineer Jarred Sumner bracht Bun voor het eerst uit in juli van 2022 voor bètatesten. Bun is een meer experimentele runtime dan Deno en is, in tegenstelling tot Deno, ontworpen om uitgebreide achterwaartse compatibiliteit te hebben met Node.js.
Bun biedt verder razendsnelle prestaties, die Node.js en Deno overtreffen. De belangrijkste kenmerken maken onderstaande mogelijk:
- Een betere engine – In plaats van Google’s V8 JavaScript en Web Assembly engine gebruikt Bun de snellere en efficiëntere JavaScriptCore als onderliggende JavaScript engine.
- Meer controle over de code – Bun is geschreven in Zig, een low-level taal die meer controle biedt over de uitvoering van de code dan JavaScript.
- Goed afgestemde efficiëntie – Het team dat aan Bun werkt gaf prioriteit aan profilering, benchmarking en optimalisatie tijdens de ontwikkeling om de efficiëntie van de code te garanderen.
Bun is zo nieuw dat er relatief weinig ondersteuning van de gemeenschap is om te helpen bij het oplossen van problemen. Toch kan Bun leuk zijn om mee te experimenteren. Teams die specifiek een prestatieverbetering nodig hebben kunnen Bun nuttig vinden voor hun projecten, maar webontwikkeling geeft vaak prioriteit aan andere factoren dan prestaties.
Aan de slag met Deno
Nu je wat geleerd hebt over Deno en hoe het zich verhoudt tot andere populaire JavaScript runtimes, is het tijd om te zien hoe het werkt. In dit gedeelte leer je hoe je een eenvoudige server in Deno maakt die op HTTP verzoeken reageert met “Hello from the server!”
Deno installeren
Je kunt Deno op een machine installeren als een binair uitvoerbaar bestand met behulp van deze installatie-instructies uit de officiële documentatie. Op macOS installeer je Deno bijvoorbeeld met het commando brew install deno
.
Een andere manier om met Deno te gaan werken is door het te installeren als een npm-pakket, zoals dit:
Maak een map aan voor je project (deno_example misschien) en voer daarbinnen het commando npm init
uit. (Je kunt alle standaardopties accepteren die init
voorstelt, omdat het een basis package.json bestand aanmaakt)
Na het initialiseren van je applicatie voer je npm install deno-bin
uit om het binaire pakket Deno te installeren. Nu kun je het package.json bestand bijwerken om het starten van de applicatie mogelijk te maken met npm start
. Voeg de vetgedrukte regel hieronder toe aan de “scripts” object property in het standaard package.json bestand:
"scripts": {
"start": "deno run --allow-net app.ts",
"test": "echo "Error: no test specified" && exit 1"
},
Met deze scripttoevoeging kan Deno de module app.ts uitvoeren met netwerkrechten (--allow-net
). Onthoud dat je bij het werken met Deno expliciet toegang tot een netwerk of bestandssysteem moet toestaan.
Nu ben je klaar om de app.ts module te maken, die verantwoordelijk is voor het luisteren op een poort en het verwerken van gebruikersverzoeken.
De App.ts module maken
Het maken van een basisserver in Deno is uiterst eenvoudig. Maak eerst een app.ts bestand en plak er de volgende code in:
import { serve } from "https://deno.land/[email protected]/http/server.ts";
serve((_req) => new Response("Hello from the server!"), { port: 8000 });
De code gebruikt de functie serve
uit de server.ts Deno library
die is opgeslagen op de officiële Deno.land website. Deze code biedt ook een serve
functiehandler voor inkomende verzoeken. De handler-functie antwoordt op elk verzoek met “Hello from the server!”
De serve
functie neemt ook optionele parameters aan, zoals het poortnummer van waaruit je wil leveren. Hier gebruikt het codevoorbeeld deze parameters om op poort 8000 te leveren.
Start vervolgens de server door npm start
uit te voeren. Dit zou een server moeten starten die luistert op localhost:8000
en verzoeken beantwoordt met een groet.
Als je de server wilt uitbreiden tot een volwaardige API, zul je waarschijnlijk databaseconnectiviteit moeten toevoegen. Dat is eenvoudig te doen omdat de Deno community drivers heeft gemaakt die populaire databases als MariaDB/MySQL, PostgreSQL, MongoDB en meer ondersteunen.
Samenvatting
Runtimes variëren van gangbaar en betrouwbaar tot zeer experimenteel. Het kiezen van de juiste voor jouw project hangt af van je project en hoe je wilt dat je runtime je helpt je doelen te bereiken.
Node.js werkt goed voor de meeste projecten. Het heeft een groot ecosysteem en een grote gemeenschap die kan helpen met een breed scala aan probleemscenario’s.
Deno heeft het voordeel van extra beveiliging en een betere developerservaring. Tegelijkertijd is het het meest geschikt voor ervaren teams, zodat de voordelen opwegen tegen de tijd en arbeidskosten van het leren van een onbekende runtime.
Tenslotte is Bun weliswaar te experimenteel voor de meeste professionele projecten, maar het is een unieke en leuke runtime om op te pakken voor een persoonlijk project of om uit te breiden.
Al met al biedt Deno evenwicht tussen de voordelen van Node.js en de experimentele mogelijkheden van Bun. Terwijl Node.js een bruikbare keuze is voor de meeste projecten, kan Deno de voorhoede vormen van hoe webontwikkeling zich in de toekomst zal ontwikkelen.
Oefen ondertussen je Deno vaardigheden door je aan te melden voor het Applicatie Hosting Hobby pakket van Kinsta – nu coderen, later schalen.
Laat een reactie achter