Node.js Author introducerar Secure JavaScript Platform Deno 1.0

Efter två års utveckling presenteras första stora releasen Ge mig 1.0, en plattform för fristående exekvering av applikationer i JavaScript och TypeScript, som kan användas för att skapa hanterare som körs på servern. Plattformen är utvecklad av Ryan Dahl (Ryan Dahl), skapare av Node.js. Precis som Node.js använder Deno en JavaScript-motor V8, som också används i Chromium-baserade webbläsare. Samtidigt är Deno inte en gaffel av Node.js, utan är ett nytt projekt skapat från grunden. Projektkod levererad av under MIT-licens. Församlingar beredd för Linux, Windows och macOS.

Det betydande versionsnumret är associerat med stabiliseringen av API:erna i Deno-namnområdet, som är ansvariga för interaktionen mellan applikationer och operativsystemet. Programvarugränssnitt som har hittills inte stabiliserats, är dolda som standard och endast tillgängliga när de körs i "--instabilt" läge. När nya versioner bildas kommer sådana API:er gradvis att bli stabila. API:et i det globala namnområdet, som inkluderar vanliga funktioner som setTimeout() och fetch(), ligger så nära API:et för konventionella webbläsare som möjligt och är utvecklat i enlighet med webbstandarder för webbläsare. API:erna som tillhandahålls av Rust, som används direkt i plattformskoden, samt gränssnittet för att utveckla plugins för Deno runtime, har ännu inte stabiliserats och fortsätter att utvecklas.

De viktigaste motiven för att skapa en ny JavaScript-plattform var önskan att eliminera konceptuella fel, erkände i Node.js-arkitekturen och ge användarna en säkrare miljö. För att förbättra säkerheten är V8-motorn skriven i Rust, vilket undviker många av de sårbarheter som uppstår från minnesmanipulation på låg nivå, såsom efterfri åtkomst, nollpekaredereferenser och buffertöverskridanden. Plattformen används för att behandla förfrågningar i icke-blockerande läge tokio, även skriven i Rust. Tokio låter dig skapa högpresterande applikationer baserade på händelsedriven arkitektur, som stöder multi-threading och bearbetning av nätverksförfrågningar i asynkront läge.

Den huvudsakliga särdrag Deno:

  • Säkerhetsorienterad standardkonfiguration. Filåtkomst, nätverk och åtkomst till miljövariabler är inaktiverade som standard och måste vara uttryckligen aktiverade. Program körs som standard i isolerade sandlådemiljöer och kan inte komma åt systemfunktioner utan att ge uttryckliga behörigheter;
  • Inbyggt stöd för TypeScript utöver JavaScript. Standard TypeScript-kompilatorn används för att kontrollera typer och generera JavaScript, vilket leder till en prestandaträff jämfört med JavaScript-parsning i V8. I framtiden planerar vi att förbereda vår egen implementering av TypeScript-typkontrollsystemet, vilket kommer att förbättra TypeScript-bearbetningsprestandan i en storleksordning;
  • Runtime kommer i form av en enda fristående körbar fil ("deno"). För att köra applikationer med Deno räcker det nedladdning för dess plattform finns det en körbar fil, cirka 20 MB stor, som inte har några externa beroenden och inte kräver någon speciell installation på systemet. Dessutom är deno inte en monolitisk applikation, utan är en samling backpaket i Rust (deno_core, rostig_v8), som kan användas separat;
  • När du startar programmet, samt för att ladda moduler, kan du använda URL-adressering. Till exempel, för att köra programmet welcome.js kan du använda kommandot "deno https://deno.land/std/examples/welcome.js". Kod från externa resurser laddas ner och cachelagras på det lokala systemet, men uppdateras aldrig automatiskt (uppdatering kräver att programmet explicit körs med flaggan "--reload");
  • Effektiv bearbetning av nätverksförfrågningar via HTTP i applikationer, plattformen är designad för att skapa högpresterande nätverksapplikationer;
  • Möjligheten att skapa universella webbapplikationer som kan köras både i Deno och i en vanlig webbläsare;
  • tillgänglighet standarduppsättning av moduler, vars användning inte kräver bindning till externa beroenden. Moduler från standardsamlingen har genomgått ytterligare revision och kompatibilitetstestning;
  • Förutom runtime fungerar Deno-plattformen även som en pakethanterare och låter dig komma åt moduler via URL inuti koden. Till exempel, för att ladda en modul, kan du ange i koden "import * som logg från "https://deno.land/std/log/mod.ts". Filer som laddas ner från externa servrar via URL cachelagras. Bindning till modulversioner bestäms genom att ange versionsnummer i URL:en, till exempel "https://unpkg.com/[e-postskyddad]/dist/liltest.js";
  • Strukturen inkluderar ett integrerat beroendekontrollsystem (kommandot “deno info”) och ett verktyg för kodformatering (deno fmt);
  • Alla applikationsskript kan kombineras till en JavaScript-fil.

Skillnader från Node.js:

  • Deno använder inte npm-pakethanteraren
    och är inte knuten till arkiv, moduler adresseras via en URL eller en filsökväg, och själva modulerna kan placeras på vilken webbplats som helst;
  • Deno använder inte "package.json" för att definiera moduler;
  • API-skillnad, alla asynkrona åtgärder i Deno ger ett löfte;
  • Deno kräver explicit definition av alla nödvändiga behörigheter för filer, nätverk och miljövariabler;
  • Alla fel som inte tillhandahålls av hanterare leder till att applikationen avslutas;
  • Deno använder ECMAScript-modulsystemet och stöder inte require();
  • Denos inbyggda HTTP-server är skriven i TypeScript och körs ovanpå inbyggda TCP-sockets, medan Node.js HTTP-servern är skriven i C och tillhandahåller bindningar för JavaScript. Denos utvecklare har fokuserat på att optimera hela TCP-socketlagret och tillhandahålla ett mer allmänt gränssnitt. Deno HTTP Server ger lägre genomströmning men garanterar förutsägbar låg latens. Till exempel, i testet, kunde en enkel applikation baserad på Deno HTTP-server behandla 25 tusen förfrågningar per sekund med en maximal latens på 1.3 millisekunder. I Node.js behandlade en liknande applikation 34 tusen förfrågningar per sekund, men latenserna varierade mellan 2 och 300 millisekunder.
  • Deno är inte kompatibel med paket för Node.js (NPM), men utvecklas separat mellanskikt för kompatibilitet med standardbiblioteket Node.js, allt eftersom det utvecklas, kommer fler och fler applikationer skrivna för Node.js att kunna köras i Deno.
  • Källa: opennet.ru

Lägg en kommentar