A Node.js szerzője bemutatta a biztonságos Deno 1.0 JavaScript platformot

Két év fejlesztés után bemutatott első jelentős kiadás Adj 1.0-t, az alkalmazások önálló futtatására szolgáló platform JavaScript és TypeScript formátumban, amellyel a szerveren futó kezelők hozhatók létre. A platformot Ryan Dahl (Ryan Dahl), a Node.js létrehozója. A Node.js-hez hasonlóan a Deno is JavaScript motort használ V8, amelyet Chromium alapú böngészőkben is használnak. Ugyanakkor a Deno nem a Node.js elágazása, hanem egy új projekt, amelyet a semmiből hoztak létre. Projekt kód forgalmazza MIT licenc alatt. Szerelvények előkészített Linux, Windows és macOS számára.

A jelentős verziószám a Deno névtérben lévő API-k stabilizálásához kapcsolódik, amelyek felelősek az alkalmazások és az operációs rendszer közötti interakcióért. Szoftver felületek, amelyek eddig nem stabilizálódott, alapértelmezés szerint rejtve vannak, és csak akkor érhetők el, ha „--unstable” módban fut. Ahogy új verziók jönnek létre, az ilyen API-k fokozatosan stabilizálódnak. A globális névtérben található API, amely olyan gyakori függvényeket tartalmaz, mint a setTimeout() és a fetch(), a lehető legközelebb áll a hagyományos webböngészők API-jához, és a böngészők webes szabványainak megfelelően lett kifejlesztve. A Rust által biztosított API-k, amelyeket közvetlenül a platformkódban használnak, valamint a Deno futtatókörnyezethez tartozó bővítmények fejlesztésére szolgáló felület, még nem stabilizálódtak, és tovább fejlődnek.

Az új JavaScript platform létrehozásának fő motívuma a fogalmi hibák kiküszöbölése volt, felvételt nyer a Node.js architektúrában, és biztonságosabb környezetet biztosít a felhasználóknak. A biztonság javítása érdekében a V8-as motor Rust nyelven íródott, ami elkerüli az alacsony szintű memóriakezelésből adódó számos sebezhetőséget, például az utólagos szabad hozzáférést, a nulla mutatóhivatkozásokat és a puffertúllépéseket. A platform a kérések nem blokkoló módban történő feldolgozására szolgál Tokio, szintén Rust nyelven íródott. A Tokio lehetővé teszi az eseményvezérelt architektúrán alapuló nagy teljesítményű alkalmazások létrehozását, amelyek támogatják a többszálú feldolgozást és a hálózati kérések aszinkron módban történő feldolgozását.

