Välja on antud Node.js 22.0, JavaScripti võrgu rakenduste käitamisplatvorm. Node.js 22.0 kuulub pikaajalise toe harudesse, kuid see staatus antakse alles oktoobris pärast stabiliseerimist. Node.js 22.x toe kestus on kuni 30. aprill 2027. Aastani 2026 jätkub eelmise LTS haru Node.js 20.x tugi, samas kui eelmine LTS haru 18.x jätkab kuni 2025. aasta aprillini. Vahepealse haru Node.js 21.x tugi lõppeb 1. juunil 2024.
Peamised parandused:
- V8 mootori versioon on uuendatud 12.4-le, mida kasutatakse Chromiumis 124. Node.js 21 harust, kus kasutati V8 mootorit 11.8, on muudatused järgmised:
- Tugi WasmGC laiendusele, mis lihtsustab prügikoristajat kasutavate programmeerimiskeelte (nt Kotlin, PHP, Java jne) portimist WebAssembly-sse. WasmGC lisab uued struktuuri- ja massiivitüübid, millele saab rakendada mitte-lineaarset mälujaotust.
- Tugi Array.fromAsync() meetodi toetamine, mis asünkroonselt tagastab uue Array objekti eksemplari, kopeeritud massiivi sarnastest, loetavatest (iterable) või asünkroonselt loetavatest (async iterable) objektidest.
- Toetatakse iteraatoritega töötamise meetodeid, nagu .map, .filter, .find, .take, .drop, .forEach ja .reduce.
- Toetatakse Set objekti, mis määratleb väärtuste kollektsiooni ja pakub meetodeid tüüpiliste hulgatehete, näiteks ühisosa, ühendamine, vahe ja täienduse, realiseerimiseks.
- Vaikimisi on sisse lülitatud JIT-optimeeriv kompilaator Maglev, mille eesmärk on kiiresti genereerida kõrge jõudlusega masinkoodi aktiivselt kasutatava JavaScripti koodi jaoks. Maglevi aktiveerimine võimaldab märkimisväärselt kiirendada lühiealiste CLI-rakenduste tööd, mis ei soorita pikaajalisi toiminguid, näiteks Jetstreami testi läbimise aeg väheneb 7,5% ja Speedometeri testi aeg 5%.
- Vooges voogude töötlemist on kiirus suurenenud, suurendades highWaterMark valiku väärtust 16 KB-lt 65 KB-ni (mis määrab kirje vahemälu piiri). See muudatus toob kaasa mälu suurema tarbimise, seega võib rakendustel, mis on mõeldud piiratud RAM-iga töötamiseks, olla vajalik vana väärtuse tagasiviimine meetodi setDefaultHighWaterMark() kaudu.
- API fetch() ja test runneri jõudlust on suurendatud, parandades AbortSignal'i eksemplaride loomise efektiivsust. Samuti on paranenud API-d, mis on seotud failisüsteemide sünkroonse töötlemisega.
- Eksperimentaalne võimalus kasutada require() kutsumist ESM (ECMAScript Modules) JavaScripti moodulite sünkroonseks laadimiseks on nüüd saadaval. ESM-moodulid on kasutusel brauserites ja asendavad Node.js spetsiifilised CommonJS moodulid. ESM-mooduli laadimiseks require() kaudu peab see töötama sünkroonrežiimis (ilma awaitita ülemise taseme). Toetamine aktiveeritakse lipuga —experimental-require-module.
- Lisatud eksperimentaalne võimalus käivitada skripte, mis on määratletud package.json failis, kasutades käsku —run .
- Stabiilsesse kategooriasse on viidud meeskond «node —watch», mis rakendab jälgimisrežiimi, tagades protsessi taaskäivitamise, kui imporditud failis toimub muudatus (näiteks, kui käivitada «node —watch index.js», taaskäivitatakse protsess automaatselt, kui index.js failis toimub muudatus).
- Stabiliseeritud on sisseehitatud WebSocket API, mis võimaldab kasutada WebSocket'i kliendi režiimis ilma lisade sõltuvuste installimiseta.
- Lisatud on osaline tugi Navigator API-le.
- Webstreams API-s on lisatud deflate-raw tihendamisvorming.
- Moodulisse node:fsmodule on lisatud funktsioonid glob ja globSync, mis võimaldavad mustri järgi failiteede vastandamist.
- IPv6 vale konfiguratsiooni töötlemist on parendatud. Rakendatud on Happy Eyeballs algoritm, mis tagab kiire tagasipöördumise IPv6 probleemide korral.
- Kasutuselt on kõrvaldatud util API.
- Sõltuvuste versioonid on värskendatud: 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 serveripoolses toetuses kui ka tavapäraste kliendi- ja serveripoolsete võrguprogrammide loomiseks. Node.js rakenduste funktsionaalsuse laiendamiseks on koostatud suur moodulite kogu, kust leiate moodulid HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3 klientide rakendamiseks. serverite Lisaks on saadaval moodulid erinevate veebiraamistikest integreerimiseks, WebSocketi ja Ajax töötlejate, andmebaasi ühenduse moodulite (MySQL, PostgreSQL, SQLite, MongoDB), templaatide, CSS-mootorite, krüptoalgoritmide ja autoriseerimissüsteemide (OAuth), XML-parside rakendusteks.
Node.js kasutab suurte paralleelsete päringute töötlemiseks asünkroonset mudelit, mis põhineb sündmustel mittesünkroonsete töötlemiste jaoks ja callback-funktsioonide määratlemisel. Ühenduste multipleximise meetoditena toetatakse selliseid tehnikaid nagu epoll, kqueue, /dev/poll ja select. Ühenduste multipleximiseks kasutatakse libuv teeki, mis on Unix-süsteemide libev ja Windowsi IOCP kohalduse kiht. Thread pooli loomiseks kasutatakse libeio teeki, ning mittesünkroonsete DNS-päringute täitmiseks on integreeritud c-ares. Kõik blokeerivad süsteemi kutsed täidetakse thread poolis ja edastavad seejärel oma töö tulemuse tagasi anonüümse toru kaudu.
JavaScripti koodi täitmine toimub Google'i välja töötatud V8 mootori kaudu (t oletame, et Microsoft arendab samal ajal Node.js varianti Chakra-Core'i mootoriga). Node.js on põhimõtteliselt sarnane Perl AnyEvent'i, Ruby Event Machine'i, Python Twisted'i ja Tcl'i sündmuste rakendusega, kuid sündmusteforemni (event loop) Node.js-is on arendaja eest varjatud ja meenutab sündmuste töötlemist veebirakenduses, mis töötab brauseris.
Allikas: opennet.ru
