Node.js:n kirjoittaja esitteli suojatun JavaScript-alustan Deno 1.0:n

Kahden vuoden kehitystyön jälkeen esitetty ensimmäinen suuri julkaisu Anna minulle 1.0, alusta JavaScript- ja TypeScript-sovellusten itsenäiseen suorittamiseen, jota voidaan käyttää palvelimella toimivien käsittelijöiden luomiseen. Alustan on kehittänyt Ryan Dahl (Ryan Dahl), Node.js:n luoja. Kuten Node.js, Deno käyttää JavaScript-moottoria V8, jota käytetään myös Chromium-pohjaisissa selaimissa. Samaan aikaan Deno ei ole Node.js:n haarukka, vaan uusi projekti, joka on luotu tyhjästä. Projektin koodi jakelija MIT-lisenssillä. Kokoonpanot valmis Linuxille, Windowsille ja macOS:lle.

Merkittävä versionumero liittyy Deno-nimiavaruuden API-liittymien stabilointiin, jotka vastaavat sovellusten vuorovaikutuksesta käyttöjärjestelmän kanssa. Ohjelmistorajapinnat, jotka ovat tähän mennessä ei ole vakiintunut, ovat oletuksena piilossa ja käytettävissä vain käytettäessä "--epävakaa"-tilassa. Kun uusia versioita muodostetaan, tällaiset API:t muuttuvat vähitellen vakaiksi. Globaalin nimitilan sovellusliittymä, joka sisältää yleisiä toimintoja, kuten setTimeout() ja fetch(), on mahdollisimman lähellä perinteisten verkkoselaimien API:ta ja on kehitetty selainstandardien mukaisesti. Rustin toimittamat API:t, joita käytetään suoraan alustakoodissa, sekä käyttöliittymä Deno-ajonaikaisten laajennusten kehittämiseen eivät ole vielä vakiintuneet ja kehittyvät edelleen.

Avainmotiivit uuden JavaScript-alustan luomiseen olivat halu eliminoida käsitteelliset virheet, hyväksytty Node.js-arkkitehtuurissa ja tarjota käyttäjille turvallisempi ympäristö. Turvallisuuden parantamiseksi V8-moottori on kirjoitettu Rust-kielellä, mikä välttää monet haavoittuvuudet, jotka johtuvat matalan tason muistin käsittelystä, kuten after-free-käyttö, nollaosoittimen viittaukset ja puskurin ylitykset. Alustaa käytetään pyyntöjen käsittelemiseen estotilassa Tokio, kirjoitettu myös ruosteella. Tokio antaa sinun luoda korkean suorituskyvyn sovelluksia, jotka perustuvat tapahtumapohjaiseen arkkitehtuuriin, jotka tukevat monisäikeistä ja prosessoivia verkkopyyntöjä asynkronisessa tilassa.