A főbb Jellemzők Deno:

  • Biztonságorientált alapértelmezett konfiguráció. A fájlhozzáférés, a hálózatépítés és a környezeti változókhoz való hozzáférés alapértelmezés szerint le van tiltva, és kifejezetten engedélyezni kell. Az alkalmazások alapértelmezés szerint elszigetelt sandbox környezetben futnak, és nem férhetnek hozzá a rendszer képességeihez kifejezett engedélyek megadása nélkül;
  • Beépített TypeScript-támogatás a JavaScript-en túl. A típusellenőrzéshez és a JavaScript generálásához a szabványos TypeScript fordítót használjuk, ami teljesítmény-hibat eredményez a V8-as JavaScript-elemzéshez képest. A jövőben tervezzük a TypeScript típusellenőrző rendszer saját implementációjának elkészítését, amely nagyságrenddel javítja a TypeScript feldolgozási teljesítményét;
  • A futási idő egyetlen önálló végrehajtható fájl („deno”) formájában érkezik. Az alkalmazások Deno használatával történő futtatásához elegendő letöltés a platformhoz egy futtatható fájl található, körülbelül 20 MB méretű, amely nem rendelkezik külső függőséggel, és nem igényel különleges telepítést a rendszerre. Ráadásul a deno nem egy monolitikus alkalmazás, hanem egy ládacsomagok gyűjteménye Rustban (deno_core, rozsdás_v8), amely külön is használható;
  • A program indításakor, valamint a modulok betöltésekor használhatja az URL címzést. Például a welcome.js program futtatásához használhatja a „deno https://deno.land/std/examples/welcome.js” parancsot. A külső erőforrásokból származó kód letöltődik és gyorsítótárazásra kerül a helyi rendszeren, de soha nem frissül automatikusan (a frissítéshez kifejezetten az alkalmazás „--reload” jelzővel való futtatása szükséges);
  • A hálózati kérések hatékony feldolgozása HTTP-n keresztül az alkalmazásokban; a platformot nagy teljesítményű hálózati alkalmazások létrehozására tervezték;
  • Lehetőség olyan univerzális webalkalmazások létrehozására, amelyek Deno-ban és normál webböngészőben is végrehajthatók;
  • elérhetőség szabványos modulkészlet, amelynek használata nem követeli meg a külső függőségekhez való kötődést. A szabványgyűjtemény moduljai további auditon és kompatibilitási tesztelésen estek át;
  • A futási időn kívül a Deno platform csomagkezelőként is működik, és lehetővé teszi a modulok elérését a kódon belüli URL-en keresztül. Például egy modul betöltéséhez a kódban megadhatja az „import * as log from „https://deno.land/std/log/mod.ts” címet. A külső szerverekről URL-en keresztül letöltött fájlok gyorsítótárban vannak. A modulverziókhoz való kötődést az URL-en belüli verziószámok megadásával határozzák meg, például „https://unpkg.com/[e-mail védett]/dist/liltest.js";
  • A struktúra tartalmaz egy integrált függőségi vizsgálati rendszert (a „deno info” parancsot) és egy kódformázó segédprogramot (deno fmt);
  • Az összes alkalmazásszkript egy JavaScript-fájlba kombinálható.

Különbségek a Node.js-től:

  • A Deno nem használ npm csomagkezelőt
    és nincs tárházhoz kötve, a modulok URL-en vagy fájlútvonalon keresztül vannak megcímezve, maguk a modulok pedig bármely webhelyen elhelyezhetők;
  • A Deno nem használja a „package.json” fájlt a modulok meghatározásához;
  • API különbség, a Deno minden aszinkron művelete ígéretet ad;
  • A Deno megköveteli a fájlok, hálózati és környezeti változók összes szükséges engedélyének kifejezett meghatározását;
  • Minden olyan hiba, amelyet a kezelők nem biztosítanak, az alkalmazás leállításához vezet;
  • A Deno az ECMAScript modulrendszert használja, és nem támogatja a request();
  • A Deno beépített HTTP-kiszolgálója TypeScript-ben íródott, és a natív TCP-foglalatok tetején fut, míg a Node.js HTTP-szerver C-ben íródott, és kötéseket biztosít a JavaScript számára. A Deno fejlesztői a teljes TCP socket réteg optimalizálására és egy általánosabb interfész biztosítására összpontosítottak. A Deno HTTP Server alacsonyabb átviteli sebességet biztosít, de garantálja a kiszámítható alacsony késleltetést. Például a tesztben egy egyszerű, Deno HTTP szerverre épülő alkalmazás másodpercenként 25 ezer kérést tudott feldolgozni 1.3 ezredmásodperces maximális késleltetéssel. A Node.js-ben egy hasonló alkalmazás 34 ezer kérést dolgozott fel másodpercenként, de a várakozási idő 2 és 300 ezredmásodperc között változott.
  • A Deno nem kompatibilis a Node.js (NPM) csomagokkal, de külön fejlesztés alatt áll közbenső réteg a szabványos Node.js könyvtárral való kompatibilitás érdekében, ahogy fejlődik, egyre több Node.js-re írt alkalmazás futhat majd Denóban.
  • Forrás: opennet.ru

Hozzászólás