Palvelinpuolen JavaScript-alusta Node.js 20.0 saatavilla

Node.js 20.0, alusta verkkosovellusten suorittamiseen JavaScriptillä, on julkaistu. Node.js 20.0 on määritetty pitkälle tukihaaralle, mutta tämä tila määritetään vasta lokakuussa vakautumisen jälkeen. Node.js 20.x on tuettu 30. huhtikuuta 2026 asti. Edellisen Node.js 18.x LTS -haaran ylläpito kestää huhtikuuhun 2025 ja edellisen 16.x LTS -haaran syyskuuhun 2023 asti. 14.x LTS -haara säilytetään 30. huhtikuuta ja Node.js 19.x -väliaikainen haara 1. kesäkuuta.

Tärkeimmät parannukset:

  • V8-moottori on päivitetty versioon 11.3, jota käytetään Chromium 113:ssa. Muutoksista verrattuna Node.js 19 -haaraan, jossa käytettiin Chromium 107 -moottoria, String.prototype.isWellFormed- ja toWellFormed-funktioita, Array.prototype ja TypedArray.prototype-menetelmiä, jotka toimivat kopioiden kanssa Array- ja TypedArray-objektien muutoksen yhteydessä, "v"-merkki RegExpissä, tuki ArrayBufferin koon muuttamiseen ja SharedArrayBufferin koon kasvattamiseen, tail-kutsu WebAssemblyssa.
  • Ehdotetaan kokeellista lupamallimekanismia, jonka avulla voit rajoittaa tiettyjen resurssien käyttöä suorituksen aikana. Lupamallin tuki otetaan käyttöön määrittämällä "--experimental-permission" -lippu suorituksen aikana. Alkuperäisessä toteutuksessa ehdotettiin vaihtoehtoja rajoittaa kirjoitus (--allow-fs-write) ja lukuoikeus (--allow-fs-read) tiettyihin FS:n osiin, lapsiprosesseihin (--allow-child-process). , lisäosat (--no-addons ) ja säikeet (--allow-worker). Voit esimerkiksi sallia kirjoittamisen /tmp-hakemistoon ja /home/index.js-tiedoston lukemisen määrittämällä: node --experimental-permission --allow-fs-write=/tmp/ --allow-fs-read =/home/index.js-hakemisto .js

    Käyttöoikeuden tarkistamiseen suositellaan menetelmän process.permission.has() käyttöä, esimerkiksi "process.permission.has('fs.write',"/tmp/test").

  • "--experimental-loader"-vaihtoehdon kautta ladattujen ECMAScript-ulkoisten moduulien (ESM) käsittelijät suoritetaan nyt erillisessä säikeessä, joka on eristetty pääsäikeestä, mikä eliminoi sovelluskoodin ja ladattujen ESM-moduulien risteyksen. Samoin kuin selaimet, import.meta.resolve()-menetelmä suoritetaan nyt synkronisesti, kun sitä kutsutaan sovelluksesta. Yhdessä Node.js:n seuraavista haaroista ESM-lataustuki suunnitellaan siirrettäväksi vakaiden ominaisuuksien luokkaan.
  • Node:test (test_runner) -moduuli, joka on suunniteltu luomaan ja suorittamaan JavaScript-testejä, jotka palauttavat tulokset TAP (Test Anything Protocol) -muodossa, on siirretty vakaaksi.
  • Erillinen suorituskykytiimi on muodostettu, joka valmistautuessaan uuteen haaraan on työskennellyt nopeuttaakseen erilaisia ​​ajonaikaisia ​​komponentteja, mukaan lukien URL-jäsennys, fetch() ja EventTarget. Esimerkiksi EventTargetin alustamisen ylimääräiset kustannukset on puolitettu, URL.canParse()-menetelmän suorituskykyä on parannettu merkittävästi ja ajastimien tehokkuutta on parannettu. Lisäksi koostumukseen sisältyy tehokkaan URL-jäsentimen - Ada 2.0 -julkaisu, joka on kirjoitettu C ++ -kielellä.
  • Kokeellisen ominaisuuden kehittäminen sovellusten toimittamiseen yksittäisen suoritettavan tiedoston muodossa (SEA, Single Executable Applications) on jatkunut. Suoritettavan tiedoston luominen vaatii nyt JSON-määritystiedostosta luodun blobin korvaamisen (JavaScript-tiedoston korvaamisen sijaan).
  • Parannettu Web Crypto API -yhteensopivuus muiden projektien toteutusten kanssa.
  • Lisätty virallinen tuki Windowsille ARM64-järjestelmissä.
  • Jatkuva tuki WASI (WebAssembly System Interface) -laajennuksille itsenäisten WebAssembly-sovellusten luomiseen. Poistettu tarve määrittää erityinen komentorivilppu WASI-tuen käyttöön ottamiseksi.

