Sebbene Node.js rimanga il runtime JavaScript lato server più utilizzato con un margine enorme, runtime alternativi come Deno e Bun hanno attirato l’attenzione nel tentativo di migliorare il concetto di Node.js.

Deno, il più popolare dei due runtime più recenti, risolve alcuni problemi di sicurezza inerenti a Node.js e fornisce un supporto più completo a tecnologie come TypeScript e WebAssembly.

In questo articolo esploreremo le basi di Deno, scopriremo come si confronta con Node.js e Bun e seguiremo una dimostrazione pratica che utilizza Deno per costruire un semplice server web HTTP.

Cos’è Deno?

Man mano che gli sviluppatori acquisivano familiarità con JavaScript, ne vedevano il potenziale per la programmazione su macchine locali. Hanno quindi creato dei runtime lato server, ovvero ambienti che consentono di eseguire codice JavaScript su macchine senza utilizzare un browser.

Ryan Dahl ha sviluppato Node.js per questo scopo e, in seguito, ha creato Deno per risolvere alcuni dei problemi riscontrati con il progetto originale di Node.js. Alcuni difetti degni di nota sono la dipendenza da un gestore di pacchetti centralizzato come npm, la mancanza di una libreria standard e le impostazioni di sicurezza predefinite poco rigorose.

I principali vantaggi di Deno sono i seguenti:

  • Sicurezza di default – L’utente deve dare esplicitamente il permesso al codice di accedere alla rete, al file system o all’ambiente.
  • Supporto integrato per TypeScript e WebAssembly – Eseguire programmi TypeScript e WebAssembly in Deno è facile come eseguire programmi JavaScript. Il runtime compila i linguaggi proprio come fa con JavaScript.
  • Un gestore di pacchetti decentralizzato – Invece di affidarsi a un repository di pacchetti come npm o il gestore di pacchetti di Bun, Deno può importare il codice direttamente dagli URL. Questa funzionalità implica che è possibile caricare le dipendenze da qualsiasi luogo in cui sono ospitate, compresi i propri repository GitHub, server o CDN. Deno offre anche un servizio di hosting di script per un accesso ancora più semplice.
  • Conformità agli standard web – Deno mira a seguire le stesse API dei browser, il che significa che il codice scritto per i browser è facilmente traducibile nel runtime.

Grandi aziende e importanti operatori del settore come Slack, Netlify e Supabase hanno adottato Deno, ma la sua adozione da parte degli sviluppatori web è stata meno diffusa. Secondo il sondaggio Stack Overflow del 2022, solo l’1,47% degli sviluppatori professionisti che hanno risposto al sondaggio utilizzava Deno, mentre il 46,31% ha dichiarato di utilizzare Node.js.

Cosa fa Deno?

Come ogni runtime JavaScript, Deno consente agli sviluppatori di eseguire JavaScript sul lato server. Di conseguenza, è possibile usare Deno per svolgere un’ampia gamma di attività di programmazione.

Deno eccelle soprattutto in attività come lo sviluppo di applicazioni server che rispondono alle richieste degli utenti sul web. Ad esempio, se state creando una libreria online, potrete usare Deno per creare un’applicazione che prende le informazioni da un database PostgreSQL, costruisce la pagina che l’utente vuole visualizzare e la invia al browser per il rendering.

È possibile utilizzare Deno anche per attività di programmazione di livello inferiore, come la creazione di uno strumento a riga di comando per gestire le vostre attività da fare tramite il terminale. In altre parole, potete usare Deno per raggiungere gli stessi obiettivi che otterreste usando linguaggi come Python o Ruby.

Deno vs Node

Deno vuole essere un miglioramento rispetto a Node.js e mantiene questa promessa in diverse aree chiave. Deno migliora la sicurezza consentendo configurazioni di accesso più dettagliate per i diversi moduli di codice. Inoltre, si concentra sulla conformità alle API standard del web, consentendo agli sviluppatori di utilizzare lo stesso codice sia sul browser che sul server.

Per i team che lavorano su progetti JavaScript lato server, Deno è diventato una valida alternativa a Node. Sebbene le loro funzionalità simili abbiano convinto alcuni sviluppatori che Deno potrebbe sostituire Node.js, questa possibilità è improbabile per alcuni motivi fondamentali.

Node.js è il runtime JavaScript più popolare e ha accumulato un vasto ecosistema di pacchetti pre-scritti e una grande e attiva comunità di utenti. Grazie a queste preziose risorse, Node.js resta un runtime estremamente interessante.

Al contrario, Deno è nuovo: la versione 1.0 è stata rilasciata nel maggio 2020, quindi relativamente pochi sviluppatori hanno avuto il tempo di giocarci. L’apprendimento di un nuovo strumento allunga i tempi di sviluppo. Inoltre, non è chiaro se Deno apporterebbe vantaggi significativi a molti progetti semplici.

Tuttavia, se state realizzando un’applicazione in un settore in cui la sicurezza è essenziale, come quello finanziario, le funzionalità di Deno potrebbero rendere conveniente il passaggio.

Deno vs Bun

L’ex ingegnere di Stripe Jarred Sumner ha rilasciato Bun per la prima volta nel luglio del 2022 per il beta testing. Bun è un runtime più sperimentale di Deno e, a differenza di quest’ultimo, è stato progettato per avere un’ampia retrocompatibilità con Node.js.

