Node.js autor esitles turvalist JavaScripti platvormi Deno 1.0

Pärast kaheaastast arendustööd esitatakse esimene suurem väljalase Anna mulle 1.0, platvorm rakenduste iseseisvaks täitmiseks JavaScriptis ja TypeScriptis, mida saab kasutada serveris töötavate töötlejate loomiseks. Platvormi on välja töötanud Ryan Dahl (Ryan Dahl), Node.js looja. Nagu Node.js, kasutab Deno JavaScripti mootorit V8, mida kasutatakse ka Chromiumipõhistes brauserites. Samas ei ole Deno Node.js’i kahvel, vaid on uus nullist loodud projekt. Projekti kood jaotatud MIT litsentsi alusel. Assambleed ette valmistatud Linuxi, Windowsi ja macOS-i jaoks.

Märkimisväärne versiooninumber on seotud API-de stabiliseerimisega Deno nimeruumis, mis vastutavad rakenduste koostoime eest OS-iga. Tarkvaraliidesed, mis on seni olnud pole stabiliseerunud, on vaikimisi peidetud ja saadaval ainult siis, kui töötate režiimis "--ebastabiilne". Uute versioonide loomisel muutuvad sellised API-d järk-järgult stabiilseks. Globaalses nimeruumis asuv API, mis sisaldab levinud funktsioone, nagu setTimeout() ja fetch(), on võimalikult lähedane tavapäraste veebibrauserite API-le ja on välja töötatud vastavalt brauseritele mõeldud veebistandarditele. Rusti pakutavad API-d, mida kasutatakse otse platvormi koodis, samuti liides Deno käitusaja pistikprogrammide arendamiseks, ei ole veel stabiliseerunud ja arenevad edasi.

Uue JavaScripti platvormi loomise peamised motiivid olid soov kõrvaldada kontseptuaalsed vead, tunnistas Node.js arhitektuuris ja pakkuda kasutajatele turvalisemat keskkonda. Turvalisuse parandamiseks on V8 mootor kirjutatud Rust-keeles, mis väldib paljusid madala tasemega mäluga manipuleerimisest tulenevaid haavatavusi, nagu järelvaba juurdepääs, null-osuti viited ja puhvri ületamised. Platvormi kasutatakse päringute töötlemiseks mitteblokeerivas režiimis Tokyo, kirjutatud ka Roostes. Tokio võimaldab teil luua suure jõudlusega rakendusi, mis põhinevad sündmustepõhisel arhitektuuril, toetades mitme lõimega töötlemist ja võrgupäringute töötlemist asünkroonses režiimis.

