June 10, 2023

Branches Tech

Engagé pour la qualité technologique

Explorer Deno et Bun (avec des exemples de code)

10 min read
Node.js alternatives - Deno and Bun with simple code example

Node.js est le runtime JavaScript de facto pour le backend. Dans cet article, vous découvrirez les nouvelles alternatives Node.js Deno et Bun avec un simple exemple de code d’API Joke et comment l’héberger. Commençons!

Alternatives Node.js - Deno et Bun avec un exemple de code simple

Table des matières #

Ne pas comparer avec d’autres langues #

JavaScript est un langage particulier, il a sa propre part de bizarreries et de problèmes. C’est le seul langage qui peut être utilisé nativement pour le développement de logiciels backend et frontend. Les applications de bureau peuvent être écrites en JavaScript avec Electron. JavaScript est le langage du web que parlent les navigateurs et Node.js est sorti mi-2009, il a été très bien exploité côté serveur également au cours des 13 dernières années.

Donc, cet article ne compare pas Node.js avec d’autres langages comme PHP, Python, Ruby ou dot net comme alternatives Node.js car ils sont dans une ligue différente. Pour cette pièce, vous découvrirez d’autres Node.js comme les runtimes JavaScript qui sont censés donner à Node.js une course pour son argent.

Comme l’a dit Bjarne Stroustrup, le créateur de C++ :

Il n’y a que deux sortes de langues, celles dont les gens se plaignent et celles que personne n’utilise.

JavaScript tombe sûrement dans la première catégorie et c’est l’un des meilleurs langages de programmation sur Github depuis 8 ans maintenant. Node.js lors de sa sortie était le seul moyen d’écrire du JavaScript sur le serveur, mais plus d’une décennie plus tard, il existe de nouvelles façons de le faire. Dans la partie suivante, vous découvrirez la popularité de Node.js et les alternatives possibles de Node.js dans la sphère JavaScript.

Node.js et sa popularité #

Node.js a été publié à la mi-2009. Il s’agit d’un environnement d’exécution JavaScript open source et multiplateforme qui exécute le moteur JavaScript V8 (le cœur de Google Chrome) en dehors du navigateur. Cette sauce rend Node.js très performant.

La magie de Node.js réside dans la boucle d’événements, la définition la plus simple de la boucle d’événements est qu’elle peut pousser les tâches dans la file d’attente en arrière-plan pour qu’elles soient récupérées plus tard. Une meilleure façon de l’expliquer est dans ce vidéo.

Node.js est devenu très populaire dans le 10 dernières années. C’est devenu une technologie en demande pour tout type de projet, par exemple, vous pouvez créer une application de bureau avec Électron. L’application Slack que vous connaissez peut-être est également une application Electron.

Avec ses fonctionnalités telles que la vitesse, les performances et l’évolutivité, la création de microservices Node.js est également un cas d’utilisation populaire pour écrire du code JavaScript sur le serveur. Les développeurs JavaScript adorent Node.js depuis plus d’une décennie maintenant.

Regardons une simple API Joke construite avec Express (le framework Node.js le plus populaire) pour avoir un aperçu de ce à quoi ressemble le code Node.js :

const express = require('express');
const app = express();
const port = process.env.PORT || 3000;

app.get("https://geshan.com.np/", (req, res) =>
res.json(message: 'ok');
);

app.get('/api/joke', (req, res) =>
const JOKES = [
"Why do Java developers often wear glasses? They can't C#.",
"A SQL query walks into a bar, goes up to two tables and says “can I join you?”",
"Wasn't hard to crack Forrest Gump's password. 1forrest1.",
"I love pressing the F5 key. It's refreshing.",
"Called IT support and a chap from Australia came to fix my network connection. I asked “Do you come from a LAN down under?”",
"There are 10 types of people in the world. Those who understand binary and those who don't.",
"Why are assembly programmers often wet? They work below C level.",
"My favourite computer based band is the Black IPs.",
"What programme do you use to predict the music tastes of former US presidential candidates? An Al Gore Rhythm.",
"An SEO expert walks into a bar, pub, inn, tavern, hostelry, public house.",
];
const randomIndex = Math.floor(Math.random() * JOKES.length);
const joke = JOKES[randomIndex];
res.json(joke);
);

app.listen(port, () =>
console.log(`Jokes API app listening on port $port`);
);

Comme vu ci-dessus, la création d’un serveur Web de base est très facile avec Node.js. Le code ci-dessus envoie une blague aléatoire parmi les 10 du tableau pour chaque nouvelle requête. Vous pouvez facilement déployer l’application ci-dessus dans l’un des 3 services d’hébergement Node.js gratuits.

