Forfatteren af ​​Node.js præsenterede den sikre JavaScript-platform Deno 1.0

Efter to års udvikling præsenteret første store udgivelse Giv mig 1.0, en platform til stand-alone eksekvering af applikationer i JavaScript og TypeScript, som kan bruges til at oprette handlere, der kører på serveren. Platformen er udviklet af Ryan Dahl (Ryan Dahl), skaberen af ​​Node.js. Ligesom Node.js bruger Deno en JavaScript-motor V8, som også bruges i Chromium-baserede browsere. Samtidig er Deno ikke en forgrening af Node.js, men er et nyt projekt skabt fra bunden. Projektkode distribueret af under MIT-licens. Forsamlinger forberedt til Linux, Windows og macOS.

Det betydelige versionsnummer er forbundet med stabiliseringen af ​​API'erne i Deno-navneområdet, som er ansvarlige for interaktionen mellem applikationer og OS. Softwaregrænseflader, der har hidtil ikke stabiliseret, er skjult som standard og kun tilgængelige, når de kører i "--ustabil" tilstand. Efterhånden som nye versioner dannes, vil sådanne API'er gradvist blive stabile. API'et i det globale navneområde, som omfatter almindelige funktioner såsom setTimeout() og fetch(), er så tæt som muligt på API'et for konventionelle webbrowsere og er udviklet i overensstemmelse med webstandarder for browsere. API'erne leveret af Rust, som bruges direkte i platformskoden, samt grænsefladen til udvikling af plugins til Deno runtime, er endnu ikke stabiliseret og fortsætter med at udvikle sig.

Nøglemotiverne for at skabe en ny JavaScript-platform var ønsket om at eliminere konceptuelle fejl, indrømmet i Node.js-arkitekturen og give brugerne et mere sikkert miljø. For at forbedre sikkerheden er V8-motoren skrevet i Rust, som undgår mange af de sårbarheder, der opstår ved manipulation af hukommelsen på lavt niveau, såsom efterfri adgang, nul pointer-dereferencer og bufferoverskridelser. Platformen bruges til at behandle anmodninger i ikke-blokerende tilstand Tokyo, også skrevet i Rust. Tokio giver dig mulighed for at skabe højtydende applikationer baseret på begivenhedsdrevet arkitektur, der understøtter multi-threading og behandling af netværksanmodninger i asynkron tilstand.

The main Egenskaber Deno:

  • Sikkerhedsorienteret standardkonfiguration. Filadgang, netværk og adgang til miljøvariabler er deaktiveret som standard og skal udtrykkeligt aktiveres. Programmer kører som standard i isolerede sandkassemiljøer og kan ikke få adgang til systemfunktioner uden at give eksplicitte tilladelser;
  • Indbygget understøttelse af TypeScript ud over JavaScript. Standard TypeScript-kompileren bruges til at tjekke typer og generere JavaScript, hvilket fører til et præstationshit sammenlignet med JavaScript-parsing i V8. I fremtiden planlægger vi at forberede vores egen implementering af TypeScript-typekontrolsystemet, som vil forbedre TypeScript-behandlingsydelsen med en størrelsesorden;
  • Runtime kommer i form af en enkelt selvstændig eksekverbar fil ("deno"). For at køre applikationer ved hjælp af Deno er det nok downloade til dens platform er der en eksekverbar fil, omkring 20 MB i størrelse, som ikke har nogen eksterne afhængigheder og ikke kræver nogen speciel installation på systemet. Desuden er deno ikke en monolitisk applikation, men er en samling af kassepakker i Rust (deno_core, rusten_v8), som kan bruges separat;
  • Når du starter programmet, samt til indlæsning af moduler, kan du bruge URL-adressering. For at køre programmet welcome.js kan du for eksempel bruge kommandoen "deno https://deno.land/std/examples/welcome.js". Kode fra eksterne ressourcer downloades og cachelagres på det lokale system, men opdateres aldrig automatisk (opdatering kræver eksplicit at køre programmet med flaget "--reload").
  • Effektiv behandling af netværksanmodninger via HTTP i applikationer, platformen er designet til at skabe højtydende netværksapplikationer;
  • Evnen til at skabe universelle webapplikationer, der kan udføres både i Deno og i en almindelig webbrowser;
  • tilgængelighed standard sæt af moduler, hvis brug ikke kræver binding til eksterne afhængigheder. Moduler fra standardsamlingen har gennemgået yderligere revision og kompatibilitetstest;
  • Udover runtime fungerer Deno-platformen også som en pakkehåndtering og giver dig adgang til moduler efter URL i koden. For at indlæse et modul kan du for eksempel angive i koden "import * som log fra "https://deno.land/std/log/mod.ts". Filer downloadet fra eksterne servere via URL cachelagres. Binding til modulversioner bestemmes ved at angive versionsnumre inde i URL'en, for eksempel "https://unpkg.com/[e-mail beskyttet]/dist/liltest.js";
  • Strukturen inkluderer et integreret afhængighedsinspektionssystem (“deno info”-kommandoen) og et værktøj til kodeformatering (deno fmt);
  • Alle applikationsscripts kan kombineres til én JavaScript-fil.

Forskelle fra Node.js:

  • Deno bruger ikke npm-pakkehåndtering
    og er ikke bundet til repositories, adresseres moduler via en URL eller af en filsti, og modulerne selv kan placeres på ethvert websted;
  • Deno bruger ikke "package.json" til at definere moduler;
  • API forskel, alle asynkrone handlinger i Deno returnerer et løfte;
  • Deno kræver eksplicit definition af alle nødvendige tilladelser til filer, netværk og miljøvariabler;
  • Alle fejl, der ikke leveres med behandlere, fører til opsigelse af ansøgningen;
  • Deno bruger ECMAScript-modulsystemet og understøtter ikke require();
  • Denos indbyggede HTTP-server er skrevet i TypeScript og kører oven på native TCP-sockets, mens Node.js HTTP-serveren er skrevet i C og giver bindinger til JavaScript. Denos udviklere har fokuseret på at optimere hele TCP-socket-laget og give en mere generel grænseflade. Deno HTTP Server giver lavere gennemløb, men garanterer forudsigelig lav latenstid. For eksempel i testen var en simpel applikation baseret på Deno HTTP-server i stand til at behandle 25 tusinde anmodninger i sekundet med en maksimal latenstid på 1.3 millisekunder. I Node.js behandlede en lignende applikation 34 tusinde anmodninger i sekundet, men latenserne varierede fra 2 til 300 millisekunder.
  • Deno er ikke kompatibel med pakker til Node.js (NPM), men udvikles separat mellemlag for kompatibilitet med standard Node.js-biblioteket, efterhånden som det udvikler sig, vil flere og flere applikationer skrevet til Node.js kunne køre i Deno.
  • Kilde: opennet.ru

Tilføj en kommentar