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

Na twee jaar ontwikkeling is gepresenteerd de eerste significante release Deno 1.0, een platform voor het isoleren van de uitvoering van applicaties in de talen JavaScript en TypeScript, dat kan worden gebruikt om serverside handlers te maken. Het platform wordt ontwikkeld door Ryan Dahl (Ryan Dahl), de maker van Node.js. Net als bij Node.js maakt Deno gebruik van de JavaScript-engine V8, die ook wordt toegepast in Chromium-gebaseerde browsers. Deno is echter geen afsplitsing van Node.js, maar een volledig nieuw project dat vanaf nul is opgebouwd. De code van het project wordt verspreid is gelicenseerd onder de MIT-licentie. De builds poorten voorbereid zijn beschikbaar voor Linux, Windows en macOS.

Een significante versienummer is verbonden aan de stabilisatie van de API in de namespace Deno, die verantwoordelijk is voor de interactie van applicaties met het besturingssysteem. De software-interfaces die momenteel niet zijn gestabiliseerd, zijn standaard verborgen en alleen toegankelijk bij het uitvoeren in de ā€˜ā€”unstable’ modus. Naarmate nieuwe versies worden gevormd, zullen dergelijke API's geleidelijk worden verplaatst naar de stabiele categorie. De API in de globale namespace, die algemene functies zoals setTimeout() en fetch() omvat, is zo veel mogelijk afgestemd op de API van reguliere web-browsers en ontwikkelt zich in overeenstemming met de webstandaarden voor browsers. De aangeboden Rust API's, die direct in de code van het platform worden gebruikt, evenals de interface voor het ontwikkelen van plugins 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 de conceptuele fouten te verhelpen, gemaakt in de architectuur van Node.js, en gebruikers een veiliger milieu te bieden. Om de veiligheid te verbeteren, is de wrapper rond de V8-engine geschreven in Rust, waardoor veel kwetsbaarheden vermeden worden die ontstaan door laag-niveau geheugenbeheer, zoals het aanspreken van vrijgegeven geheugengebieden, het dereferencen van null pointers en buffer overflows. Voor het verwerken van aanvragen in een niet-blokkerende modus wordt het platform Tokio, ook geschreven in Rust, gebruikt. Tokio maakt het mogelijk om hoogpresterende applicaties op basis van een evenementen-georiƫnteerde architectuur (Event-driven) te creƫren, die multithreading en asynchrone netwerkaanvragen ondersteunt.

