L'auteur de Node.js a présenté la plateforme JavaScript sécurisée Deno 1.0

AprĂšs deux ans de dĂ©veloppement prĂ©sentĂ© le premier lancement significatif Deno 1.0, une plateforme pour l'exĂ©cution isolĂ©e d'applications Ă©crites en JavaScript et TypeScript, qui peut ĂȘtre utilisĂ©e pour crĂ©er des gestionnaires fonctionnant sur le serveur. La plateforme est dĂ©veloppĂ©e par Ryan Dahl (Ryan Dahl), le crĂ©ateur de Node.js. Tout comme dans Node.js, Deno utilise le moteur JavaScript V8, Ă©galement utilisĂ© dans les navigateurs basĂ©s sur Chromium. Cependant, Deno n'est pas un fork de Node.js, mais constitue un projet entiĂšrement nouveau créé de toutes piĂšces. Le code du projet est distribuĂ© est sous licence MIT. Les versions prĂ©parĂ©s sont disponibles pour Linux, Windows et macOS.

Le numĂ©ro de version significatif est liĂ© Ă  la stabilisation de l'API dans l'espace de noms Deno, qui est responsable de l'interaction des applications avec le systĂšme d'exploitation. Les interfaces qui ne sont pas encore stabilisĂ©es, sont par dĂ©faut cachĂ©es et accessibles uniquement en exĂ©cutant en mode « —unstable ». Au fur et Ă  mesure de la sortie de nouvelles versions, ces API seront progressivement rendues stables. L'API dans l'espace de noms global, qui inclut des fonctions standard telles que setTimeout() et fetch(), est autant que possible proche de l'API des navigateurs web standards et Ă©volue en accord avec les normes web pour les navigateurs. Les API fournies par Rust, qui sont utilisĂ©es directement dans le code de la plateforme, ainsi que l'interface pour le dĂ©veloppement de plugins pour l'exĂ©cution Deno, ne sont pas encore stabilisĂ©es et continuent d'Ă©voluer.

Les motivations clĂ©s de la crĂ©ation de cette nouvelle plateforme JavaScript sont le dĂ©sir d'Ă©liminer les erreurs conceptuelles commises dans l'architecture de Node.js, et de fournir aux utilisateurs un environnement plus sĂ©curisĂ©. Pour amĂ©liorer la sĂ©curitĂ©, l'encapsulation autour du moteur V8 est Ă©crite en Rust, ce qui permet d'Ă©viter de nombreuses vulnĂ©rabilitĂ©s provenant d'un travail de bas niveau sur la mĂ©moire, telles que l'accĂšs Ă  la mĂ©moire aprĂšs sa libĂ©ration, la dĂ©rĂ©fĂ©rencement de pointeurs nuls, et le dĂ©passement de tampon. Pour le traitement des requĂȘtes en mode non-bloquant, la plateforme Tokio, Ă©galement Ă©crite en Rust. Tokio permet de crĂ©er des applications hautes performances basĂ©es sur une architecture orientĂ©e Ă©vĂ©nements, prenant en charge la multithreading et le traitement des requĂȘtes rĂ©seau de maniĂšre asynchrone.

