Impara Deno e vai oltre Node.js
Pubblicato: 2023-04-20Sebbene Node.js rimanga il runtime JavaScript lato server più utilizzato con un enorme margine, runtime alternativi come Deno e Bun hanno attirato l'attenzione mentre tentano 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 per tecnologie come TypeScript e WebAssembly.
In questo articolo esplorerai le basi di Deno, imparerai come si confronta con Node.js e Bun e seguirai una dimostrazione pratica che utilizza Deno per creare un semplice server web HTTP.
Cos'è Deno?
Man mano che gli sviluppatori acquisivano familiarità con JavaScript, ne videro il potenziale per la programmazione su macchine locali. Pertanto, hanno creato runtime lato server, ambienti che consentono l'esecuzione di 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 design originale di Node.js. Alcuni difetti degni di nota includono la sua dipendenza da un gestore di pacchetti centralizzato come npm, la mancanza di una libreria standard e impostazioni di sicurezza lassiste per impostazione predefinita.
Alcuni dei principali vantaggi di Deno includono quanto segue:
- Sicurezza per impostazione predefinita : l'utente deve autorizzare esplicitamente il codice ad 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 le lingue proprio come fa con JavaScript.
- Un gestore di pacchetti decentralizzato — Invece di fare affidamento su un repository di pacchetti come npm o il gestore di pacchetti di Bun, Deno può importare il codice direttamente dagli URL. Questa funzionalità significa che puoi caricare le dipendenze ovunque siano ospitate, inclusi il tuo 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 attori del settore come Slack, Netlify e Supabase hanno adottato Deno, ma la sua adozione tra gli 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 riferito di utilizzare Node.js.
Cosa fa Deno?
Come qualsiasi runtime JavaScript, Deno consente agli sviluppatori di eseguire JavaScript sul lato server. Di conseguenza, puoi utilizzare Deno per eseguire un'ampia varietà di attività di programmazione.
Deno eccelle maggiormente in attività come lo sviluppo di applicazioni server che rispondono alle richieste degli utenti basate sul web. Ad esempio, se stai creando una libreria online, puoi utilizzare Deno per creare un'app che prende informazioni da un database PostgreSQL, crea la pagina che l'utente desidera visualizzare e la invia al browser per il rendering.
Puoi anche utilizzare Deno per attività di programmazione di livello inferiore come la creazione di uno strumento da riga di comando per gestire le attività da eseguire tramite il terminale. In altre parole, puoi usare Deno per raggiungere gli stessi obiettivi che otterresti usando linguaggi come Python o Ruby.
Deno vs Nodo
Deno mira a essere un miglioramento rispetto a Node.js e mantiene questa promessa in diverse aree chiave. Deno migliora la sicurezza abilitando configurazioni di accesso più granulari per diversi moduli di codice. Si concentra inoltre sulla conformità API standard Web, che consente agli sviluppatori di utilizzare lo stesso codice sia sul lato browser che su quello server.
Per i team che lavorano su progetti JavaScript lato server, Deno è diventata una valida alternativa a Node. E mentre la loro funzionalità simile ha convinto alcuni sviluppatori che Deno potrebbe sostituire Node.js, questa possibilità è improbabile per alcuni motivi chiave.
Node.js è il runtime JavaScript più popolare e ha accumulato un vasto ecosistema di pacchetti già scritti e una comunità di utenti ampia e attiva. Queste preziose risorse aiutano Node.js a rimanere un runtime estremamente interessante.
Al contrario, Deno è nuovo: la versione 1.0 è stata rilasciata a 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.
Ma se stai creando un'applicazione in un'area in cui la sicurezza è essenziale, come la finanza, le capacità di sicurezza di Deno potrebbero rendere utile un passaggio.
Den vs Bun
L'ex ingegnere di Stripe Jarred Sumner ha rilasciato per la prima volta Bun nel luglio del 2022 per il beta test. Bun è un runtime più sperimentale di Deno e, a differenza di Deno, è progettato per avere un'ampia compatibilità con le versioni precedenti di Node.js.
Bun vanta anche prestazioni incredibilmente veloci, superando Node.js e Deno. Le funzionalità principali abilitano queste funzionalità:
- Un motore migliore — Invece del motore JavaScript V8 e Web Assembly di Google, Bun utilizza il JavaScriptCore più veloce ed efficiente come motore JavaScript sottostante.
- Maggiore controllo del codice : Bun è scritto in Zig, un linguaggio di basso livello che fornisce un controllo maggiore rispetto a JavaScript sull'esecuzione del codice.
- Efficienza ottimizzata : il team che lavora su Bun ha dato la priorità alla profilazione, al benchmarking e all'ottimizzazione durante lo sviluppo per garantire l'efficienza del codice.
Bun è così nuovo che c'è relativamente poco supporto da parte della comunità per aiutare con la risoluzione dei problemi. Tuttavia, Bun può essere divertente per la sperimentazione. I team che richiedono specificamente un aumento delle prestazioni potrebbero trovare Bun utile per i loro progetti, ma lo sviluppo web spesso dà la priorità a fattori diversi dalle prestazioni.
Iniziare con Deno
Ora che hai imparato qualcosa su Deno e su come si confronta con altri popolari runtime JavaScript, è tempo di vedere come funziona. In questa sezione imparerai come creare un semplice server in Deno che risponda alle richieste HTTP con "Ciao dal server!"
Installazione di Deno
Puoi installare Deno su una macchina come eseguibile binario usando queste istruzioni di installazione dalla documentazione ufficiale. Su macOS, ad esempio, potresti installare Deno con il comando brew install deno
.
Un altro modo per iniziare a lavorare con Deno è installarlo come pacchetto npm, in questo modo:
Crea una cartella per il tuo progetto (forse deno_example ) ed esegui il comando npm init
al suo interno. (Puoi accettare tutte le opzioni predefinite suggerite da init
poiché crea un file package.json di base.)
Dopo aver inizializzato l'applicazione, esegui npm install deno-bin
per installare il pacchetto binario Deno. Ora puoi aggiornare il file package.json per abilitare l'avvio dell'applicazione con npm start
. Aggiungi la riga in grassetto sottostante 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
). Ricorda, quando lavori con Deno, devi consentire esplicitamente l'accesso a una rete o a un file system.
Ora sei pronto per creare il modulo app.ts , responsabile dell'ascolto su una porta e del servizio delle richieste degli utenti.
Creazione del modulo App.ts
Creare un server di base in Deno è estremamente semplice. Innanzitutto, crea un file app.ts e incolla 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
della server.ts Deno library
memorizzata sul sito Web ufficiale di Deno.land. Questo codice fornisce anche un gestore della funzione serve
per le richieste in arrivo. La funzione gestore risponde a ogni richiesta con "Ciao dal server!"
La funzione serve
accetta anche parametri facoltativi, come il numero di porta su cui vuoi servire. Qui, l'esempio di codice usa questi parametri per servire sulla porta 8000.
Successivamente, avvia il server eseguendo npm start
. Questo dovrebbe avviare un server che ascolta su localhost:8000
e risponde alle richieste con un saluto.
Se desideri estendere il server a un'API completa, probabilmente dovrai aggiungere la connettività del database. È facile da fare poiché la comunità Deno ha creato driver che supportano database popolari come MariaDB/MySQL, PostgreSQL, MongoDB e altri.
Riepilogo
I tempi di esecuzione vanno da quelli comuni e affidabili a quelli molto sperimentali. La scelta di quella giusta per il tuo progetto dipende dal tuo progetto e da come vuoi che il tuo runtime ti aiuti a raggiungere i tuoi obiettivi.
Node.js funziona bene per la maggior parte dei progetti. Dispone di un ampio ecosistema e di una vasta community che può aiutare con un'ampia gamma di scenari di risoluzione dei problemi.
Deno ha il vantaggio di una maggiore sicurezza e una migliore esperienza per gli sviluppatori. Allo stesso tempo, è più adatto per i team esperti in modo che i suoi vantaggi superino il tempo e i costi di manodopera necessari per apprendere un runtime non familiare.
Infine, mentre Bun è troppo sperimentale per la maggior parte dei progetti professionali, è un runtime unico e divertente da raccogliere per un progetto personale o da espandere.
Tutto sommato, Deno offre un equilibrio tra i vantaggi di Node.js e le possibilità sperimentali di Bun. Sebbene Node.js sia una scelta utile per la maggior parte dei progetti, Deno potrebbe essere in prima linea su come lo sviluppo web si evolverà in futuro.
Nel frattempo, fate pratica con Deno iscrivendovi all'Application Hosting Hobby Tier di Kinsta, programmando ora e ridimensionando in seguito.