De auteur van Node.js presenteerde het beveiligde JavaScript-platform Deno 1.0

Na twee jaar ontwikkeling ingediend eerste grote uitgave Geef mij 1.0, een platform voor het zelfstandig uitvoeren van applicaties in JavaScript en TypeScript, dat kan worden gebruikt om handlers te maken die op de server draaien. Het platform is ontwikkeld door Ryan Dahl (Ryan Dahl), maker van Node.js. Net als Node.js gebruikt Deno een JavaScript-engine V8, dat ook wordt gebruikt in Chromium-gebaseerde browsers. Tegelijkertijd is Deno geen afsplitsing van Node.js, maar een nieuw project dat helemaal opnieuw is gemaakt. Projectcode gedistribueerd door onder MIT-licentie. Assemblages bereid voor Linux, Windows en macOS.

Het aanzienlijke versienummer houdt verband met de stabilisatie van de API's in de Deno-naamruimte, die verantwoordelijk zijn voor de interactie van applicaties met het besturingssysteem. Software-interfaces die tot nu toe hebben plaatsgevonden niet gestabiliseerd, zijn standaard verborgen en alleen beschikbaar in de “--unstable” modus. Naarmate er nieuwe versies worden gevormd, zullen dergelijke API's geleidelijk stabiel worden. De API in de globale naamruimte, die gemeenschappelijke functies zoals setTimeout() en fetch() omvat, komt zo dicht mogelijk bij de API van conventionele webbrowsers en is ontwikkeld in overeenstemming met webstandaarden voor browsers. De API's van Rust, die rechtstreeks in de platformcode worden gebruikt, evenals de interface voor het ontwikkelen van plug-ins voor Deno-runtime, zijn nog niet gestabiliseerd en blijven zich ontwikkelen.

De belangrijkste motieven voor het creëren van een nieuw JavaScript-platform waren de wens om conceptuele fouten te elimineren, toegegeven in de Node.js-architectuur en bied gebruikers een veiligere omgeving. Om de veiligheid te verbeteren is de V8-engine geschreven in Rust, waardoor veel van de kwetsbaarheden worden vermeden die voortkomen uit geheugenmanipulatie op laag niveau, zoals after-free access, null pointer dereferences en buffer overruns. Het platform wordt gebruikt om verzoeken in niet-blokkerende modus te verwerken Tokio, ook geschreven in Rust. Met Tokio kunt u hoogwaardige applicaties maken op basis van gebeurtenisgestuurde architectuur, die multi-threading ondersteunen en netwerkverzoeken in asynchrone modus verwerken.

De belangrijkste kenmerken Deno:

  • Op beveiliging gerichte standaardconfiguratie. Bestandstoegang, netwerken en toegang tot omgevingsvariabelen zijn standaard uitgeschakeld en moeten expliciet worden ingeschakeld. Applicaties draaien standaard in geïsoleerde sandbox-omgevingen en hebben geen toegang tot systeemmogelijkheden zonder expliciete toestemming te verlenen;
  • Ingebouwde ondersteuning voor TypeScript naast JavaScript. De standaard TypeScript-compiler wordt gebruikt om typen te controleren en JavaScript te genereren, wat leidt tot prestatieproblemen vergeleken met JavaScript-parsering in V8. In de toekomst zijn we van plan onze eigen implementatie van het TypeScript-typecontrolesysteem voor te bereiden, waardoor de TypeScript-verwerkingsprestaties met een orde van grootte zullen verbeteren;
  • Runtime wordt geleverd in de vorm van een enkel op zichzelf staand uitvoerbaar bestand (“deno”). Het is voldoende om applicaties met Deno uit te voeren downloaden voor zijn platform is er één uitvoerbaar bestand van ongeveer 20 MB groot, dat geen externe afhankelijkheden heeft en geen speciale installatie op het systeem vereist. Bovendien is deno geen monolithische applicatie, maar een verzameling kratverpakkingen in Rust (deno_core, roestig_v8), die afzonderlijk kan worden gebruikt;
  • Bij het starten van het programma en bij het laden van modules kunt u URL-adressering gebruiken. Om bijvoorbeeld het welcome.js-programma uit te voeren, kunt u de opdracht “deno https://deno.land/std/examples/welcome.js” gebruiken. Code van externe bronnen wordt gedownload en in de cache opgeslagen op het lokale systeem, maar wordt nooit automatisch bijgewerkt (bijwerken vereist dat de applicatie expliciet wordt uitgevoerd met de vlag “--reload”);
  • Efficiënte verwerking van netwerkverzoeken via HTTP in applicaties; het platform is ontworpen voor het creëren van krachtige netwerkapplicaties;
  • De mogelijkheid om universele webapplicaties te maken die zowel in Deno als in een gewone webbrowser kunnen worden uitgevoerd;
  • beschikbaarheid standaardset modules, waarvan het gebruik geen binding aan externe afhankelijkheden vereist. Modules uit de standaardcollectie hebben aanvullende audit- en compatibiliteitstesten ondergaan;
  • Naast runtime fungeert het Deno-platform ook als pakketbeheerder en geeft u toegang tot modules via URL in de code. Om bijvoorbeeld een module te laden, kunt u in de code “import * as log from “https://deno.land/std/log/mod.ts” opgeven. Bestanden die via een URL van externe servers zijn gedownload, worden in de cache opgeslagen. De binding aan moduleversies wordt bepaald door versienummers in de URL op te geven, bijvoorbeeld “https://unpkg.com/[e-mail beveiligd]/dist/liltest.js";
  • De structuur omvat een geïntegreerd inspectiesysteem voor afhankelijkheid (de opdracht “deno info”) en een hulpprogramma voor het formatteren van code (deno fmt);
  • Alle applicatiescripts kunnen worden gecombineerd in één JavaScript-bestand.

Verschillen met Node.js:

  • Deno gebruikt geen npm-pakketbeheerder
    en is niet gebonden aan repositories, modules worden geadresseerd via een URL of via een bestandspad, en de modules zelf kunnen op elke website worden geplaatst;
  • Deno gebruikt "package.json" niet om modules te definiëren;
  • API-verschil, alle asynchrone acties in Deno beloven een belofte;
  • Deno vereist een expliciete definitie van alle noodzakelijke machtigingen voor bestanden, netwerk- en omgevingsvariabelen;
  • Alle fouten die niet zijn voorzien van handlers leiden tot het beëindigen van de applicatie;
  • Deno gebruikt het ECMAScript-modulesysteem en ondersteunt require();
  • De ingebouwde HTTP-server van Deno is geschreven in TypeScript en draait bovenop native TCP-sockets, terwijl de Node.js HTTP-server in C is geschreven en bindingen voor JavaScript biedt. De ontwikkelaars van Deno hebben zich geconcentreerd op het optimaliseren van de gehele TCP-socketlaag en het bieden van een meer algemene interface. Deno HTTP Server biedt een lagere doorvoer maar garandeert een voorspelbare lage latentie. In de test kon een eenvoudige applicatie op basis van de Deno HTTP-server bijvoorbeeld 25 verzoeken per seconde verwerken met een maximale latentie van 1.3 milliseconden. In Node.js verwerkte een vergelijkbare applicatie 34 verzoeken per seconde, maar latenties varieerden van 2 tot 300 milliseconden.
  • Deno is niet compatibel met pakketten voor Node.js (NPM), maar wordt afzonderlijk ontwikkeld tussenlaag Vanwege compatibiliteit met de standaard Node.js-bibliotheek, zullen naarmate deze zich ontwikkelt steeds meer applicaties die voor Node.js zijn geschreven, in Deno kunnen worden uitgevoerd.
  • Bron: opennet.ru

Voeg een reactie