Principales caractéristiques Deno :

  • Orientation vers la sĂ©curitĂ© dans la configuration par dĂ©faut. Les accĂšs aux fichiers, les fonctionnalitĂ©s rĂ©seau et l'accĂšs aux variables d'environnement par dĂ©faut sont bloquĂ©s et nĂ©cessitent une activation explicite. Les applications par dĂ©faut s'exĂ©cutent dans des environnements sandbox isolĂ©s et ne peuvent pas accĂ©der aux fonctionnalitĂ©s systĂšme sans autorisations explicites.
  • Prise en charge intĂ©grĂ©e de TypeScript en plus de JavaScript. Pour la vĂ©rification des types et la gĂ©nĂ©ration de JavaScript, le compilateur TypeScript standard est utilisĂ©, ce qui entraĂźne une baisse de performance par rapport Ă  l'analyse JavaScript dans V8. À l'avenir, il est prĂ©vu de prĂ©parer une mise en Ɠuvre propre du systĂšme de vĂ©rification des types TypeScript, qui permettra d'augmenter de maniĂšre significative les performances du traitement TypeScript.
  • Le runtime est fourni sous la forme d'un seul fichier exĂ©cutable autonome (« deno »). Pour exĂ©cuter des applications avec Deno, il suffit tĂ©lĂ©chargĂ©e d'avoir un fichier exĂ©cutable pour sa plateforme, mesurant environ 20 Mo, sans dĂ©pendances externes et sans nĂ©cessiter une installation spĂ©ciale sur le systĂšme. Deno n'est pas une application monolithique, mais une collection de paquets crate en Rust (deno_core, rusty_v8), qui peuvent ĂȘtre utilisĂ©s sĂ©parĂ©ment.
  • Lors de l'exĂ©cution d'un programme, ainsi que pour le chargement de modules, l'adressage via URL peut ĂȘtre utilisĂ©. Par exemple, pour exĂ©cuter le programme welcome.js, la commande « deno https://deno.land/std/examples/welcome.js » peut ĂȘtre utilisĂ©e. Le code provenant de ressources externes est tĂ©lĂ©chargĂ© et mis en cache sur le systĂšme local, mais n'est jamais mis Ă  jour automatiquement (pour une mise Ă  jour, il est nĂ©cessaire de lancer explicitement l'application avec le drapeau « --reload »).
  • Traitement efficace des requĂȘtes rĂ©seau HTTP dans les applications, la plateforme est conçue pour crĂ©er des applications rĂ©seau trĂšs performantes.
  • PossibilitĂ© de crĂ©er des applications web universelles pouvant s'exĂ©cuter Ă  la fois dans Deno et dans un navigateur web classique.
  • PrĂ©sence d'un ensemble standard de modules, dont l'utilisation ne nĂ©cessite pas d'attacher des dĂ©pendances externes. Les modules de la collection standard ont subi un audit supplĂ©mentaire et ont Ă©tĂ© vĂ©rifiĂ©s pour leur compatibilitĂ©.
  • En plus de son environnement d'exĂ©cution, la plateforme Deno joue Ă©galement le rĂŽle de gestionnaire de paquets et permet d'accĂ©der aux modules via URL dans le code. Par exemple, pour charger un module, on peut spĂ©cifier dans le code « import * as log from "https://deno.land/std/log/mod.ts". Les fichiers chargĂ©s depuis des serveurs externes via une URL sont mis en cache. Les versions des modules sont dĂ©terminĂ©es par des numĂ©ros de version intĂ©grĂ©s Ă  l'URL, par exemple « https://unpkg.com/liltest@0.0.5/dist/liltest.js » ;
  • Le systĂšme d'inspection des dĂ©pendances (commande « deno info ») et un utilitaire de formatage de code (deno fmt) sont intĂ©grĂ©s.
  • Tous les scripts d'application peuvent ĂȘtre combinĂ©s en un seul fichier JavaScript.

Différences avec Node.js :

  • Deno n'utilise pas le gestionnaire de paquets npm
    et ne s'attache pas aux dĂ©pĂŽts, l'adressage des modules se fait via URL ou chemin de fichier, et les modules eux-mĂȘmes peuvent ĂȘtre hĂ©bergĂ©s sur n'importe quel site ;
  • Dans Deno, « package.json » n'est pas utilisĂ© pour dĂ©finir les modules ;
  • DiffĂ©rence d'API, toutes les actions asynchrones dans Deno retournent une promesse ;
  • Deno exige une dĂ©claration explicite de tous les pouvoirs nĂ©cessaires pour les fichiers, le rĂ©seau et les variables d'environnement ;
  • Toutes les erreurs non gĂ©rĂ©es entraĂźnent l'arrĂȘt de l'application ;
  • Deno utilise le systĂšme de modules ECMAScript et ne supporte pas require();
  • Le serveur HTTP intĂ©grĂ© de Deno est Ă©crit en TypeScript et fonctionne sur des sockets TCP natifs, tandis que le serveur HTTP de Node.js est Ă©crit en C et fournit des liaisons pour JavaScript. Les dĂ©veloppeurs de Deno se sont concentrĂ©s sur l'optimisation de toute la couche des sockets TCP et sur la fourniture d'une interface plus gĂ©nĂ©rale. Le serveur HTTP de Deno assure une bande passante plus faible mais garantit des latences prĂ©visibles et faibles. Par exemple, dans un test, une simple application basĂ©e sur le serveur HTTP de Deno a pu traiter 25 000 requĂȘtes par seconde avec une latence maximale de 1,3 millisecondes. Dans Node.js, une application similaire a traitĂ© 34 000 requĂȘtes par seconde, mais les latences variaient de 2 Ă  300 millisecondes.
  • Deno n'est pas compatible avec les paquets pour Node.js (NPM), mais se dĂ©veloppe sĂ©parĂ©ment une couche pour la compatibilitĂ© avec la bibliothĂšque standard de Node.js, permettant Ă  mesure de son dĂ©veloppement de faire fonctionner de plus en plus d'applications Ă©crites pour Node.js dans Deno.
  • Source : opennet.ru

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster