Bien que Node.js reste de loin le moteur d’exécution JavaScript côté serveur le plus utilisé, des moteurs d’exécution alternatifs tels que Deno et Bun ont attiré l’attention en tentant d’améliorer le concept de Node.js.

Deno, le plus populaire des deux nouveaux runtimes, résout certains problèmes de sécurité inhérents à Node.js et offre un support plus complet pour des technologies telles que TypeScript et WebAssembly.

Dans cet article, vous explorerez les bases de Deno, apprendrez comment il se compare à Node.js et Bun, et suivrez une démonstration pratique qui utilise Deno pour construire un simple serveur web HTTP.

Qu’est-ce que Deno ?

Au fur et à mesure que les développeurs se familiarisaient avec JavaScript, ils ont vu son potentiel pour la programmation sur des machines locales. Ils ont donc créé des environnements d’exécution côté serveur, qui permettent d’exécuter du code JavaScript sur des machines sans utiliser de navigateur.

Ryan Dahl a développé Node.js dans ce but et, plus tard, a créé Deno pour résoudre certains des problèmes qu’il a rencontrés avec la conception originale de Node.js. Parmi les défauts notables, citons la dépendance à l’égard d’un gestionnaire de paquets centralisé tel que npm, l’absence de bibliothèque standard et des réglages de sécurité laxistes par défaut.

Voici quelques-uns des principaux avantages de Deno :

  • Sécurité par défaut – L’utilisateur doit explicitement autoriser le code à accéder au réseau, au système de fichiers ou à l’environnement.
  • Support intégré pour TypeScript et WebAssembly – L’exécution de programmes TypeScript et WebAssembly dans Deno est aussi facile que l’exécution de programmes JavaScript. Le runtime compile les langages comme il le fait avec JavaScript.
  • Un gestionnaire de paquets décentralisé – Au lieu de s’appuyer sur un dépôt de paquets comme npm ou le gestionnaire de paquets de Bun, Deno peut importer du code directement à partir d’URL. Cela signifie que vous pouvez charger des dépendances à partir de n’importe quel endroit où elles sont hébergées, y compris votre dépôt GitHub, votre serveur ou votre CDN. Deno propose également un service d’hébergement de scripts pour un accès encore plus facile.
  • Conformité avec les standards du web – Deno vise à suivre les mêmes API que les navigateurs, ce qui signifie que le code écrit pour les navigateurs est facilement traduisible dans le runtime.

De grandes entreprises et des acteurs majeurs de l’industrie tels que Slack, Netlify et Supabase ont adopté Deno, mais son adoption par les développeurs web est moins répandue. Selon l’enquête Stack Overflow de 2022, seulement 1,47 % des développeurs professionnels ayant répondu à l’enquête utilisaient Deno, tandis que 46,31 % déclaraient utiliser Node.js.

Que fait Deno ?

Comme tout moteur d’exécution JavaScript, Deno permet aux développeurs d’exécuter JavaScript côté serveur. Par conséquent, vous pouvez utiliser Deno pour accomplir une grande variété de tâches de programmation.

Deno excelle surtout dans des tâches telles que le développement d’applications serveur qui répondent aux demandes des utilisateurs sur le web. Par exemple, si vous créez une librairie en ligne, vous pouvez utiliser Deno pour créer une application qui récupère les informations d’une base de données PostgreSQL, construit la page que l’utilisateur souhaite consulter et l’envoie au navigateur pour qu’elle soit rendue.

Vous pouvez également utiliser Deno pour des tâches de programmation de niveau inférieur, comme la création d’un outil de ligne de commande pour gérer vos tâches via le terminal. En d’autres termes, vous pouvez utiliser Deno pour atteindre les mêmes objectifs qu’avec des langages comme Python ou Ruby.

Deno vs Node

Deno se veut une amélioration par rapport à Node.js, et il remplit cette promesse dans plusieurs domaines clés. Deno améliore la sécurité en permettant des configurations d’accès plus fines pour les différents modules de code. Il se concentre également sur la conformité des API aux normes web, ce qui permet aux développeurs d’utiliser le même code du côté du navigateur et du côté du serveur.

Pour les équipes travaillant sur des projets JavaScript côté serveur, Deno est devenu une alternative viable à Node. Bien que leurs fonctionnalités similaires aient convaincu certains développeurs que Deno pourrait remplacer Node.js, cette possibilité est peu probable pour quelques raisons essentielles.

Node.js est le moteur d’exécution JavaScript le plus populaire et il a accumulé un vaste écosystème de paquets pré-écrits et une communauté d’utilisateurs importante et active. Ces ressources inestimables permettent à Node.js de rester un moteur d’exécution extrêmement attractif.

En revanche, Deno est nouveau : la version 1.0 a été publiée en mai 2020, de sorte que relativement peu de développeurs ont eu le temps de jouer avec. L’apprentissage d’un nouvel outil allonge les délais de développement. En outre, il n’est pas certain que Deno apporte des avantages significatifs à de nombreux projets simples.

Mais si vous développez une application dans un domaine où la sécurité est essentielle, comme la finance, les capacités de sécurité de Deno pourraient justifier un changement.

Deno vs Bun

Jarred Sumner, ancien ingénieur chez Stripe, a lancé Bun en juillet 2022 pour les tests bêta. Bun est un runtime plus expérimental que Deno et, contrairement à Deno, il est conçu pour offrir une compatibilité ascendante étendue avec Node.js.