Node.js alustaa voidaan käyttää sekä web-sovellusten palvelinylläpitoon että tavallisten asiakas- ja palvelinverkkoohjelmien luomiseen. Node.js-sovellusten toiminnallisuuden laajentamiseksi on valmisteltu suuri kokoelma moduuleja, joista löydät moduuleja HTTP-, SMTP-, XMPP-, DNS-, FTP-, IMAP-, POP3-palvelimien ja -asiakkaiden, integrointimoduuleja. erilaisilla verkkokehyksillä, WebSocket- ja Ajax-käsittelijöillä, DBMS-liittimillä (MySQL, PostgreSQL, SQLite, MongoDB), mallinnuskoneilla, CSS-koneilla, salausalgoritmien ja valtuutusjärjestelmien toteutuksilla (OAuth), XML-jäsentimillä.

Suuren rinnakkaisten pyyntöjen käsittelyn varmistamiseksi Node.js käyttää asynkronista koodin suoritusmallia, joka perustuu ei-estoiseen tapahtumien käsittelyyn ja takaisinsoittokäsittelijöiden määrittelyyn. Tuetut menetelmät yhteyksien multipleksointiin ovat epoll, kqueue, /dev/poll ja select. Yhteyden multipleksointiin käytetään libuv-kirjastoa, joka on lisäosa libeville Unix-järjestelmissä ja IOCP:lle Windowsissa. Libeio-kirjastoa käytetään säiepoolin luomiseen, ja c-ares on integroitu suorittamaan DNS-kyselyitä estotilassa. Kaikki tukoksia aiheuttavat järjestelmäkutsut suoritetaan säikeen alla ja sitten, kuten signaalinkäsittelijät, siirtävät työnsä tuloksen takaisin nimeämättömän putken (pipe) kautta. JavaScript-koodin suoritus tapahtuu Googlen kehittämän V8-moottorin avulla (lisäksi Microsoft kehittää Node.js-versiota Chakra-Core-moottorilla).

Pohjimmiltaan Node.js on samanlainen kuin Perl AnyEvent-, Ruby Event Machine-, Python Twisted -kehykset ja Tcl-tapahtumatoteutus, mutta Node.js:n tapahtumasilmukka on piilotettu kehittäjältä ja muistuttaa tapahtumien käsittelyä käynnissä olevassa verkkosovelluksessa. selaimessa. Kun kirjoitat sovelluksia node.js:lle, sinun on otettava huomioon esimerkiksi tapahtumapohjaisen ohjelmoinnin erityispiirteet sen sijaan, että tekisit "var result = db.query("select..");" Työn valmistumisen ja tulosten myöhemmän käsittelyn odottaessa Node.js käyttää asynkronisen suorituksen periaatetta, ts. koodi muunnetaan muotoon "db.query("select..", funktio (tulos) {tuloksen käsittely});", jossa ohjaus siirtyy välittömästi seuraavalle koodille ja kyselyn tulos käsitellään tietojen saapuessa.

Lähde: opennet.ru

Lisää kommentti