Retour aux articles
  • 25.11.2020

Deno vs Node.js ?

Deno vs Node.js ?

Avez-vous déjà entendu parler de Deno ? Ce runtime est pressenti comme futur remplaçant du Node.js, ce qui mérite que l’on s’y intéresse de plus près. 

Cet article vous propose de faire un focus sur Deno : définition, points communs et différences avec Node.js et future utilisation. 

 

 

Deno : kezako ? 

Derrière le nom “ Deno “ se cache en réalité un runtime utilisé pour JavaScript et TypeScript. 

Mais qu’est-ce qu’un runtime ? Un runtime est un petit programme qui permet d'exécuter des scripts sur un ordinateur, sur le même modèle de fonctionnement que Word avec les documents .docx, à la seule différence qu’ici, le code source est exécuté avec sa propre logique.

La conception de Deno repose essentiellement sur le moteur JavaScript V8 (aussi utilisé pour Node.js), ainsi que Rust et Tokio. Cette similarité au niveau du fonctionnement s’explique notamment par le fait que les deux ont été développés par la même personne : Ryan Dahl. 

Ce dernier a créé Deno afin de proposer un environnement plus productif et performant que Node.js et qui réponde aux attentes des développeurs en 2020 en corrigeant notamment les erreurs de conception de son prédécesseur. Sa principale utilisation : créer des serveurs web avec la sécurité et la productivité placées en étendard. 

Les principales caractéristiques de Deno

Comme évoqué précédemment, Deno est un runtime TypeScript sécurisé basé sur V8, le moteur d'exécution de Google pour JavaScript.

Il a été construit avec 4 principales composantes :

  • Rust (le noyau de Deno a été écrit en Rust tandis que Node.js est en C++) ;
  • Tokio ;
  • TypeScript (Deno supporte à la fois JavaScript et TypeScript) ;
  • V8 (le moteur d'exécution JavaScript de Google utilisé, par exemple, dans Chrome ou Node).

Deno combine les technologies open source les plus performantes qui sont regroupées au sein d’un même fichier exécutable. Son écriture en TypeScript lui offre de nombreux avantages relatifs à ce langage de programmation. Ceci est valable même si le code est écrit en JavaScript. Lorsque Deno exécute le code TypeScript, aucune compilation préalable du code n’est nécessaire. Deno s’en charge pour vous !

Autre avantage, et non des moindres : l’ensemble des modules utilisés par Deno peuvent être hébergés où vous le souhaitez avec une intégration automatique du protocole de sécurité relatif à ce runtime. 

Cependant, il est important de souligner que Node reste un excellent moteur d'exécution JavaScript côté serveur, principalement en raison de son vaste écosystème. 

Les points communs avec Node.js 

Puisque Deno a été développé dans la continuité de Node.js et a pour rôle de venir pallier les points faibles de ce dernier. Les deux convergent donc vers un même objectif, et même si leurs fonctionnements respectifs reposent sur des mécanismes différents, ils partagent bon nombre de similitudes : 

  • l’interface en ligne de commande construite à partir de Rust qui se démarque de part sa réactivité et intègre une API ; 
  • le fonctionnement avec le moteur V8 de Chrome ; 
  • leur facilité d’utilisation pour le développement côté serveur avec JavaScript. 

Les différences entre Deno et Node.js

Comme indiqué précédemment, Deno a pour principal objectif de résoudre tous (ou du moins la majorité) des problèmes inhérents à Node.js. Ceci implique qu’il existe plusieurs différences entre les deux qui proviennent des améliorations apportées à Deno. 

Tout d’abord, Node.js est écrit en langage C++ et en JavaScript, contrairement à Deno qui est écrit en Rust et TypeScript. TypeScript a clairement révolutionné le mode de fonctionnement du développement en JavaScript : il impose une certaine rigueur au développeur et aboutit à un code plus robuste qui nécessitera moins de débogage. La maintenance en est également facilitée, ce qui explique aussi pourquoi tant de développeurs front qui utilisent React ou Angular ont été séduits par TypeScript.  

La mécanique d’importation des modules est elle aussi différentes entre les deux. Tandis que les modules ES constituent le système par défaut sur lequel repose Deno, celui de Node.js est CommonJS. Le gestionnaire de paquets officiel de Node est npm, alors que Deno permet l’importation de n’importe quel module à partir d’une simple URL. Ce dernier jouit d’une grande flexibilité puisqu’il est possible de créer des paquets sans avoir besoin de les publier. 

Deno fournit aussi des outils complémentaires qui permettent de prendre en charge des tâches qui sont habituellement réalisées par des outils tiers tels que WebPack par exemple. Parmi les outils intégrés à Deno, nous pouvons citer entre autres : regroupement, test, installation de scripts, formatage et débogage… 

Côté sécurité, Deno se démarque réellement de Node.js. Deno offre une couche de sécurité de type " sandbox " par le biais des autorisations. Dans les faits, un programme ne peut accéder qu'aux permissions fixées. Deno nécessite des autorisations explicites pour l'accès à un fichier, au réseau et à l'environnement tandis qu’un programme Node.js peut accéder à tout ce à quoi l'utilisateur peut accéder.

Deno et Node.js sont tous les deux construits à partir de la V8 de Google Chrome, ce qui leur permet de profiter de la réactivité inégalée de la firme de Mountain View sur l'implémentation de JavaScript. 

Deno, candidat favori pour remplacer Node.js ? 

Pour conclure, l’utilisation de Deno comporte des avantages dont les principaux sont la sécurité et les performances, Rust ayant déjà permis d'améliorer grandement de nombreux outils après leur réécriture. Cependant, la problématique de compatibilité des modules reste à l’instant T non garantie : assez peu de modules sont garantis comme fonctionnant à la fois sur Node.js et Deno. Autre point : Deno a déjà fait l’objet de critiques concernant la gestion des dépendances qui repose sur un système d’URL plutôt qu’un gestionnaire de paquets.

Affaire à suivre donc, mais ces quelques ombres au tableau ne diminuent en rien les avantages indiscutables et l’efficacité de Deno ! Ce runtime a sans aucun doute de beaux jours devant lui puisqu’il n’en est qu’aux balbutiements de son développement. Nous aurons plus d’éléments de réponse avec quelques années de recul supplémentaires. 

Avec une touche d’humour (et un brin de nostalgie pour ceux qui auront la référence), nous pouvons finir cet article en disant : “ Deno le dernier runtime JS, il est performant et bien plus encore ! “