Pääasiallinen ominaisuudet Deno:

  • Turvallisuussuuntautunut oletuskokoonpano. Tiedostojen käyttö, verkkoyhteys ja pääsy ympäristömuuttujiin on oletuksena poistettu käytöstä, ja ne on otettava erikseen käyttöön. Sovellukset toimivat oletuksena eristetyissä hiekkalaatikkoympäristöissä eivätkä voi käyttää järjestelmän ominaisuuksia myöntämättä nimenomaisia ​​käyttöoikeuksia.
  • Sisäänrakennettu tuki TypeScriptille JavaScriptin lisäksi. Tavallista TypeScript-kääntäjää käytetään tyyppien tarkistamiseen ja JavaScriptin luomiseen, mikä johtaa suorituskykyyn verrattuna V8:n JavaScript-jäsentämiseen. Jatkossa aiomme valmistella oman TypeScript-tyypin tarkistusjärjestelmän toteutuksen, joka parantaa TypeScript-käsittelyn suorituskykyä suuruusluokkaa;
  • Suoritusaika tulee yhden itsenäisen suoritettavan tiedoston ("deno") muodossa. Sovellusten suorittaminen Denon avulla riittää download sen alustaa varten on yksi suoritettava tiedosto, kooltaan noin 20 MB, jolla ei ole ulkoisia riippuvuuksia eikä se vaadi erityistä asennusta järjestelmään. Lisäksi deno ei ole monoliittinen sovellus, vaan se on kokoelma laatikkopaketteja Rustissa (deno_core, ruosteinen_v8), jota voidaan käyttää erikseen;
  • Ohjelmaa käynnistettäessä ja moduulien lataamisessa voidaan käyttää URL-osoitteita. Esimerkiksi welcome.js-ohjelman suorittamiseksi voit käyttää komentoa "deno https://deno.land/std/examples/welcome.js". Ulkoisista resursseista peräisin oleva koodi ladataan ja tallennetaan paikallisen järjestelmän välimuistiin, mutta sitä ei koskaan päivitetä automaattisesti (päivitys vaatii nimenomaisen sovelluksen suorittamisen "--reload"-lipulla);
  • Tehokas verkkopyyntöjen käsittely HTTP:n kautta sovelluksissa, alusta on suunniteltu luomaan korkean suorituskyvyn verkkosovelluksia;
  • Mahdollisuus luoda universaaleja verkkosovelluksia, jotka voidaan suorittaa sekä Denossa että tavallisessa verkkoselaimessa;
  • saatavuus standardi moduulisarja, jonka käyttö ei edellytä sitoutumista ulkoisiin riippuvuuksiin. Standardikokoelman moduuleille on tehty lisätarkastus ja yhteensopivuustestaus;
  • Ajonajan lisäksi Deno-alusta toimii myös paketinhallinnana ja mahdollistaa moduulien pääsyn koodin sisällä olevien URL-osoitteiden kautta. Voit esimerkiksi ladata moduulin määrittämällä koodiin "import * as log from "https://deno.land/std/log/mod.ts". Ulkoisilta palvelimilta URL-osoitteen kautta ladatut tiedostot tallennetaan välimuistiin. Sitoutuminen moduuliversioihin määritetään määrittämällä versionumerot URL-osoitteen sisällä, esimerkiksi "https://unpkg.com/[sähköposti suojattu]/dist/liltest.js";
  • Rakenne sisältää integroidun riippuvuuden tarkistusjärjestelmän ("deno info" -komento) ja apuohjelman koodin muotoiluun (deno fmt);
  • Kaikki sovellusskriptit voidaan yhdistää yhdeksi JavaScript-tiedostoksi.

Erot Node.js:stä:

  • Deno ei käytä npm-pakettienhallintaa
    ja se ei ole sidottu arkistoihin, moduuleja osoitetaan URL-osoitteen tai tiedostopolun kautta, ja itse moduulit voidaan sijoittaa mille tahansa verkkosivustolle;
  • Deno ei käytä "package.json"-tiedostoa moduulien määrittämiseen.
  • API ero, kaikki asynkroniset toiminnot Denossa palauttavat lupauksen;
  • Deno edellyttää kaikkien tarvittavien tiedostojen, verkko- ja ympäristömuuttujien käyttöoikeuksien nimenomaista määrittelyä;
  • Kaikki virheet, joita ei ole toimitettu käsittelijöille, johtavat sovelluksen lopettamiseen;
  • Deno käyttää ECMAScript-moduulijärjestelmää eikä tue request();
  • Denon sisäänrakennettu HTTP-palvelin on kirjoitettu TypeScriptillä ja toimii alkuperäisten TCP-vastakkeiden päällä, kun taas Node.js HTTP-palvelin on kirjoitettu C-kielellä ja tarjoaa sidoksia JavaScriptille. Denon kehittäjät ovat keskittyneet optimoimaan koko TCP-liitäntäkerroksen ja tarjoamaan yleisemmän käyttöliittymän. Deno HTTP Server tarjoaa alhaisemman suorituskyvyn, mutta takaa ennustettavan alhaisen latenssin. Esimerkiksi testissä yksinkertainen Deno HTTP -palvelimeen perustuva sovellus pystyi käsittelemään 25 tuhatta pyyntöä sekunnissa maksimiviiveellä 1.3 millisekuntia. Node.js:ssä samanlainen sovellus käsitteli 34 tuhatta pyyntöä sekunnissa, mutta latenssit vaihtelivat 2:sta 300 millisekuntiin.
  • Deno ei ole yhteensopiva Node.js (NPM) -pakettien kanssa, mutta sitä kehitetään erikseen välikerros Yhteensopivuuden vuoksi Node.js-standardin kirjaston kanssa sen kehittyessä yhä useammat Node.js:lle kirjoitetut sovellukset voivat toimia Denossa.
  • Lähde: opennet.ru

Lisää kommentti