Forfatteren av Node.js presenterte den sikre JavaScript-plattformen Deno 1.0

Etter to år med utvikling presentert første store utgivelse Gi meg 1.0, en plattform for frittstående kjøring av applikasjoner i JavaScript og TypeScript, som kan brukes til å lage behandlere som kjører på serveren. Plattformen er utviklet av Ryan Dahl (Ryan Dahl), skaper av Node.js. I likhet med Node.js bruker Deno en JavaScript-motor V8, som også brukes i Chromium-baserte nettlesere. Samtidig er Deno ikke en fork av Node.js, men er et nytt prosjekt laget fra bunnen av. Prosjektkode distribuert av under MIT-lisens. Forsamlinger forberedt for Linux, Windows og macOS.

Det betydelige versjonsnummeret er knyttet til stabiliseringen av API-ene i Deno-navneområdet, som er ansvarlige for samspillet mellom applikasjoner og operativsystemet. Programvaregrensesnitt som har så langt ikke stabilisert, er skjult som standard og bare tilgjengelig når du kjører i "--ustabil" modus. Etter hvert som nye versjoner dannes, vil slike APIer gradvis bli stabile. API-en i det globale navnerommet, som inkluderer vanlige funksjoner som setTimeout() og fetch(), er så nært som mulig API-en til konvensjonelle nettlesere og er utviklet i samsvar med nettstandarder for nettlesere. APIene levert av Rust, som brukes direkte i plattformkoden, samt grensesnittet for å utvikle plugins for Deno runtime, er ennå ikke stabilisert og fortsetter å utvikle seg.

De viktigste motivene for å lage en ny JavaScript-plattform var ønsket om å eliminere konseptuelle feil, innrømmet i Node.js-arkitekturen, og gi brukerne et sikrere miljø. For å forbedre sikkerheten er V8-motoren skrevet i Rust, som unngår mange av sårbarhetene som oppstår ved minnemanipulering på lavt nivå, som etterfri tilgang, null-peker-dereferanser og bufferoverskridelser. Plattformen brukes til å behandle forespørsler i ikke-blokkerende modus Tokyo, også skrevet i Rust. Tokio lar deg lage applikasjoner med høy ytelse basert på hendelsesdrevet arkitektur, som støtter multi-threading og behandler nettverksforespørsler i asynkron modus.

Den viktigste Spesifikasjoner Deno:

  • Sikkerhetsorientert standardkonfigurasjon. Filtilgang, nettverk og tilgang til miljøvariabler er deaktivert som standard og må være eksplisitt aktivert. Programmer kjører som standard i isolerte sandkassemiljøer og kan ikke få tilgang til systemfunksjoner uten å gi eksplisitte tillatelser;
  • Innebygd støtte for TypeScript utover JavaScript. Standard TypeScript-kompilatoren brukes til å sjekke typer og generere JavaScript, noe som fører til et ytelsestreff sammenlignet med JavaScript-parsing i V8. I fremtiden planlegger vi å forberede vår egen implementering av TypeScript-typekontrollsystemet, som vil forbedre TypeScript-behandlingsytelsen med en størrelsesorden;
  • Runtime kommer i form av en enkelt selvstendig kjørbar fil ("deno"). For å kjøre applikasjoner med Deno er det nok nedlasting for plattformen er det én kjørbar fil, omtrent 20 MB i størrelse, som ikke har noen eksterne avhengigheter og ikke krever noen spesiell installasjon på systemet. Dessuten er deno ikke en monolitisk applikasjon, men er en samling av kassepakker i Rust (deno_core, rusty_v8), som kan brukes separat;
  • Når du starter programmet, samt for å laste inn moduler, kan du bruke URL-adressering. For å kjøre programmet welcome.js kan du for eksempel bruke kommandoen "deno https://deno.land/std/examples/welcome.js". Kode fra eksterne ressurser lastes ned og bufres på det lokale systemet, men oppdateres aldri automatisk (oppdatering krever eksplisitt kjøring av applikasjonen med "--reload"-flagget);
  • Effektiv behandling av nettverksforespørsler via HTTP i applikasjoner; plattformen er designet for å lage nettverksapplikasjoner med høy ytelse;
  • Muligheten til å lage universelle nettapplikasjoner som kan kjøres både i Deno og i en vanlig nettleser;
  • tilgjengelighet standard sett med moduler, hvis bruk ikke krever binding til eksterne avhengigheter. Moduler fra standardsamlingen har gjennomgått ytterligere revisjon og kompatibilitetstesting;
  • I tillegg til kjøretid, fungerer Deno-plattformen også som en pakkebehandler og lar deg få tilgang til moduler etter URL inne i koden. For eksempel, for å laste en modul, kan du spesifisere i koden "import * som logg fra "https://deno.land/std/log/mod.ts". Filer som lastes ned fra eksterne servere via URL, bufres. Binding til modulversjoner bestemmes ved å spesifisere versjonsnumre i URL-en, for eksempel "https://unpkg.com/[e-postbeskyttet]/dist/liltest.js";
  • Strukturen inkluderer et integrert avhengighetsinspeksjonssystem («deno info»-kommandoen) og et verktøy for kodeformatering (deno fmt);
  • Alle applikasjonsskript kan kombineres til én JavaScript-fil.

Forskjeller fra Node.js:

  • Deno bruker ikke npm-pakkebehandling
    og er ikke knyttet til depoter, moduler adresseres via en URL eller av en filbane, og selve modulene kan plasseres på et hvilket som helst nettsted;
  • Deno bruker ikke "package.json" for å definere moduler;
  • API-forskjell, alle asynkrone handlinger i Deno gir et løfte;
  • Deno krever eksplisitt definisjon av alle nødvendige tillatelser for filer, nettverk og miljøvariabler;
  • Alle feil som ikke er gitt med behandlere fører til avslutning av søknaden;
  • Deno bruker ECMAScript-modulsystemet og støtter ikke require();
  • Denos innebygde HTTP-server er skrevet i TypeScript og kjører på toppen av native TCP-sockets, mens Node.js HTTP-serveren er skrevet i C og gir bindinger for JavaScript. Denos utviklere har fokusert på å optimalisere hele TCP-socketlaget og gi et mer generelt grensesnitt. Deno HTTP Server gir lavere gjennomstrømning, men garanterer forutsigbar lav ventetid. For eksempel, i testen, var en enkel applikasjon basert på Deno HTTP-server i stand til å behandle 25 tusen forespørsler per sekund med en maksimal ventetid på 1.3 millisekunder. I Node.js behandlet en lignende applikasjon 34 tusen forespørsler per sekund, men forsinkelser varierte fra 2 og 300 millisekunder.
  • Deno er ikke kompatibel med pakker for Node.js (NPM), men utvikles separat mellomlag for kompatibilitet med standard Node.js-biblioteket, ettersom det utvikler seg, vil flere og flere applikasjoner skrevet for Node.js kunne kjøres i Deno.
  • Kilde: opennet.ru

Legg til en kommentar