Kõik Omadused Deno:

  • Turvalisusele orienteeritud vaikekonfiguratsioon. Juurdepääs failidele, võrkude loomine ja juurdepääs keskkonnamuutujatele on vaikimisi keelatud ja need peavad olema selgesõnaliselt lubatud. Rakendused töötavad vaikimisi isoleeritud liivakastikeskkondades ega pääse süsteemi võimalustele juurde ilma selgesõnalisi õigusi andmata;
  • Sisseehitatud tugi TypeScriptile peale JavaScripti. Tüüpide kontrollimiseks ja JavaScripti genereerimiseks kasutatakse standardset TypeScripti kompilaatorit, mis toob võrreldes V8 JavaScripti sõelumisega võrreldes jõudluse tabamuse. Tulevikus plaanime ette valmistada oma TypeScripti tüübikontrollisüsteemi juurutuse, mis parandab TypeScripti töötlemise jõudlust suurusjärgu võrra;
  • Käitusaeg on ühe iseseisva käivitatava faili (“deno”) kujul. Rakenduste käivitamiseks Deno abil piisab lae alla selle platvormi jaoks on üks umbes 20 MB suurune käivitatav fail, millel pole väliseid sõltuvusi ja mis ei vaja süsteemi spetsiaalset installimist. Pealegi ei ole deno monoliitne rakendus, vaid see on Rusti aedikupakettide kogu (deno_core, roostes_v8), mida saab kasutada eraldi;
  • Programmi käivitamisel ja ka moodulite laadimisel saate kasutada URL-i adresseerimist. Näiteks programmi welcome.js käivitamiseks võite kasutada käsku "deno https://deno.land/std/examples/welcome.js". Välistest ressurssidest pärit kood laaditakse alla ja salvestatakse kohalikus süsteemis vahemällu, kuid seda ei värskendata kunagi automaatselt (värskendamiseks on vaja rakendust selgesõnaliselt käivitada lipuga "--reload");
  • Võrgupäringute tõhus töötlemine HTTP kaudu rakendustes; platvorm on mõeldud suure jõudlusega võrgurakenduste loomiseks;
  • Võimalus luua universaalseid veebirakendusi, mida saab käivitada nii Denos kui ka tavalises veebibrauseris;
  • kättesaadavus standardne moodulite komplekt, mille kasutamine ei nõua sidumist väliste sõltuvustega. Standardkogu moodulid on läbinud täiendava auditi ja ühilduvuse testimise;
  • Lisaks käitusajale toimib Deno platvorm ka paketihaldurina ja võimaldab moodulitele ligi pääseda koodi sees oleva URL-i kaudu. Näiteks mooduli laadimiseks saate määrata koodis "import * logina aadressilt "https://deno.land/std/log/mod.ts". Välistest serveritest URL-i kaudu alla laaditud failid salvestatakse vahemällu. Mooduli versioonidega sidumine määratakse URL-is versiooninumbrite määramisega, näiteks „https://unpkg.com/[meiliga kaitstud]/dist/liltest.js";
  • Struktuur sisaldab integreeritud sõltuvuskontrollisüsteemi (käsk "deno info") ja koodi vormindamise utiliiti (deno fmt);
  • Kõik rakenduse skriptid saab ühendada üheks JavaScripti failiks.

Erinevused Node.js-st:

  • Deno ei kasuta npm paketihaldurit
    ja ei ole seotud hoidlatega, moodulid on adresseeritud URL-i või failitee kaudu ning mooduleid saab paigutada mis tahes veebisaidile;
  • Deno ei kasuta "package.json" moodulite määratlemiseks;
  • API erinevus, kõik Deno asünkroonsed toimingud annavad lubaduse;
  • Deno nõuab failide, võrgu- ja keskkonnamuutujate jaoks kõigi vajalike õiguste selgesõnalist määratlemist;
  • Kõik vead, mida töötlejatega ei pakuta, viivad rakenduse lõpetamiseni;
  • Deno kasutab ECMAScripti moodulisüsteemi ja ei toeta request();
  • Deno sisseehitatud HTTP-server on kirjutatud TypeScriptis ja töötab natiivsete TCP-pesade peal, samas kui Node.js HTTP-server on kirjutatud C-keeles ja pakub JavaScripti sidumist. Deno arendajad on keskendunud kogu TCP-sokli kihi optimeerimisele ja üldisema liidese pakkumisele. Deno HTTP Server pakub väiksemat läbilaskevõimet, kuid tagab prognoositava madala latentsuse. Näiteks testis suutis Deno HTTP serveril põhinev lihtne rakendus töödelda 25 tuhat päringut sekundis maksimaalse latentsusajaga 1.3 millisekundit. Programmis Node.js töötles sarnane rakendus 34 tuhat päringut sekundis, kuid latentsusaeg jäi vahemikku 2–300 millisekundit.
  • Deno ei ühildu Node.js (NPM) pakettidega, kuid seda arendatakse eraldi vahekiht Ühilduvuse tagamiseks standardse Node.js-i teegiga saab selle arenedes Denos töötada üha rohkem Node.js-i jaoks kirjutatud rakendusi.
  • Allikas: opennet.ru

Lisa kommentaar