Die skrywer van Node.js het die veilige JavaScript-platform Deno 1.0 aangebied

Na twee jaar van ontwikkeling aangebied eerste groot vrystelling Gee my 1.0, 'n platform vir selfstandige uitvoering van toepassings in JavaScript en TypeScript, wat gebruik kan word om hanteerders te skep wat op die bediener loop. Die platform is ontwikkel deur Ryan Dahl (Ryan Dahl), skepper van Node.js. Soos Node.js, gebruik Deno 'n JavaScript-enjin V8, wat ook in Chromium-gebaseerde blaaiers gebruik word. Terselfdertyd is Deno nie 'n vurk van Node.js nie, maar is dit 'n nuwe projek wat van nuuts af geskep is. Projek kode versprei deur onder MIT-lisensie. Samestellings voorberei vir Linux, Windows en macOS.

Die beduidende weergawenommer word geassosieer met die stabilisering van die API's in die Deno-naamruimte, wat verantwoordelik is vir die interaksie van toepassings met die bedryfstelsel. Sagteware-koppelvlakke wat tot dusver het nie gestabiliseer nie, is by verstek versteek en slegs beskikbaar wanneer dit in "--onstabiele" modus loop. Soos nuwe weergawes gevorm word, sal sulke API's geleidelik stabiel word. Die API in die globale naamruimte, wat algemene funksies soos setTimeout() en fetch() insluit, is so na as moontlik aan die API van konvensionele webblaaiers en is ontwikkel in ooreenstemming met Webstandaarde vir blaaiers. Die API's wat deur Rust verskaf word, wat direk in die platformkode gebruik word, sowel as die koppelvlak vir die ontwikkeling van inproppe vir Deno-looptyd, is nog nie gestabiliseer nie en ontwikkel steeds.

Die belangrikste motiewe vir die skep van 'n nuwe JavaScript-platform was die begeerte om konseptuele foute uit te skakel, erken in die Node.js-argitektuur, en bied gebruikers 'n veiliger omgewing. Om sekuriteit te verbeter, is die V8-enjin in Rust geskryf, wat baie van die kwesbaarhede vermy wat voortspruit uit laevlakgeheuemanipulasie, soos navrye toegang, nulwyserverwysings en bufferoorskryding. Die platform word gebruik om versoeke in nie-blokkerende modus te verwerk Tokyo, ook in Rust geskryf. Tokio laat jou toe om hoëprestasie-toepassings te skep gebaseer op gebeurtenisgedrewe argitektuur, wat multi-threading ondersteun en netwerkversoeke in asinchroniese modus verwerk.