Le code ci-dessus est dans ce GitHub référentiel pour votre référence et vous pouvez afficher l’application en cours d’exécution sur Cyclique. L’exemple de code est tiré du passe-partout du framework Fresh.

Avec ce code à l’esprit, dans la section suivante, vous découvrirez Deno en tant que première alternative Node.js dans l’espace JavaScript.

Deno – renverse No-De sur sa tête #

Deno retourne le mot No-De. Il est créé par la même personne qui a créé Node.js – Ryan Dahl. Selon luiil s’agit de la nouvelle génération de Node.js axée sur la sécurité, la vitesse et d’autres fonctionnalités dans un seul exécutable.

Selon l’officiel Déno site Internet:

Deno est un environnement d’exécution simple, moderne et sécurisé pour JavaScript, TypeScript et WebAssembly qui utilise V8 et est construit en Rust.

Il adopte les normes de la plate-forme Web et est sécurisé par défaut, ce qui signifie qu’aucun accès aux fichiers, au réseau ou à l’environnement n’est donné explicitement. Il prend également en charge TypeScript prêt à l’emploi sans avoir besoin d’utiliser ts-node ou d’autres outils.

Il existe de nombreuses entreprises »intéressé” à Deno et quelques-uns l’ont mis en production comme Fonctions Netlify Edge sont alimentés par Deno.

Pas sûr que ce soit l’effet Bun js, Deno en a annoncé grands changements en avant. Les modifications incluent l’objectif de devenir le runtime JavaScript le plus rapide, permettant d’importer facilement des packages NPM.

Si vous êtes intéressé par Deno et le framework Fresh, veuillez écouter cet incroyable podcast où Luca Casonato parle de tout ce qui concerne Deno et Fresh.

Pour un exemple de code rapide, vous pouvez regarder l’API Joke simple dans le cadre du Frais framework construit avec Deno ci-dessous :

import  HandlerContext  from "$fresh/server.ts";


const JOKES = [
"Why do Java developers often wear glasses? They can't C#.",
"A SQL query walks into a bar, goes up to two tables and says “can I join you?”",
"Wasn't hard to crack Forrest Gump's password. 1forrest1.",
"I love pressing the F5 key. It's refreshing.",
"Called IT support and a chap from Australia came to fix my network connection. I asked “Do you come from a LAN down under?”",
"There are 10 types of people in the world. Those who understand binary and those who don't.",
"Why are assembly programmers often wet? They work below C level.",
"My favourite computer based band is the Black IPs.",
"What programme do you use to predict the music tastes of former US presidential candidates? An Al Gore Rhythm.",
"An SEO expert walks into a bar, pub, inn, tavern, hostelry, public house.",
];

export const handler = (_req: Request, _ctx: HandlerContext): Response =>
const randomIndex = Math.floor(Math.random() * JOKES.length);
const body = JOKES[randomIndex];
return new Response(body);
;

Le code semble assez facile à comprendre. Il suit les normes de la plate-forme Web telles que les objets Request et Response, ce qui le rend bien adapté au déploiement en périphérie. En parlant de cela, déployer Deno Fresh avec Deno Deploy était un jeu d’enfant. Avec 34 régions, aucune maintenance et prise en charge des modules Typescript, Wasm et ES, Deno Deploy est un excellent service. En plus de cela, vous obtenez gratuitement 100 000 requêtes par jour avec un transfert de données de 100 Gio par mois.

La fichier ci-dessus et le passe-partout Fresh framework sont disponibles dans ce GithubGenericName référentiel pour votre référence. Vous pouvez voir l’application en cours d’exécution sur Deno Deploy.

Cela dit, en tant qu’alternative à Node.js, Deno n’est pas prêt pour les heures de grande écoute. Il a été utilisé dans la production par certains. Pourtant, tous les modules NPM ne fonctionnent pas avec Deno. Il existe une liste de 5k+ modules tiers mais ce n’est rien comparé à ce que Node.js a dans NPM.

Si vous souhaitez essayer Deno en tant qu’alternative à Node.js, faites-le, mais avec une certaine prudence générale. Dans la section suivante, vous découvrirez le tout dernier runtime Javascript tout-en-un Bun.

Bun l’alternative Node.js du futur #

Chignon est le petit nouveau sur le bloc qui provoque des vagues dans le pays JavaScript. Créé par Jarred Sumner, il a été annoncé le HackerActualités quelque 9 mois en arrière. Bun a attiré beaucoup plus d’attention il y a environ un mois et a été surnommé le Node.js tueur donc une alternative évidente à Node.js.

Le site officiel de Bun indique :

