Deno 2.9 vient d'être publié en tant que dernière version de ce moteur d'exécution JavaScript open source très populaire. Cette mise à jour majeure introduit « deno desktop », un nouvel outil conçu pour rationaliser le développement d’applications de bureau natives à partir de projets web. Parallèlement à cette version, Deno 2.9 facilite l’adoption par les développeurs en permettant à la commande deno install de lire directement les fichiers de verrouillage npm, pnpm, Yarn et Bun. Cette mise à jour aligne Deno sur la dernière cible de compatibilité Node.js 26, ajoute la prise en charge de l’importation de fichiers CSS en tant que feuilles de style constructibles à l’aide d’attributs d’importation, et étend considérablement l’API Web Cryptography avec des algorithmes modernes et post-quantiques basés sur les propositions du NIST.Deno est un moteur d'exécution pour JavaScript, TypeScript et WebAssembly, basé sur le moteur JavaScript V8 et le langage de programmation Rust. Deno a été co-créé par Ryan Dahl, le créateur de Node.js, et Bert Belder. Deno assume explicitement le rôle à la fois de moteur d'exécution et de gestionnaire de paquets au sein d'un seul exécutable, sans nécessiter de programme de gestion de paquets distinct.
Deno se veut un environnement de script productif et sécurisé destiné aux programmeurs modernes. À l'instar de Node.js, Deno met l'accent sur une architecture orientée événements, en proposant un ensemble d'utilitaires d'E/S de base non bloquants, ainsi que leurs versions bloquantes. Deno peut être utilisé pour créer des serveurs web, effectuer des calculs scientifiques, etc. Deno est un logiciel open source sous licence MIT.
Récemment, Deno 2.9 vient d'être publié en tant que dernière version de ce moteur d'exécution JavaScript open source très populaire. Cette mise à jour majeure introduit « deno desktop », un nouvel outil conçu pour rationaliser le développement d’applications de bureau natives à partir de projets web. Au lieu de s’appuyer sur Electron ou Tauri, les développeurs pointent « deno desktop » vers n’importe quel script ou framework web, et celui-ci compile le code en un binaire unique et autonome. L’interface utilisateur s’exécute dans une vue web, tandis que la logique de l’application s’exécute dans Deno, ce qui donne lieu à une application native portable et distribuable.
« deno desktop » redéfinit complètement les règles du jeu en matière de distribution pour ordinateurs de bureau. Au lieu d'encapsuler votre projet dans des couches IPC à forte friction et des frameworks lourds, deno desktop cible votre référentiel web existant (Next.js, Astro, Remix, SvelteKit, etc.) et le compile en un exécutable natif léger et autonome. Pas de réécriture de code, pas d'empreinte de dépendances massive, et une compatibilité totale avec Node/npm dès l'installation. Le résultat est un binaire redistribuable qui regroupe votre code, le runtime Deno et un moteur de rendu Web en un seul paquet par plateforme.
Parallèlement à cette version, Deno 2.9 facilite l’adoption par les développeurs en permettant à la commande deno install de lire directement les fichiers de verrouillage npm, pnpm, Yarn et Bun. Cela simplifie la transition pour ceux qui migrent des projets Node.js vers Deno en limitant les étapes de migration à quelques commandes. Les performances ont également été améliorées au niveau du démarrage, de l’utilisation de la mémoire et du débit HTTP, ce qui profite à la plupart des projets.
Cette mise à jour aligne Deno sur la dernière cible de compatibilité Node.js 26, ajoute la prise en charge de l’importation de fichiers CSS en tant que feuilles de style constructibles à l’aide d’attributs d’importation, et étend considérablement l’API Web Cryptography avec des algorithmes modernes et post-quantiques basés sur les propositions du NIST. Plusieurs commandes intégrées, notamment `deno compile`, `deno bundle`, `deno fmt` et `deno task`, ont été améliorées. Ces modifications en arrière-plan sont complétées par une meilleure gestion des dépendances, une sécurité renforcée de la chaîne d’approvisionnement, des outils de test et de couverture affinés, ainsi que des paramètres de traçage OpenTelemetry plus granulaires pour l’observabilité.
Voici un extrait de l'annonce de Deno 2.9 :
Performances
Deno 2.9 apporte des gains de performances significatifs en termes de temps de démarrage, d’utilisation de la mémoire et de débit HTTP. Les tests de performance Deno.serve ci-dessous exécutent trois charges de travail avec un niveau de concurrence de 100 : un « Hello, World ! » en texte clair, un corps de réponse de 1 Mio et une requête réaliste qui envoie via POST une charge utile JSON avec un en-tête d’authentification « Bearer » et la renvoie sous forme de JSON. Toutes ces mesures ont été effectuées sur une machine Linux x86_64 dédiée, en comparaison avec Deno 2.8.0 :
Démarrage. Un programme « hello-world » démarre désormais à froid en environ la moitié du temps nécessaire avec la version 2.8 (passant de 34 ms à 17 ms). Ce gain provient du chargement différé des variables globales de Node à partir du snapshot, de la limitation du démarrage précoce de Node aux workers Node, d’un cache de code V8 pour les modules ESM résiduels chargés de manière différée, et d’un snapshot minifié ; sous macOS, des corrections en chaîne réduisent encore le temps de pré-main.
Mémoire. Le point marquant de ce cycle est la gestion de la mémoire sous charge. Dans la version 2.8, la taille de l’ensemble résident (RSS) augmentait avec la charge de travail, passant d’environ 94 Mo lors du service de texte en clair à 197 Mo lors de la diffusion en continu de corps de 1 Mio. Dans la version 2.9, elle reste pratiquement stable, se maintenant autour de 62 Mo quelle que soit l’activité du serveur. Cela se traduit par une RSS de pointe 2,2 fois inférieure pour la charge de travail en conditions réelles (passant de 142 Mo à 64 Mo) et 3,1 fois inférieure pour les corps de 1 MiB (passant de 197 Mo à 63 Mo) ; ainsi, une même machine peut exécuter beaucoup plus d’instances Deno.serve simultanées avant d’atteindre ses limites.
Débit HTTP. Deno.serve est également plus rapide dans tous les cas de figure : la charge de travail en conditions réelles gagne 1,27 fois en débit, le texte en clair 1,11 fois et les corps de 1 Mio 1,18 fois, grâce à un nouveau chemin de service HTTP/1.1 propre à Deno.
Plusieurs chemins critiques ont également été transférés de JavaScript vers Rust dans cette version : crypto.subtle et console / Deno.inspect.
Importations de modules CSS
Deno 2.9 prend en charge l’importation de fichiers CSS en tant que feuilles de style constructibles à l’aide d’attributs d’importation, conformément à la norme web relative aux scripts de modules CSS :
| Code : | Sélectionner tout |
1 2 3 | import sheet from "./styles.css" with { type: "css" }; document.adoptedStyleSheets = [sheet]; |
L’importation donne lieu à une instance CSSStyleSheet, ce qui permet au même code de s’exécuter aussi bien dans Deno que dans le navigateur sans passer par une étape de regroupement. Cette fonctionnalité est activée via l’option --unstable-raw-imports dans la version 2.9. Une simple importation CSS n’a pas grand intérêt en soi, mais elle fait toute la différence entre un code front-end s’exécutant sous Deno et un code qui bloque le chargeur de modules : les composants et modules qui importent leurs propres feuilles de style se chargent désormais directement et font l’objet d’une vérification de types, ce qui facilite considérablement le test du code front-end dans Deno.
Migration depuis npm, pnpm, yarn et Bun
La migration d’un projet Node existant vers Deno est on ne peut plus simple : dans la plupart des cas, quelques commandes suffisent. Exécutez deno install pour récupérer vos dépendances, puis deno task dev pour lancer votre application, et vous êtes déjà sur Deno. Il n’y a rien à porter ni à réécrire. Deno lit le fichier package.json, le fichier de verrouillage et la structure...
La fin de cet article est réservée aux abonnés. Soutenez le Club Developpez.com en prenant un abonnement pour que nous puissions continuer à vous proposer des publications.