Palvelinpuolen JavaScript-alusta Node.js 21.0 saatavilla

Node.js 21.0 julkaistiin, alusta verkkosovellusten ajamiseen JavaScriptillä. Node.js 21.0 -haaraa tuetaan 6 kuukauden ajan. Lähipäivinä saadaan päätökseen Node.js 20 -haaran stabilointi, joka saa LTS-tilan ja jota tuetaan huhtikuuhun 2026 asti. Node.js 18.0:n aiemman LTS-haaran ylläpito kestää syyskuuhun 2025 ja edellisvuoden LTS-haaran 16.0:n ylläpitoon huhtikuuhun 2024 asti.

Tärkeimmät parannukset:

  • Fetch API on julistettu vakaaksi, ja se on suunniteltu lataamaan resursseja verkon yli ja yksinkertaistamaan yleisen JavaScript-koodin kirjoittamista, joka sopii palvelin- ja asiakaspuolella työskentelyyn. Toteutus perustuu HTTP/1.1 undici -asiakkaan koodiin ja on mahdollisimman lähellä samankaltaista selaimissa tarjottavaa API:ta. API sisältää fetch()-menetelmän ja Headers-objektit. Request and Response, jotka edustavat HTTP-otsikoita, pyyntöä ja vastausta. const res = odota hakua ('https://nodejs.org/api/documentation.json'); if (res.ok) { const data = odota res.json(); console.log(data); }
  • WebStreams API:n tuki, joka tarjoaa pääsyn verkon kautta vastaanotettuihin tietovirtoihin, on vakiintunut. API mahdollistaa omien käsittelijöiden lisäämisen, jotka käsittelevät tietoja tiedon saapuessa verkon kautta odottamatta koko tiedoston lataamista. Node.js:ssä käytettävissä olevia objekteja ovat ReadableStream*, TransformStream*, WritableStream*, TextEncoderStream, TextDecoderStream, CompressionStream ja DecompressionStream.
  • Lisätty WebSocket-asiakasohjelman kokeellinen toteutus, joka on yhteensopiva selaimien kanssa. WebSocket-tuen käyttöönotto edellyttää "--experimental-websocket"-merkkiä.
  • Lisätty kokeellinen tila JavaScript-moduulien ESM (ECMAScript Modules, käytetään moduuleissa selaimille) oletustoteutuksen käyttämiseen CommonJS:n (Node.js:lle) sijaan. Muutos ei vaikuta moduuleihin, joiden muoto on määritetty eksplisiittisesti package.json-tiedoston "type"-kentän kautta, määritetty "--input-type"-lipulla tai on ilmeinen tiedostopäätteestä (.mjs ESM:lle, .cjs CommonJS:lle). Moduuleja, joita ei ole nimenomaisesti määritelty CommonJS:iksi (joissa on esimerkiksi .js-laajennus), käsitellään kuitenkin ESM-moduuleina, kun uusi tila otetaan käyttöön. Uusien moduuliasetusten aktivoimiseksi on ehdotettu "--experimental-default-type" -lippua.
  • V8-moottori on päivitetty versioon 11.8, jota käytetään Chromium 118:ssa, joka tukee nyt ArrayBuffer.prototype.transfer-menetelmää, kykyä ryhmitellä taulukoita (groupBy-metodi) ja WebAssembly-ohjeita vakioiden käsittelyyn (i32.add, i32.sub, i32.mul, i64 .add, i64.sub ja i64.mul).
  • GlobalPreload-käsittelijän tuki on lopetettu, ja se suosii moduulien konfigurointikutsujen rekisteröinti- ja alustuskutsuja.
  • Fs.writeFile-funktioon on lisätty "huuhtele"-vaihtoehto, joka pakottaa tiedot huuhtelemaan asemaan jokaisen kirjoitustoiminnon jälkeen.
  • Parannettu koodin suorituskyky, joka liittyy URL-osoitteiden jäsentämiseen, hakemissovellusliittymään, streameihin, node:fs:ään ja HTTP:hen.
  • Lisätty yleinen navigointiobjekti. Voit esimerkiksi hankkia tietoja suorittimen ytimien määrästä käyttämällä ominaisuutta navigator.hardwareConcurrency.
  • Parametriin "—test" on lisätty tuki glob-maskeille suoritettavien testien valitsemiseksi (voit esimerkiksi määrittää "—test **/*.test.js.").
  • Mukana pakettien hallinta npm 10.2.0 ja llhttp 9.1.2 jäsentin on päivitetty.
  • Visual Studio 2019:n ja 11.0:aa vanhempien macOS-versioiden tuki on lopetettu.

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