Ilmus Node.js 22.0, platvorm netirakenduste kÀitamiseks JavaScriptis. Node.js 22.0 kuulub pikaajalise toe harude alla, kuid see staatus omistatakse alles oktoobris stabiliseerimise pÀrast. Node.js 22.x toetust osutatakse kuni 30. aprillini 2027. Eelneva LTS-haru Node.js 20.x toimetamine kestab kuni aprillini 2026 ja eelneva LTS-haru 18.x kuni aprillini 2025. Vahepealse haru Node.js 21.x toimetamine lÔpetatakse 1. juunil 2024.
Peamised tÀiustused:
- V8 mootori versioon on uuendatud versioonile 12.4, mida kasutatakse Chromiumis 124. Node.js 21 haruga vÔrreldes, kus kasutati V8 mootori versiooni 11.8, on jÀrgmised erinevused:
- Toetatakse WasmGC laiendust, mis lihtsustab WebAssembly programmide portimist, mis on kirjutatud prĂŒgi kogumisega keeltes (nt Kotlin, PHP, Java jne). WasmGC lisab uusi struktuuri ja massiivide tĂŒĂŒpe, mille puhul on vĂ”imalik rakendada mitte-lineaarset mĂ€lu jaotust.
- Toetatakse meetodit Array.fromAsync(), mis asĂŒnkroonselt tagastab uue Array objekti eksemplari, mille on kopeeritud massiividest, mis sarnanevad massiiviga, loetletud (iterable) vĂ”i asĂŒnkroonselt loetletud (async iterable).
- Toetatakse iteraatoritega töötamise meetodeid, nagu .map, .filter, .find, .take, .drop, .forEach ja .reduce.
- Toetatakse Set objekti, mis mÀÀratleb vÀÀrtuste kogumi ning pakub meetodeid, mis teostavad tĂŒĂŒpilisi kogudega töötamise operatsioone, nagu lĂ”ike, ĂŒhendused, vahe ja tĂ€iendused.
- Sisseehitatud on vaikimisi optimeeriv JIT-kompilaator Maglev, mis on suunatud kiire kĂ”rgjĂ”udlusega masinkoodi genereerimisele aktiivselt kasutatava JavaScripti koodi jaoks. Maglevi lubamine vĂ”imaldab mĂ€rgatavalt kiirendada lĂŒhiajaliste CLI rakenduste tööd, mis ei soorita pikaajalisi operatsioone, nĂ€iteks Jetstreami testide lĂ€bimise aeg vĂ€heneb 7.5%, samas Speedometeri testide puhul 5%.
- Ahnud töövoogude kÀsitlemist on kiirendatud, suurendades highWaterMark valiku vÀÀrtust 16 KB-lt 65 KB-le (mÀÀrab limiidi, mille ulatuses salvestamine toimub). Muutus toob kaasa suurema mÀlutarbimise, seega vÔib rakendustel, mis on mÔeldud piiratud RAM-i kasutamiseks, olla vajalik taastada vana vÀÀrtus lÀbi setDefaultHighWaterMark() kÔne.
- API fetch() ja test runner'i jĂ”udlus on paranenud AbortSignal'i eksemplaride tĂ”husama loomise tĂ”ttu. JĂ”udluse parandamine on toimunud API-des, mis on seotud failisĂŒsteemidega töötamisega.
- Eksperimentaalsena on vĂ”imalik kasutada 'require()' kutsumist ESM (ECMAScript Modules) JavaScripti moodulite sĂŒnkroonselt laadimiseks. ESM-mooduleid kasutatakse brauserites ja need asendavad Node.js spetsiifilisi CommonJS mooduleid. Mooduli laadimiseks 'require()' kaudu peab ESM-moodul olema sĂŒnkroonselt tĂ€idetud (ilma await'ita ĂŒlemisel tasemel). Tugi lĂŒlitatakse sisse lipu 'âexperimental-require-module' kaudu.
- Eksperimentaalselt on lisatud vĂ”imalus kĂ€ivitada skripte, mis on mÀÀratud package.json failis, kasutades kĂ€sku 'ârun '.
- Komand 'node âwatch' on muudetud stabiilseks, rakendades jĂ€lgimisreĆŸiimi, mis tagab protsessi taaskĂ€ivitamise imporditud faili muutumisel (nĂ€iteks 'node âwatch index.js' kĂ€ivitamisel taaskĂ€ivitub protsess automaatselt, kui index.js failis on muudatusi).
- Sisseehitatud WebSocket API on stabiliseeritud, vĂ”imaldades kasutada WebSocket'i kliendireĆŸiimis, ilma tĂ€iendavate sĂ”ltuvuste installimiseta.
- API Navigator'i osaline tugi on lisatud.
- Webstreams API-s on lisatud deflate-raw tihendamisformaadi tugi.
- Moodulisse node:fsmodule on lisatud funktsioonid glob ja globSync failiteede mustri jÀrgi sobitamiseks.
- IPv6 vale konfigureerimise töötlemine on paranenud. On rakendatud Happy Eyeballs algoritmi, et kiiresti tagasi lĂŒlituda, kui IPv6-ga on probleeme.
- API util on kuulutatud vananenuks.
- SÔltuvuste versioonid on uuendatud: npm 10.5.1, libuv 1.48.0, simdutf 5.2.3, c-ares 1.28.1, zlib 1.3.0.1-motley-24c07df, simdjson 3.8.0, ada 2.7.7 ja undici 6.6.0.
Node.js platvormi saab kasutada nii veebirakenduste serveripoolseks toe tagamiseks kui ka tavaliste klient-serveri vĂ”rgurakenduste loomiseks. Node.js jaoks on vĂ€lja töötatud suur moodulite kogumik, kust leiate mooduleid, mis hĂ”lmavad serverid HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3 kliente, mooduleid erinevate veebiraamistike integreerimiseks, WebSocket ja Ajax töötlejat, andmebaasi ĂŒhendusi (MySQL, PostgreSQL, SQLite, MongoDB), malligeneraatorid, CSS-mootorid, krĂŒptoalgoritmide rakendused ja autentimissĂŒsteemid (OAuth), XML-parsereid.
Paljude paralleelsete pĂ€ringute töötlemiseks kasutab Node.js asĂŒnkroonset koodi kĂ€ivitamise mudelit, mis pĂ”hineb mitteblokeeriva sĂŒndmuste töötlemisel ja tagasiside töötlejate mÀÀratlemisel. Ăhenduste multiplexerimise meetoditeks on toetatud nĂ€iteks epoll, kqueue, /dev/poll ja select. Ăhenduste multiplexerimiseks kasutatakse raamatukogu libuv, mis on sĂŒsteemides Unix libev-i ja Windowsis IOCP ĂŒlemaailmne kiht. Kiiruseteemade basseini (thread pool) loomiseks kasutatakse raamatukogu libeio ning mitteblokeeriva DNS-pĂ€ringute tĂ€itmiseks on integreeritud c-ares. KĂ”ik sĂŒsteemikutsed, mis pĂ”hjustavad blokeerimist, tĂ€idetakse teemapools ja seejĂ€rel edastavad tulemuse töötluse tagasi anonĂŒĂŒmsesse kanali (pipe) kaudu, sarnaselt signaali töötlejatega.
JavaScripti koodi tĂ€itmine toimub Google'i arendatud V8 mootori kaudu (lisaks arendab Microsoft Node.js varianti Chakra-Core mootori abil). Node.js on olemuselt sarnane Perl AnyEvent, Ruby Event Machine, Python Twisted ja Tcl'i sĂŒndmustöötluse raamistikuga, kuid Node.js sĂŒndmustöötluse tsĂŒkkel on arendajate eest peidetud ja meenutab sĂŒndmustöötlust veebirakenduses, mis töötab brauseris.
Allikas: opennet.ru