Bun vanta inoltre prestazioni incredibilmente veloci, superiori a quelle di Node.js e Deno. Le caratteristiche principali consentono di ottenere queste funzionalità:

  • Un motore migliore – Invece del motore V8 JavaScript e Web Assembly di Google, Bun utilizza il più veloce ed efficiente JavaScriptCore come motore JavaScript sottostante.
  • Maggiore controllo del codice – Bun è scritto in Zig, un linguaggio di basso livello che offre un maggiore controllo sull’esecuzione del codice rispetto a JavaScript.
  • Efficienza finemente regolata – Il team che ha lavorato a Bun ha dato priorità alla profilazione, al benchmarking e all’ottimizzazione durante lo sviluppo per garantire l’efficienza del codice.

Bun è così nuovo che il supporto della community per la risoluzione dei problemi è relativamente scarso. Tuttavia, può essere divertente fare degli esperimenti con Bun. I team che hanno bisogno di un aumento delle prestazioni potrebbero trovare Bun utile per i propri progetti, ma lo sviluppo web spesso dà priorità a fattori diversi dalle prestazioni.

Come iniziare con Deno

Ora che avete scoperto un po’ di cose su Deno e sul suo confronto con altri runtime JavaScript popolari, è il momento di vedere come funziona. In questa sezione impareremo a creare un semplice server in Deno che risponde alle richieste HTTP con “Hello from the server!”.

Installare Deno

Si può installare Deno su un computer come eseguibile binario utilizzando le istruzioni di installazione riportate nella documentazione ufficiale. Su macOS, ad esempio, è possibile installare Deno con il comando brew install deno.

Un altro modo per iniziare a lavorare con Deno è installarlo come pacchetto npm, in questo modo:

Creare una cartella per il proprio progetto (magari deno_example) ed eseguire il comando npm init al suo interno. (Si possono accettare tutte le opzioni predefinite suggerite da init in quanto crea un file package.json di base).

Dopo aver inizializzato l’applicazione, eseguire npm install deno-bin per installare il pacchetto binario Deno. Ora è possibile aggiornare il file package.json per abilitare il lancio dell’applicazione con npm start. Aggiungere la riga in grassetto qui sotto alla proprietà dell’oggetto “scripts” nel file package.json predefinito:

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

Questa aggiunta di script consente a Deno di eseguire il modulo app.ts con privilegi di rete (--allow-net). Ricordate che quando si lavora con Deno, è necessario consentire esplicitamente l’accesso a una rete o a un file system.

Ora siete pronti a creare il modulo app.ts, responsabile dell’ascolto su una porta e della gestione delle richieste degli utenti.

Creare il modulo app.ts

Creare un server di base in Deno è estremamente semplice. Per prima cosa, create un file app.ts e incollate il seguente codice:

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

Il codice utilizza la funzione serve dal file server.ts Deno library memorizzata sul sito ufficiale di Deno.land. Questo codice fornisce anche un gestore della funzione serve per le richieste in arrivo. La funzione handler risponde a ogni richiesta con “Hello from the server!”.

La funzione serve accetta anche dei parametri opzionali, come ad esempio il numero di porta su cui si vuole servire. L’esempio di codice utilizza questi parametri per servire sulla porta 8000.

Quindi, avviate il server eseguendo npm start. In questo modo si avvierà un server in ascolto su localhost:8000 e risponderà alle richieste con un saluto.

Il server Deno in azione
Il server Deno in azione

Se volete estendere il server a una vera e propria API, probabilmente dovrete aggiungere la connettività al database. Questa è un’operazione semplice da eseguire perché la comunità di Deno ha creato dei driver che supportano i database più diffusi come MariaDB/MySQL, PostgreSQL, MongoDB e altri ancora.

Riepilogo

I runtime variano da quelli comuni e affidabili a quelli molto sperimentali. La scelta di quello giusto per il vostro progetto dipende dal progetto stesso e da come volete che il runtime vi aiuti a raggiungere i vostri obiettivi.

Node.js funziona bene per la maggior parte dei progetti. Dispone di un ampio ecosistema e di una grande community che può aiutarvi a risolvere una vasta gamma di problemi.

Deno ha il vantaggio di una maggiore sicurezza e di una migliore esperienza per gli sviluppatori. Allo stesso tempo, è più adatto a team esperti, se si vuole che i suoi vantaggi superino i costi di tempo e di lavoro legati all’apprendimento di un runtime sconosciuto.

Infine, anche se Bun è troppo sperimentale per la maggior parte dei progetti professionali, è un runtime unico e divertente da usare per un progetto personale o da espandere.

Nel complesso, Deno offre un equilibrio tra i vantaggi di Node.js e le possibilità sperimentali di Bun. Mentre Node.js è una scelta utile per la maggior parte dei progetti, Deno potrebbe rivelarsi all’avanguardia per quanto riguarda l’evoluzione dello sviluppo web in futuro.

Nel frattempo, fate pratica con Deno iscrivendovi al Piano Hobby dell’Hosting di Applicazioni di Kinsta – create il vostro codice ora, scalate poi.

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