Bun peut également se vanter d’avoir des performances incroyablement rapides, surpassant Node.js et Deno. Les principales caractéristiques permettent d’obtenir ces capacités :

  • Un meilleur moteur – Au lieu du moteur JavaScript et web Assembly V8 de Google, Bun utilise le moteur JavaScriptCore, plus rapide et plus efficace, comme moteur JavaScript sous-jacent.
  • Un meilleur contrôle du code – Bun est écrit en Zig, un langage de bas niveau qui permet un meilleur contrôle de l’exécution du code que JavaScript.
  • Une efficacité finement réglée – L’équipe travaillant sur Bun a donné la priorité au profilage, à l’analyse comparative et à l’optimisation pendant le développement afin de garantir l’efficacité du code.

Bun est si récent qu’il y a relativement peu de support communautaire pour aider au dépannage. Néanmoins, Bun peut être un outil d’expérimentation amusant. Les équipes qui ont spécifiquement besoin d’une augmentation des performances peuvent trouver Bun utile pour leurs projets, mais le développement web donne souvent la priorité à d’autres facteurs que les performances.

Démarrer avec Deno

Maintenant que vous en savez un peu plus sur Deno et qu’il se compare à d’autres runtimes JavaScript populaires, il est temps de voir comment il fonctionne. Dans cette section, vous apprendrez à créer un serveur simple dans Deno qui répond aux requêtes HTTP par « Hello from the server ! »

Installation de Deno

Vous pouvez installer Deno sur une machine en tant qu’exécutable binaire en utilisant les instructions d’installation de la documentation officielle. Sur macOS, par exemple, vous pouvez installer Deno avec la commande brew install deno.

Une autre façon de commencer à travailler avec Deno est de l’installer en tant que paquet npm, comme ceci :

Créez un dossier pour votre projet (deno_example par exemple) et exécutez la commande npm init dans ce dossier. (Vous pouvez accepter toutes les options par défaut proposées par init qui crée un fichier package.json de base)

Après avoir initialisé votre application, exécutez npm install deno-bin pour installer le paquetage binaire Deno. Vous pouvez maintenant mettre à jour le fichier package.json pour permettre le lancement de l’application avec npm start. Ajoutez la ligne ci-dessous commençant par « start » : aux propriétés de l’objet « scripts » dans le fichier package.json par défaut :

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

Cet ajout de script permet à Deno d’exécuter le module app.ts avec des privilèges réseau (--allow-net). Rappelez-vous que lorsque vous travaillez avec Deno, vous devez explicitement autoriser l’accès à un réseau ou à un système de fichiers.

Vous êtes maintenant prêt à créer le module app.ts, chargé d’écouter un port et de répondre aux demandes des utilisateurs.

Création du module app.ts

La création d’un serveur de base dans Deno est extrêmement simple. Tout d’abord, créez un fichier app.ts et collez le code suivant :

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

Le code utilise la fonction serve du fichier server.ts Deno library stockée sur le site officiel de Deno.land. Ce code fournit également un gestionnaire de fonction serve pour les requêtes entrantes. La fonction handler répond à chaque requête par « Hello from the server ! »

La fonction serve prend également des réglages facultatifs, tels que le numéro de port sur lequel vous souhaitez servir. Ici, l’exemple de code utilise ces paramètres pour servir sur le port 8000.

Ensuite, démarrez le serveur en exécutant npm start. Cela devrait lancer un serveur qui écoute sur localhost:8000 et répond aux demandes avec un message d’accueil.

Serveur Deno en action
Serveur Deno en action

Si vous souhaitez étendre le serveur à une API complète, vous devrez probablement ajouter une connectivité de base de données. C’est facile à faire puisque la communauté Deno a créé des pilotes supportant des bases de données populaires comme MariaDB/MySQL, PostgreSQL, MongoDB, et bien d’autres.

Résumé

Les runtimes vont des plus courants et fiables aux plus expérimentaux. Choisir le bon pour votre projet dépend de votre projet et de la façon dont vous voulez que votre runtime vous aide à atteindre vos objectifs.

Node.js fonctionne bien pour la plupart des projets. Il dispose d’un vaste écosystème et d’une grande communauté qui peut vous aider à résoudre un grand nombre de problèmes.

Deno offre l’avantage d’une sécurité accrue et d’une meilleure expérience pour les développeurs. En même temps, il convient mieux aux équipes expérimentées, de sorte que ses avantages l’emportent sur les coûts de temps et de main-d’œuvre liés à l’apprentissage d’un moteur d’exécution inconnu.

Enfin, bien que Bun soit trop expérimental pour la plupart des projets professionnels, c’est un runtime unique et amusant à prendre pour un projet personnel ou à développer.

Dans l’ensemble, Deno offre un équilibre entre les avantages de Node.js et les possibilités expérimentales de Bun. Alors que Node.js est un choix utile pour la plupart des projets, Deno pourrait être à l’avant-garde de la façon dont le développement web évoluera à l’avenir.

En attendant, exercez vos talents avec Deno en vous inscrivant à l’hébergement d’application Hobby Tier de Kinsta – coder maintenant et faire évoluer plus tard.

Jeremy Holcombe Kinsta

Rédacteur en chef du contenu et du marketing chez Kinsta, développeur web WordPress et rédacteur de contenu. En dehors de WordPress, j'aime la plage, le golf et le cinéma. J'ai aussi des problèmes avec les personnes de grande taille ;).