Ilmus Node.js 21.0, platvorm, mis on mĂ”eldud JavaScripti pĂ”histe vĂ”rgurakenduste kĂ€itamiseks. Node.js 21.0 haru toetamine kestab 6 kuud. JĂ€rgmiste pĂ€evade jooksul lĂ”petatakse Node.js 20 haru stabiliseerimine, mis saab LTS staatuse ja mille toetamine kestab aprillini 2026. Eelmise LTS haru Node.js 18.0 hooldus kestab septembrini 2025 ja ĂŒle eelmine LTS haru 16.0 kuni aprillini 2024.
Peamised parandused:
- Töös on stabiliseerunud Fetch API, mis on mÔeldud ressursside vÔrgust allalaadimiseks ning lihtsustab universaalse JavaScripti koodi kirjutamist, mis sobib serveri ja kliendi poolele. Rakendus pÔhineb undici HTTP/1.1 kliendi koodil ja on vÔimalikult lÀhedane sarnasele API-le, mida pakuvad brauserid. API sisaldab meetodit fetch() ja objekte Headers, Request ja Response, mis esindavad HTTP-pealkirju, pÀringut ja vastust. const res = await fetch('https://nodejs.org/api/documentation.json'); if (res.ok) { const data = await res.json(); console.log(data); }
- API WebStreams toe toetab stabiilselt, andes juurdepÀÀsu vÔrgu kaudu edastatud andmevoogudele. API vÔimaldab lisada oma töötlejad, mis töötlevad andmeid reaalajas, oodates, kuni kogu fail on laaditud. Node.js-s on saadaval sellised objektid nagu ReadableStream*, TransformStream*, WritableStream*, TextEncoderStream, TextDecoderStream, CompressionStream ja DecompressionStream.
- Lisatud katseklient WebSocket, mis on ĂŒhilduv brauseritega. WebSocketi toe lubamiseks on ette nĂ€htud valik "âexperimental-websocket".
- Lisatud katse reĆŸiim JavaScripti moodulite ESM (ECMAScript moodulid, mida kasutatakse brauserites) vaikimisi rakendamiseks, mitte CommonJS (Node.js spetsiifiline). Muudatus ei mĂ”juta mooduleid, mille formaat on selgelt mÀÀratletud "type" vĂ€ljas package.json, mÀÀratud valiku "âinput-type" kaudu vĂ”i on ilmne faili laiendist (.mjs ESM jaoks, .cjs CommonJS jaoks). SeetĂ”ttu tĂ”lgendatakse mooduleid, mis ei ole otseselt mÀÀratletud kui CommonJS (nt on laiend " .js"), uue reĆŸiimi lubamisel ESM moodulitena. Uute mooduliseadete aktiveerimiseks on soovitatav valik "âexperimental-default-type".
- V8 mootor on uuendatud versioonini 11.8, mida kasutatakse Chromiumis 118, kus on lisandunud toe ArrayBuffer.prototype.transfer meetodile, massiivide grupeerimise vÔimalusele (groupBy meetod) ning WebAssembly kÀskudele, mis kÀsitlevad konstande (i32.add, i32.sub, i32.mul, i64.add, i64.sub ja i64.mul).
- Toetuse lÔpetamine globalPreload kÀitlejale, mille asemel tuleb moodulite seadistamiseks kasutada register ja initialize kutsungit.
- Funktsioonile fs.writeFile on lisatud valik âflushâ, mis sunnib andmeid pĂ€rast iga kirjutamisoperatsiooni salvestama.
- Parandatud URL-i parsimise, API fetchi, voogude, node:fs ja HTTP-ga seotud koodi jÔudlust.
- Lisatud globaalne objekt navigator. NÀiteks CPU tuumade arvu saamiseks vÔib kasutada omadust navigator.hardwareConcurrency.
- Parameetrile ââtestâ on lisatud toimet glob-maskide toe jaoks, et valida kĂ€ivitatavaid teste (nt vĂ”ib mĂ€rkida ââtest **/*.test.jsâ).
- Uuendatud kaasa tulevat paketihaldurit npm 10.2.0 ja parsijat llhttp 9.1.2.
- Toetuse lÔpetamine Visual Studio 2019 ja macOS versioonide jaoks, mis on vanemad kui 11.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 paljude paralleelsete pĂ€ringute töötlemiseks asĂŒnkroonset koodikĂ€itlusmudelit, mille aluseks on sĂŒndmuste mittesĂŒvendav töötlemine ja tagasikutsumiste mÀÀramine. Ăhenduste multiplexerimiseks toetatakse selliseid meetodeid nagu epoll, kqueue, /dev/poll ja select. Ăhenduste multiplexerimiseks kasutatakse libuv raamatukogu, mis on Unix-sĂŒsteemides libev ja Windowsis IOCP. Töötajate basaari (thread pool) loomiseks kasutatakse libeio raamatukogu ning mittesĂŒvendav DNS-pĂ€ringute töötlemine on integreeritud c-ares'iga. KĂ”ik sĂŒsteemi kutsed, mis vĂ”ivad blokeeruda, tĂ€idetakse töötajate basaari sees ja seejĂ€rel, nagu ka signaalide töötlejad, edastavad oma töö tulemuse tagasi anonĂŒĂŒmsesse torusse (pipe). JavaScripti koodi tĂ€itmine tagatakse Google'i loodud V8 mootori kaasamise kaudu (tĂ€psemalt arendab Microsoft Node.js varianti Chakra-Core mootoriga).
Node.js on teatud mĂ”ttes sarnane Perl AnyEvent, Ruby Event Machine, Python Twisted ja Tcl-i sĂŒndmustepĂ”histe rakendustega, kuid Node.js-i sĂŒndmuste töötlemise tsĂŒkkel (event loop) on arendaja eest varjatud ning sarnaneb veebirakenduse sĂŒndmuste töötlemisega, mis töötab brauseris. Node.js-i rakenduste kirjutamisel tuleb arvestada sĂŒndmustepĂ”hise programmeerimise eripĂ€radega. NĂ€iteks, selle asemel et teostada "var result = db.query('select..');" ja oodata tulemuste töötlemise lĂ”petamist, kasutatakse Node.js-is asĂŒnkroonse tĂ€itmise pĂ”himĂ”tet, st kood muutub "db.query('select..', function (result) {töötle tulemus});", kus juhtimine lĂ€heb kohe edasi jĂ€rgmisele koodile ja pĂ€ringu tulemus töödeldakse andmete saabumise ajal.
Allikas: opennet.ru
