Autor Node.js představil zabezpečenou JavaScriptovou platformu Deno 1.0

Po dvou letech vývoje prezentovány první velké vydání Dej mi 1.0, platforma pro samostatné spouštění aplikací v JavaScriptu a TypeScriptu, kterou lze použít k vytvoření obslužných rutin běžících na serveru. Platformu vyvinul Ryan Dahl (Ryan Dahl), tvůrce Node.js. Stejně jako Node.js, Deno používá JavaScript engine V8, který se také používá v prohlížečích založených na Chromiu. Deno zároveň není forkem Node.js, ale je to nový projekt vytvořený od začátku. Kód projektu distribuovány pod licencí MIT. Sestavy připravený pro Linux, Windows a macOS.

Významné číslo verze je spojeno se stabilizací API v jmenném prostoru Deno, které jsou zodpovědné za interakci aplikací s OS. Softwarová rozhraní, která dosud není stabilizovaný, jsou ve výchozím nastavení skryté a dostupné pouze při spuštění v režimu „--unstable“. Jak se tvoří nové verze, taková API se postupně stanou stabilní. API v globálním jmenném prostoru, které zahrnuje běžné funkce jako setTimeout() a fetch(), je co nejblíže API konvenčních webových prohlížečů a je vyvinuto v souladu s webovými standardy pro prohlížeče. API poskytovaná Rustem, která se používají přímo v kódu platformy, stejně jako rozhraní pro vývoj pluginů pro Deno runtime, zatím nejsou stabilizovaná a pokračují ve vývoji.

Klíčovými motivy pro vytvoření nové platformy JavaScriptu byla snaha odstranit koncepční chyby, připustil v architektuře Node.js a poskytují uživatelům bezpečnější prostředí. Pro zlepšení zabezpečení je V8 engine napsán v Rustu, který se vyhýbá mnoha zranitelnostem, které vyplývají z nízkoúrovňové manipulace s pamětí, jako je after-free přístup, dereference nulového ukazatele a přetečení vyrovnávací paměti. Platforma se používá ke zpracování požadavků v neblokujícím režimu Tokio, také psaný v Rust. Tokio vám umožňuje vytvářet vysoce výkonné aplikace založené na architektuře řízené událostmi, podporující multi-threading a zpracování síťových požadavků v asynchronním režimu.

hlavní Rysy Deno:

  • Výchozí konfigurace zaměřená na zabezpečení. Přístup k souborům, síť a přístup k proměnným prostředí jsou ve výchozím nastavení zakázány a musí být explicitně povoleny. Aplikace ve výchozím nastavení běží v izolovaných prostředích sandbox a nemají přístup k funkcím systému bez udělení explicitních oprávnění;
  • Vestavěná podpora pro TypeScript nad rámec JavaScriptu. Standardní kompilátor TypeScript se používá ke kontrole typů a generování JavaScriptu, což vede ke snížení výkonu ve srovnání s analýzou JavaScriptu ve V8. Do budoucna plánujeme připravit vlastní implementaci systému kontroly typu TypeScript, která řádově zlepší výkon zpracování TypeScript;
  • Runtime přichází ve formě jediného samostatného spustitelného souboru („deno“). Pro spouštění aplikací pomocí Deno to stačí nahrát pro jeho platformu existuje jeden spustitelný soubor o velikosti asi 20 MB, který nemá žádné externí závislosti a nevyžaduje žádnou speciální instalaci do systému. Deno navíc není monolitická aplikace, ale je to sbírka balíčků přepravek v Rustu (deno_core, rusty_v8), které lze použít samostatně;
  • Při spouštění programu, stejně jako pro načítání modulů, můžete použít URL adresování. Například ke spuštění programu welcome.js můžete použít příkaz „deno https://deno.land/std/examples/welcome.js“. Kód z externích zdrojů se stahuje a ukládá do mezipaměti v místním systému, ale nikdy se automaticky neaktualizuje (aktualizace vyžaduje explicitní spuštění aplikace s příznakem „--reload“);
  • Efektivní zpracování síťových požadavků přes HTTP v aplikacích, platforma je určena pro tvorbu vysoce výkonných síťových aplikací;
  • Schopnost vytvářet univerzální webové aplikace, které lze spouštět jak v Deno, tak v běžném webovém prohlížeči;
  • dostupnost standardní sada modulů, jehož použití nevyžaduje vazbu na externí závislosti. Moduly ze standardní kolekce prošly dodatečným auditem a testováním kompatibility;
  • Platforma Deno funguje kromě běhového prostředí také jako správce balíčků a umožňuje přístup k modulům pomocí URL v kódu. Chcete-li například načíst modul, můžete v kódu zadat „import * jako log z „https://deno.land/std/log/mod.ts“. Soubory stažené z externích serverů přes URL jsou ukládány do mezipaměti. Vazba na verze modulu je určena uvedením čísel verzí uvnitř adresy URL, například „https://unpkg.com/[chráněno e-mailem]/dist/liltest.js";
  • Struktura zahrnuje integrovaný systém kontroly závislostí (příkaz „deno info“) a nástroj pro formátování kódu (deno fmt);
  • Všechny aplikační skripty lze sloučit do jednoho souboru JavaScript.

Rozdíly od Node.js:

  • Deno nepoužívá správce balíčků npm
    a není vázán na úložiště, moduly jsou adresovány přes URL nebo cestou k souboru a samotné moduly lze umístit na jakoukoli webovou stránku;
  • Deno nepoužívá "package.json" k definování modulů;
  • Rozdíl API, všechny asynchronní akce v Deno vrátí slib;
  • Deno vyžaduje explicitní definici všech nezbytných oprávnění pro soubory, sítě a proměnné prostředí;
  • Všechny chyby, které nejsou poskytnuty obslužným rutinám, vedou k ukončení aplikace;
  • Deno používá modulový systém ECMAScript a nepodporuje require();
  • Vestavěný HTTP server Deno je napsán v TypeScript a běží na nativních TCP soketech, zatímco Node.js HTTP server je napsán v C a poskytuje vazby pro JavaScript. Vývojáři společnosti Deno se zaměřili na optimalizaci celé vrstvy soketů TCP a poskytování obecnějšího rozhraní. Deno HTTP Server poskytuje nižší propustnost, ale zaručuje předvídatelnou nízkou latenci. Například jednoduchá aplikace založená na Deno HTTP serveru dokázala v testu zpracovat 25 tisíc požadavků za sekundu s maximální latencí 1.3 milisekundy. V Node.js podobná aplikace zpracovala 34 tisíc požadavků za sekundu, ale latence se pohybovaly od 2 do 300 milisekund.
  • Deno není kompatibilní s balíčky pro Node.js (NPM), ale je vyvíjen samostatně mezivrstva kvůli kompatibilitě se standardní knihovnou Node.js, která se vyvíjí, bude moci v Deno běžet stále více aplikací napsaných pro Node.js.
  • Zdroj: opennet.ru

Přidat komentář