Belangrijkste kenmerken Deno:

  • Focus op veiligheid in de standaardconfiguratie. Toegang tot bestanden, netwerkmogelijkheden en omgevingsvariabelen is standaard geblokkeerd en vereist expliciete inschakeling. Applicaties worden standaard uitgevoerd in geĆÆsoleerde sandbox-omgevingen en kunnen geen systeemfunctionaliteiten benaderen zonder expliciete toestemming.
  • Ingebouwde ondersteuning voor TypeScript naast JavaScript. Voor type-controlet en het genereren van JavaScript wordt de interne TypeScript-compiler gebruikt, wat leidt tot een prestatieverlies in vergelijking met de parsing van JavaScript in V8. In de toekomst is het de bedoeling om een eigen implementatie van het TypeScript type-checking systeem voor te bereiden, die de verwerkingsprestaties van TypeScript aanzienlijk zal verhogen;
  • De runtime wordt geleverd in de vorm van ƩƩn zelfvoorzienend uitvoerbaar bestand (ā€˜deno’). Om applicaties met Deno uit te voeren, is het voldoende gratis worden gedownload voor zijn platform is er ƩƩn uitvoerbaar bestand van ongeveer 20 MB, zonder externe afhankelijkheden en zonder dat een speciale installatie in het systeem vereist is. Deno is geen monolithische applicatie, maar een verzameling crate-pakketten in Rust (deno_core, rusty_v8), die afzonderlijk kunnen worden gebruikt;
  • Bij het uitvoeren van een programma en het laden van modules kan adressering via URL's worden gebruikt. Bijvoorbeeld, om het programma welcome.js uit te voeren, kan de opdracht Ā«deno https://deno.land/std/examples/welcome.jsĀ» worden gebruikt. Code van externe bronnen wordt gedownload en in de lokale systeemcache opgeslagen, maar wordt nooit automatisch bijgewerkt (voor updates moet de applicatie expliciet worden gestart met de vlag «—reloadĀ»).
  • EfficiĆ«nte verwerking van HTTP-netwerkverzoeken in applicaties, het platform is ontworpen voor het maken van hoogpresterende netwerkaanstellingen.
  • De mogelijkheid om universele webapplicaties te maken die zowel in Deno als in standaard web-browsers kunnen worden uitgevoerd.
  • Aanwezigheid een standaardset van modules, waarvan het gebruik geen binding aan externe afhankelijkheden vereist. Modules uit de standaardcollectie hebben een aanvullende audit en compatibiliteitscontrole ondergaan;
  • Naast de runtime fungeert het Deno-platform ook als een pakketbeheerder en stelt het in staat om binnen de code modules via URL aan te spreken. Bijvoorbeeld, om een module te laden, kan in de code worden aangegeven ā€œimport * as log from ā€˜https://deno.land/std/log/mod.ts’. Bestanden die van externe servers via URL worden geladen, worden gecached. De versiebindingen van modules worden bepaald door versienummers binnen de URL aan te geven, bijvoorbeeld ā€œhttps://unpkg.com/liltest@0.0.5/dist/liltest.jsā€;
  • Het pakket bevat een systeem voor het inspecteren van afhankelijkheden (commando Ā«deno infoĀ») en een tool voor het opmaken van code (deno fmt);
  • Alle applicatiescripts kunnen worden samengevoegd tot ƩƩn JavaScript-bestand.

Verschillen met Node.js:

  • Deno maakt geen gebruik van het npm-pakketbeheer
    en is niet gebonden aan repository's; modules worden geadresseerd via URL of bestandslocatie, en de modules kunnen op elke site worden gehost;
  • In Deno wordt geen 'package.json' gebruikt om modules te definiĆ«ren;
  • Verschil in API; alle asynchrone acties in Deno retourneren een promise;
  • Deno vereist expliciete definitie van alle benodigde machtigingen voor bestanden, netwerken en omgevingsvariabelen;
  • Alle fouten zonder handlers leiden tot een beĆ«indiging van de applicatie-uitvoering;
  • In Deno wordt het ECMAScript-modulesysteem toegepast en wordt require() niet ondersteunt;
  • De ingebouwde HTTP-server van Deno is geschreven in TypeScript en werkt bovenop native TCP-sockets, terwijl de HTTP-server van Node.js in C is geschreven en bindings voor JavaScript biedt. De ontwikkelaars van Deno hebben hun inspanningen gericht op het optimaliseren van de gehele laag van TCP-sockets en het bieden van een algemeenere interface. De HTTP-server van Deno biedt een lagere doorvoer, maar garandeert voorspelbare lage latencies. Bijvoorbeeld, in een test kon een eenvoudige applicatie op basis van de Deno HTTP-server 25.000 verzoeken per seconde verwerken met een maximale latency van 1,3 milliseconden. In Node.js kon een vergelijkbare applicatie 34.000 verzoeken per seconde verwerken, maar de latencies varieerden van 2 tot 300 milliseconden.
  • Deno is niet compatibel met pakketten voor Node.js (NPM), maar ontwikkelt zich afzonderlijk laag voor compatibiliteit met de standaardbibliotheek van Node.js, waardoor steeds meer applicaties die zijn geschreven voor Node.js in Deno kunnen worden uitgevoerd naarmate deze zich verder ontwikkelt.
  • Bron: opennet.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers šŸ”„ Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster