Qu'est-ce que Deno et remplacera-t-il Node.js?



Bonne journée. Je vous présente la traduction de l'article «Deno vs. Node.js - Voici les différences les plus importantes » par Louis Petrik.

Deno est-il le nouveau Node.js? Ou juste une bonne alternative? Dans cet article, je vais essayer de répondre à ces questions.

Histoire de Deno


Deno et Node.js sont le fonctionnement d'une seule personne - Ryan Dahl.

Dahl travaille sur Node.js depuis 2009, mais après quelques années, il a quitté l'équipe. En 2018, il a fait une présentation, «10 choses que je regrette à propos de Node.js.» Dans cette présentation, Dahl a présenté Deno - un nouveau «moteur» pour JavaScript et TypeScript.

Fait amusant: «Deno» est une anagramme de «Node».

Les développeurs devraient-ils avoir peur que Deno remplace Node.js dans un avenir proche?

Dahl lui-même croit non.



Lien vers la vidéo.

Comme le note Dahl dans son discours, Deno est toujours inférieur à Node.js en termes d'exhaustivité (stabilité).

Cependant, les deux sont des exécutions de code JS en dehors du navigateur, par exemple, sur un serveur Web. Mais presque personne ne peut dire comment la "relation" entre Node.js et Deno se développera dans quelques années.

Deno et Node.js: périphérique interne


Node.js est écrit en C ++ et utilise V8 pour exécuter le code JS. V8 a été spécialement conçu pour Google Chrome pour exécuter le code JS dans le navigateur le plus rapidement possible. Actuellement, presque tous les navigateurs, y compris Microsoft Edge, sont passés à V8.

Deno est également basé sur V8, mais au lieu de C ++, il utilise Rust, un langage dont l'objectif n'est pas seulement de bonnes performances non inférieures à C ++, mais aussi la sécurité: éliminer les erreurs d'accès à la mémoire ou les débordements de tampon.

La sécurité est l'un des principaux inconvénients de Node.js, car après le lancement de l'application, il accède au système de fichiers ou au réseau.

Deno essaie de résoudre ce problème en demandant à l'utilisateur la permission d'accéder.

Un bon exemple est le code TS suivant du site officiel de Deno:

import { serve } from 'https://deno.land/std@0.50.0/http/server.ts'

const s = serve({ port: 8000 })

for await (const req of s) {
	req.respond({ body: 'Hello World\n'})
}

Comme vous pouvez le voir, il s'agit d'un serveur Web très simple qui démarre comme ceci:

deno run app.ts

Cependant, étant donné que Deno n'est pas autorisé à accéder au réseau, nous obtenons le message suivant:



Pour fournir l'accès, nous devons faire ce qui suit:

deno run --allow-net app.ts

Maintenant, notre serveur fonctionne. Mais l'application n'aura pas accès au système de fichiers tant que nous ne l'aurons pas autorisé.

Au revoir NPM, bonjour l'importation ES6


Un autre problème de sécurité pour nos applications est NPM: non seulement l'utilisation de NPM crée un énorme dossier «node_modules», mais les packages installés qui font fonctionner l'application peuvent théoriquement contenir du code malveillant.

Deno n'utilise pas NPM, mais les bibliothèques sont importées via URL, comme indiqué dans l'exemple.

import { serve } from 'https://deno.land/std@0.50.0/http/server.ts'

La bibliothèque est chargée lors de la première exécution et mise en cache:



cela ressemble à la façon dont nous copions le code de notre serveur Web et le stockons séparément sur le serveur ou l'ordinateur pour réutilisation. Les bibliothèques n'ont pas besoin d'être rechargées.

Objet fenêtre en dehors du navigateur


La fenêtre est un objet global dans le navigateur contenant des fonctions JS très importantes.

Une telle fonctionnalité est la récupération. Fecth ne peut pas être utilisé dans Node.js - il existe des bibliothèques spéciales pour cela, mais dans Deno c'est possible.

Cela est dû au fait que Deno a accès à Windows, comme indiqué dans la documentation .

Le code suivant peut être exécuté à la fois dans le navigateur et dans Deno:

fetch('https://jsonplaceholder.typicode.com/todos/1')
	.then(response => response.json)
	.then(data => console.log(data))

Prise en charge de TypeScript prête à l'emploi


L'utilisation de TypeScript est bien sûr une question de goût. Certains l'aiment, d'autres non. Quoi qu'il en soit, Deno prend en charge TypeScript prêt à l'emploi et, bien sûr, il prend également en charge JavaScript.

Vous pouvez le vérifier en écrivant du code, en enregistrant le fichier au format .ts ou .js et en l'exécutant avec deno run. À mon avis, ce n'est pas un avantage important, car le support TypeScript peut facilement être ajouté à Node.js.

Merci de votre attention.

All Articles