Bun est un runtime JavaScript tout-en-un rapide

Ce qui n’est pas très descriptif, donc ça ajoute aussi :

Regroupez, transpilez, installez et exécutez des projets JavaScript et TypeScript, le tout dans Bun. Bun est un nouveau runtime JavaScript avec un bundler natif, un transpileur, un exécuteur de tâches et un client npm intégré.

Il serait donc juste de dire que Bun est la véritable chaîne d’outils JavaScript complète qui comprend un bundler, un transpiler, un gestionnaire de packages (client npm), un exécuteur de tâches et tout le reste. On dit qu’il se concentre sur 3 choses, la vitesse, de nouveaux niveaux de performance et qu’il s’agit d’un outil formidable et complet.

Il est écrit en Zig langage de programmation et prétend exécuter 60,24 requêtes par seconde pour une application SQLite contre 23,28 QPS pour une application Node 18 avec better-sqlite3. Vous pouvez écouter Jarred à propos de Zig, de l’accent mis sur les performances et d’autres choses à ce sujet podcast à propos de Bun. Vous pouvez installer bun avec curl https://bun.sh/install | bash et commencer à l’utiliser.

Jetons un coup d’œil à du code Bun pour l’API Joke ci-dessus :

export default 
port: 8080,
fetch(request)
console.log(`Requesting $request.url`);

const JOKES = [
"Why do Java developers often wear glasses? They can't C#.",
"A SQL query walks into a bar, goes up to two tables and says “can I join you?”",
"Wasn't hard to crack Forrest Gump's password. 1forrest1.",
"I love pressing the F5 key. It's refreshing.",
"Called IT support and a chap from Australia came to fix my network connection. I asked “Do you come from a LAN down under?”",
"There are 10 types of people in the world. Those who understand binary and those who don't.",
"Why are assembly programmers often wet? They work below C level.",
"My favourite computer based band is the Black IPs.",
"What programme do you use to predict the music tastes of former US presidential candidates? An Al Gore Rhythm.",
"An SEO expert walks into a bar, pub, inn, tavern, hostelry, public house.",
];
const randomIndex = Math.floor(Math.random() * JOKES.length);
const joke = JOKES[randomIndex];

return new Response(joke);
,
;

Le code ne semble pas très différent de Node.js ou Deno et il utilise également l’objet Response du standard des plates-formes Web. Le code n’a pas été facile à déployer, car aucun service ne prend officiellement en charge bun pour le moment.
Ainsi, il a été emballé dans un conteneur en utilisant les éléments suivants Dockerfile:

FROM jarredsumner/bun:0.1.10

COPY http.js /app/http.js

EXPOSE 8080

CMD ["bun", "run", "/app/http.js"]

Et ensuite déployé sur Google Cloud Run en tant que conteneur sans serveur. Il était également difficile de construire le Dockerfile lorsqu’un bun install Était dirigé. Il toucherait le qemu: uncaught target signal 4 (Illegal instruction) - core dumped que je n’ai pas beaucoup creusé pour résoudre. Vous pouvez voir le code dans ce GitHub dépôt. Bun a une nouvelle version sur DockerhubName. Voici l’API Bun Jokes fonctionnant sur Render avec le Dockerfile ci-dessus, vous pouvez Essaye le.

Désormais, en tant qu’alternative à Node.js, Bun n’est pas non plus prêt à être utilisé en production. C’est formidable que bun ait toutes les batteries incluses comme un transpiler, un gestionnaire de paquets, un bundler et un gestionnaire de tâches, mais il est trop tôt pour parier.

Bun fait des déclarations audacieuses comme bun install est 20 fois plus rapide que yarn et bun run économise 160 ms à chaque exécution par rapport à npm run. Il y a beaucoup de pas mis en œuvre Les API que Bun doit implémenter comme WebSocket, les dates et les horodatages, etc. Vous pouvez jouer avec bun, par exemple, comparer bun install contre npm install ou yarnmais en tant qu’alternative à Node.js, Bun a encore beaucoup de chemin à parcourir pour devenir une force dominante.

Conclusion #

Vous avez découvert deux nouvelles alternatives Node.js Deno et Bun. Pour le moment, les deux ont beaucoup de chemin à parcourir pour être vraiment aussi dominants que Node.js.

Deno semble très prometteur en tant qu’alternative à Node.js, mais Bun, bien que prétendant être super rapide, doit travailler sur plus de compatibilité et également sur les problèmes de construction de docker.

Dans la situation actuelle, Deno et Bun n’ont pas la puissance de feu pour remplacer Node de si tôt.

Bon codage !

Leave a Reply