Die belangrikste kenmerke Deno:

  • Sekuriteit-georiënteerde verstek konfigurasie. Lêertoegang, netwerkvorming en toegang tot omgewingsveranderlikes is by verstek gedeaktiveer en moet uitdruklik geaktiveer word. Toepassings loop by verstek in geïsoleerde sandbox-omgewings en kan nie toegang tot stelselvermoëns kry sonder om eksplisiete toestemmings te gee nie;
  • Ingeboude ondersteuning vir TypeScript buite JavaScript. Die standaard TypeScript-samesteller word gebruik om tipes na te gaan en JavaScript te genereer, wat lei tot 'n prestasietreffer in vergelyking met JavaScript-ontleding in V8. In die toekoms beplan ons om ons eie implementering van die TypeScript-tipe kontrolestelsel voor te berei, wat TypeScript-verwerkingswerkverrigting met 'n orde van grootte sal verbeter;
  • Looptyd kom in die vorm van 'n enkele selfstandige uitvoerbare lêer ("deno"). Dit is genoeg om toepassings met Deno te laat loop Aflaai vir sy platform is daar een uitvoerbare lêer, ongeveer 20 MB groot, wat geen eksterne afhanklikhede het nie en geen spesiale installasie op die stelsel vereis nie. Boonop is deno nie 'n monolitiese toepassing nie, maar is 'n versameling kratpakkette in Rust (deno_kern, verroes_v8), wat afsonderlik gebruik kan word;
  • Wanneer u die program begin, sowel as om modules te laai, kan u URL-adressering gebruik. Byvoorbeeld, om die welcome.js-program te laat loop, kan jy die opdrag "deno https://deno.land/std/examples/welcome.js" gebruik. Kode van eksterne bronne word afgelaai en op die plaaslike stelsel in die kas gestoor, maar word nooit outomaties opgedateer nie (opdatering vereis dat die toepassing uitdruklik met die "--herlaai"-vlag uitgevoer word);
  • Doeltreffende verwerking van netwerkversoeke via HTTP in toepassings; die platform is ontwerp vir die skep van hoëprestasie-netwerktoepassings;
  • Die vermoë om universele webtoepassings te skep wat beide in Deno en in 'n gewone webblaaier uitgevoer kan word;
  • Beskikbaarheid standaard stel modules, waarvan die gebruik nie binding aan eksterne afhanklikhede vereis nie. Modules uit die standaardversameling het bykomende oudit- en versoenbaarheidstoetse ondergaan;
  • Benewens runtime, dien die Deno-platform ook as 'n pakketbestuurder en laat u toegang tot modules deur URL binne die kode. Byvoorbeeld, om 'n module te laai, kan jy in die kode "import * as log from" https://deno.land/std/log/mod.ts spesifiseer. Lêers wat vanaf eksterne bedieners via URL afgelaai word, word gekas. Binding aan moduleweergawes word bepaal deur weergawenommers binne die URL te spesifiseer, byvoorbeeld "https://unpkg.com/[e-pos beskerm]/dist/liltest.js";
  • Die struktuur sluit 'n geïntegreerde afhanklikheidsinspeksiestelsel in (die "deno info"-opdrag) en 'n nut vir kodeformatering (deno fmt);
  • Alle toepassingsskrifte kan in een JavaScript-lêer gekombineer word.

Verskille van Node.js:

  • Deno gebruik nie npm-pakketbestuurder nie
    en is nie gekoppel aan bewaarplekke nie, modules word aangespreek via 'n URL of deur 'n lêerpad, en die modules self kan op enige webwerf geplaas word;
  • Deno gebruik nie "package.json" om modules te definieer nie;
  • API verskil, alle asynchrone aksies in Deno gee 'n belofte terug;
  • Deno vereis eksplisiete definisie van alle nodige toestemmings vir lêers, netwerk- en omgewingsveranderlikes;
  • Alle foute wat nie met hanteerders verskaf word nie, lei tot die beëindiging van die aansoek;
  • Deno gebruik die ECMAScript-modulestelsel en ondersteun nie require();
  • Deno se ingeboude HTTP-bediener is in TypeScript geskryf en loop bo-op inheemse TCP-sokke, terwyl die Node.js HTTP-bediener in C geskryf is en bindings vir JavaScript verskaf. Deno se ontwikkelaars het gefokus op die optimalisering van die hele TCP-soklaag en die verskaffing van 'n meer algemene koppelvlak. Deno HTTP Server bied laer deurset, maar waarborg voorspelbare lae latensie. Byvoorbeeld, in die toets kon 'n eenvoudige toepassing gebaseer op Deno HTTP-bediener 25 duisend versoeke per sekonde verwerk met 'n maksimum latensie van 1.3 millisekondes. In Node.js het 'n soortgelyke toepassing 34 duisend versoeke per sekonde verwerk, maar vertragings het gewissel tussen 2 en 300 millisekondes.
  • Deno is nie versoenbaar met pakkette vir Node.js (NPM), maar word afsonderlik ontwikkel tussenlaag vir verenigbaarheid met die standaard Node.js-biblioteek, soos dit ontwikkel, sal meer en meer toepassings wat vir Node.js geskryf is, in Deno kan loop.
  • Bron: opennet.ru

Voeg 'n opmerking