Ilmus Node.js 21.0, JavaScripti pÔhineva vÔrgurakenduste platvormi uus versioon. Node.js 21.0 haru toetamine kestab 6 kuud. JÀrgmise paari pÀeva jooksul lÔpetatakse Node.js 20 haru stabiliseerimine, mis saab LTS staatuse ning seda toetatakse kuni aprillini 2026. Eelmise LTS haru Node.js 18.0 toetamine kestab kuni septembrini 2025, ja eelmainitud LTS haru 16.0 kuni aprillini 2024.
Peamised tÀiustused:
- Stabiilseks kuulutati Fetch API, mis on mÔeldud ressursside laadimiseks veebist ja lihtsustab universaalse JavaScripti koodi kirjutamist, mis sobib nii serveri kui ka kliendi poolele. Rakendamine pÔhineb HTTP/1.1 kliendi undici koodil ja on maksimaalselt sarnane brauserites pakutavale API-le. API sisaldab meetodit fetch() ja objekte Headers, Request ja Response, mis esindavad HTTP pÀiseid, 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 toetus on stabiliseeritud, mis annab juurdepÀÀsu vÔrgust saadud andmevoogudele. API vÔimaldab lisada oma töödeldavaid funktsioone, mis töötlevad andmeid reaalajas, ilma et peaks ootama kogu faili laadimist. Node.js-s on saadaval sellised objektid nagu ReadableStream*, TransformStream*, WritableStream*, TextEncoderStream, TextDecoderStream, CompressionStream ja DecompressionStream.
- Lisa eksperimentaalne WebSocketi kliendi rakendus, mis on ĂŒhilduv brauseritega. WebSocketi toe aktiveerimiseks on ette nĂ€htud lipp "âexperimental-websocket".
- Lisa eksperimentaalne vaikimisi reĆŸiim JavaScripti moodulite ESM (ECMAScript Modules, rakendatakse brauserites) kasutamiseks selle asemel, et kasutada CommonJS (spetsiifiline Node.js-le). Muudatus ei mĂ”juta mooduleid, mille formaat on selgelt mÀÀratletud package.json failis "type" lahtris, mÀÀratud lippu "âinput-type" kaudu vĂ”i on selge faili laienduse tĂ”ttu (.mjs ESM jaoks, .cjs CommonJS jaoks). Samas, moodulid, mis ei ole otseselt mÀÀratud kui CommonJS (nĂ€iteks on laiendusega " .js "), loetakse uue reĆŸiimi aktiveerimisel ESM mooduliteks. Uute mooduliseadete aktiveerimiseks on pakutud lipp "âexperimental-default-type".
- V8 mootori versioon on uuendatud 11.8-le, mis on kasutusel Chromiumis 118, kus on lisatud ArrayBuffer.prototype.transfer meetodi toetus, massiivide rĂŒhmitamise vĂ”imalus (meetod groupBy) ja WebAssembly konstantide töötlemise instruktsioonide toetus (i32.add, i32.sub, i32.mul, i64.add, i64.sub ja i64.mul).
- GlobalPreload töötleva toega on lÔpetatud, selle asemel tuleb moodulite seadistamiseks kasutada kutsungeid register ja initialize.
- Funktsioonile fs.writeFile lisatud valik 'flush', et sundida andmeid kirjutama mÀllu pÀrast iga kirjutamisoperatsiooni.
- Parandatud koodi jÔudlust, mis on seotud URL-ide parsimise, API fetch, voogude, node:fs ja HTTP-ga.
- Lisatud globaalne objekt navigator. NĂ€iteks CPU tuumaridade arvu saamiseks saab kasutada omadust navigator.hardwareConcurrency.
- Parameetrile '--test' lisatud glob-maskide tugi kÀivitatavate testide valimiseks (nÀiteks vÔib kasutada '--test **/*.test.js').
- PÀdevusse kuuluvad pakihaldur npm 10.2.0 ja parser llhttp 9.1.2 on vÀrskendatud.
- Visual Studio 2019 ja macOS versioonide toetus, mis on vanemad kui 11.0, on lÔpetatud.
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.
Suurte paralleelsete pĂ€ringute töötlemise tagamiseks kasutab Node.js asĂŒnkroonset koodikĂ€ivitamise mudelit, mis pĂ”hineb mitteblokeerival sĂŒndmustöötlusel ja tagasiside töötlejate mÀÀramisel. Ăhenduste multiplexerimise meetoditeks on sellised meetodid nagu epoll, kqueue, /dev/poll ja select. Ăhenduste multiplexerimiseks kasutatakse libuv teeki, mis on libevi peal Unix-sĂŒsteemides ja IOCP peal Windowsis. Tööde vĂ”rgu loomise jaoks kasutatakse libeio teeki, niisuguste mitteblokeerivate DNS-pĂ€ringute töötlemiseks on integreeritud c-ares. KĂ”ik sĂŒsteemikutsed, mis pĂ”hjustavad blokeerimist, toimuvad teede grupis ja edastavad seejĂ€rel oma töö tulemuse tagasi anonĂŒĂŒmse kanali kaudu (pipe). JavaScripti koodi tĂ€itmine toimub Google'i vĂ€lja töötatud V8 mootori kaudu (Microsoft arendab lisaks versiooni Node.js Chakra-Core mootori kasutades).
Oma olemuselt on Node.js sarnane Perl AnyEvent, Ruby Event Machine, Python Twisted raamistikele ja sĂŒndmuste rakendusele Tcl-is, kuid Node.js sĂŒndmuste töötlemise ring on arendajate eest peidetud ja sarnaneb veebirakenduse sĂŒndmuste töötlemisega, mis töötab brauseris. Node.js rakenduste kirjutamisel tuleb arvestada sĂŒndmustepĂ”hise programmeerimise eripĂ€ra, nĂ€iteks, selle asemel, et tĂ€ita "var result = db.query('select..');" oodates töö valmimist ja seejĂ€rel tulemuste töötlemist, kasutatakse Node.js-is asĂŒnkroonilise tĂ€itmise printsiipi, st kood muudetakse "db.query('select..', function (result) {tulemuse töötlemine});", mille puhul juhtimine lĂ€heb koheselt jĂ€rgmisele koodile ja pĂ€ringu tulemust töödeldakse andmete saamisel.
Allikas: opennet.ru
