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

Après deux ans de développement soumis première version majeure Déno 1.0, une plate-forme d'exécution autonome d'applications en JavaScript et TypeScript, qui peut être utilisée pour créer des gestionnaires qui s'exécutent sur le serveur. La plateforme est développée par Ryan Dahl (Ryan Dahl), créateur de Node.js. Comme Node.js, Deno utilise un moteur JavaScript V8, qui est également utilisé dans les navigateurs basés sur Chromium. En même temps, Deno n'est pas un fork de Node.js, mais un nouveau projet créé à partir de zéro. Code de projet distribué par sous licence MIT. Assemblées préparé pour Linux, Windows et macOS.

Le numéro de version important est associé à la stabilisation des API dans l'espace de noms Deno, qui sont responsables de l'interaction des applications avec le système d'exploitation. Interfaces logicielles disponibles jusqu'à présent non stabilisé, sont masqués par défaut et disponibles uniquement lors de l'exécution en mode « --unstable ». Au fur et à mesure que de nouvelles versions seront créées, ces API deviendront progressivement stables. L'API dans l'espace de noms global, qui comprend des fonctions communes telles que setTimeout() et fetch(), est aussi proche que possible de l'API des navigateurs Web conventionnels et est développée conformément aux 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 de développement de plugins pour le runtime Deno, ne sont pas encore stabilisées et continuent de se développer.

Les principales motivations pour créer une nouvelle plateforme JavaScript étaient le désir d'éliminer les erreurs conceptuelles, admis dans l'architecture Node.js et offre aux utilisateurs un environnement plus sécurisé. Pour améliorer la sécurité, le moteur V8 est écrit en Rust, ce qui évite de nombreuses vulnérabilités résultant de manipulations de mémoire de bas niveau, telles que l'accès après libération, les déréférences de pointeurs nuls et les dépassements de mémoire tampon. La plateforme permet de traiter les demandes en mode non bloquant Tokio, également écrit en Rust. Tokio vous permet de créer des applications hautes performances basées sur une architecture basée sur les événements, prenant en charge le multithread et traitant les requêtes réseau en mode asynchrone.

principal caractéristiques Déno :

  • Configuration par défaut orientée sécurité. L'accès aux fichiers, la mise en réseau et l'accès aux variables d'environnement sont désactivés par défaut et doivent être explicitement activés. Les applications s'exécutent par défaut dans des environnements sandbox isolés et ne peuvent pas accéder aux fonctionnalités du système sans accorder d'autorisations explicites ;
  • Prise en charge intégrée de TypeScript au-delà de JavaScript. Le compilateur TypeScript standard est utilisé pour vérifier les types et générer du JavaScript, ce qui entraîne une baisse des performances par rapport à l'analyse JavaScript dans la V8. À l'avenir, nous prévoyons de préparer notre propre implémentation du système de vérification de type TypeScript, qui améliorera les performances de traitement TypeScript d'un ordre de grandeur ;
  • Le runtime se présente sous la forme d’un seul fichier exécutable autonome (« deno »). Pour exécuter des applications utilisant Deno, il suffit télécharger pour sa plate-forme, il existe un fichier exécutable d'environ 20 Mo, qui n'a aucune dépendance externe et ne nécessite aucune installation spéciale sur le système. De plus, deno n'est pas une application monolithique, mais est une collection de packages de caisse dans Rust (deno_core, rouillé_v8), qui peuvent être utilisés séparément ;
  • Lors du démarrage du programme, ainsi que pour charger des modules, vous pouvez utiliser l'adressage URL. Par exemple, pour exécuter le programme Welcome.js, vous pouvez utiliser la commande « deno https://deno.land/std/examples/welcome.js ». Le code des ressources externes est téléchargé et mis en cache sur le système local, mais n'est jamais automatiquement mis à jour (la mise à jour nécessite d'exécuter explicitement l'application avec l'indicateur « --reload ») ;
  • Traitement efficace des requêtes réseau via HTTP dans les applications ; la plateforme est conçue pour créer des applications réseau hautes performances ;
  • La possibilité de créer des applications Web universelles qui peuvent être exécutées à la fois dans Deno et dans un navigateur Web classique ;
  • disponibilité ensemble standard de modules, dont l'utilisation ne nécessite pas de liaison à des dépendances externes. Les modules de la collection de normes ont subi un audit supplémentaire et des tests de compatibilité ;
  • En plus du runtime, la plateforme Deno fait également office de gestionnaire de packages et vous permet d'accéder aux modules par URL dans le code. Par exemple, pour charger un module, vous pouvez spécifier dans le code « import * as log from « https://deno.land/std/log/mod.ts ». Les fichiers téléchargés depuis des serveurs externes via une URL sont mis en cache. La liaison aux versions du module est déterminée en spécifiant les numéros de version dans l'URL, par exemple « https://unpkg.com/[email protected]/dist/liltest.js";
  • La structure comprend un système intégré d'inspection des dépendances (la commande « deno info ») et un utilitaire de formatage du code (deno fmt) ;
  • 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 packages npm
    et n'est pas lié aux référentiels, les modules sont adressés via une URL ou par un chemin de fichier, et les modules eux-mêmes peuvent être placés sur n'importe quel site Web ;
  • Deno n'utilise pas « package.json » pour définir des modules ;
  • Différence API, toutes les actions asynchrones dans Deno renvoient une promesse ;
  • Deno nécessite une définition explicite de toutes les autorisations nécessaires pour les fichiers, le réseau et les variables d'environnement ;
  • Toutes les erreurs qui ne sont pas fournies avec les gestionnaires entraînent la résiliation de l'application ;
  • Deno utilise le système de modules ECMAScript et ne prend pas en charge require();
  • Le serveur HTTP intégré de Deno est écrit en TypeScript et s'exécute sur des sockets TCP natifs, tandis que le serveur HTTP 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 l'ensemble de la couche de socket TCP et sur la fourniture d'une interface plus générale. Deno HTTP Server offre un débit inférieur mais garantit une faible latence prévisible. Par exemple, lors du test, une application simple basée sur le serveur HTTP Deno a pu traiter 25 1.3 requêtes par seconde avec une latence maximale de 34 millisecondes. Dans Node.js, une application similaire traitait 2 300 requêtes par seconde, mais les latences variaient entre XNUMX et XNUMX millisecondes.
  • Deno n'est pas compatible avec les packages pour Node.js (NPM), mais est développé séparément intercalaire pour des raisons de compatibilité avec la bibliothèque standard Node.js, au fur et à mesure de son développement, de plus en plus d'applications écrites pour Node.js pourront s'exécuter dans Deno.
  • Source: opennet.ru

Ajouter un commentaire