U publikua Node.js 21.0, platforma për ekzekutimin e aplikacioneve rrjet në gjuhën JavaScript. Mbështetje për degën Node.js 21.0 do të ofrohet për 6 muaj. Në ditët e ardhshme do të përfundojë stabilizimi i degës Node.js 20, e cila do të marrë statusin LTS dhe do të mbështetet deri në prill 2026. Mbështetje për degën e kaluar LTS, Node.js 18.0, do të vazhdojë deri në shtator 2025, ndërsa për degën e mëparshme LTS 16.0 deri në prill 2024.
Përmirësimet kryesore:
- ĂshtĂ« shpallur API Fetch si tĂ« qĂ«ndrueshĂ«m, i cili Ă«shtĂ« i destinuar pĂ«r shkarkimin e burimeve nĂ« rrjet dhe pĂ«r tĂ« thjeshtuar shkruajtjen e kodit universitar nĂ« JavaScript, i pĂ«rshtatshĂ«m pĂ«r funksionimin nĂ« anĂ«n e serverit dhe klientit. Implementimi bazohet nĂ« kodin e klientit HTTP/1.1, undici dhe Ă«shtĂ« maksimalisht i ngjashĂ«m me API-nĂ« pĂ«rkatĂ«se qĂ« ofrohet nĂ« shfletues. API pĂ«rfshin metodĂ«n fetch() si dhe objektet Headers, Request dhe Response, qĂ« pĂ«rfaqĂ«sojnĂ« titujt HTTP, kĂ«rkesat dhe pĂ«rgjigjet. const res = await fetch('https://nodejs.org/api/documentation.json'); if (res.ok) { const data = await res.json(); console.log(data); }
- Mbështetja për API WebStreams është stabilizuar, e cila ofron qasje në rrjedhat e të dhënave që merret përmes rrjetit. API ofron mundësinë për të shtuar menaxhues të tu, që punojnë me të dhënat siç vijnë përpara se të ngarkohet i gjithë skedari. Në Node.js janë të disponueshme objekte si ReadableStream*, TransformStream*, WritableStream*, TextEncoderStream, TextDecoderStream, CompressionStream dhe DecompressionStream.
- ĂshtĂ« shtuar njĂ« implementim eksperimental i klientit WebSocket, i pajtueshĂ«m me shfletuesit. PĂ«r tĂ« aktivizuar mbĂ«shtetje pĂ«r WebSocket Ă«shtĂ« parashikuar njĂ« flag 'âexperimental-websocket'.
- ĂshtĂ« shtuar njĂ« mod eksperimental pĂ«r pĂ«rdorimin e moduleve JavaScript ESM (ECMAScript Modules, e cila aplikohet nĂ« modulet pĂ«r shfletues) nĂ« vend tĂ« CommonJS (e veçantĂ« pĂ«r Node.js). Ky ndryshim nuk ndikon nĂ« modulet, formati i tĂ« cilave Ă«shtĂ« pĂ«rcaktuar qartĂ« pĂ«rmes fushĂ«s 'type' nĂ« package.json, tĂ« caktuar pĂ«rmes flag 'âinput-type' ose qĂ« Ă«shtĂ« e dukshme nga prapashtesa e skedarit (.mjs pĂ«r ESM, .cjs pĂ«r CommonJS). NĂ« kĂ«tĂ« mĂ«nyrĂ«, modulet qĂ« nuk pĂ«rcaktohen qartĂ« si CommonJS (pĂ«r shembull, kanĂ« prapashtesĂ«n '.js'), do tĂ« trajtohen si ESM kur aktivizohet moda e re. PĂ«r tĂ« aktivizuar konfigurimet e reja tĂ« moduleve, Ă«shtĂ« propozuar njĂ« flag 'âexperimental-default-type'.
- Motori V8 është përditësuar në versionin 11.8, i cili aplikohet në Chromium 118, në të cilin ka ardhur mbështetje për metodën ArrayBuffer.prototype.transfer, mundësia për grupimin e masave (metoda groupBy) dhe instruksione të WebAssembly për trajtimin e konstantëve (i32.add, i32.sub, i32.mul, i64.add, i64.sub dhe i64.mul).
- Mbështetje për menaxhuesin globalPreload është ndalur, për të cilin për konfigurimin e moduleve duhet të përdoren thirrjet register dhe initialize.
- Në funksionin fs.writeFile është shtuar opsioni 'flush' për të detyruar shkarkimin e të dhënave në ruajtës pas çdo operacioni të shkruajtjes.
- Ka disa përmirësime të performancës në kodin e lidhur me analizimin e URL, API fetch, rrjedhat, node:fs dhe HTTP.
- ĂshtĂ« shtuar njĂ« objekt global navigator. PĂ«r shembull, pĂ«r tĂ« marrĂ« tĂ« dhĂ«na mbi numrin e bĂ«rthamave CPU, mund tĂ« pĂ«rdoret pronĂ«sia navigator.hardwareConcurrency.
- NĂ« parametrin 'âtest' Ă«shtĂ« shtuar mbĂ«shtetje pĂ«r maskat glob pĂ«r zgjedhjen e testeve qĂ« do tĂ« ekzekutohen (pĂ«r shembull, mund tĂ« specifikohet 'âtest **/*.test.js.').
- Janë përditësuar menaxheri i paketave npm 10.2.0 dhe parseri llhttp 9.1.2.
- Mbështetje për Visual Studio 2019 dhe versionet e macOS më të vjetra se 11.0 është ndalur.
Platforma Node.js mund të përdoret si për mbështetje të serverëve të aplikacioneve Web, ashtu edhe për të krijuar programe të zakonshme klients-server të rrjeteve. Për të zgjeruar funksionalitetin e aplikacioneve për Node.js është përgatitur një koleksion i madh modulash, ku mund të gjeni module me realizim. servera dhe klientë HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, module për integrim me korniza të ndryshme web, procesorë WebSocket dhe Ajax, lidhës për DB (MySQL, PostgreSQL, SQLite, MongoDB), motorë për modelim, CSS, realizime të algoritmeve kriptografikë dhe sistemeve të autorizimit (OAuth), parserë XML.
Për të siguruar përpunimin e një numri të madh kërkesash paralele, Node.js përdor një model asinkron për ekzekutimin e kodit, i bazuar në përpunimin e ngjarjeve në një mënyrë që nuk bllokon dhe në përcaktimin e trajtuesve të callback. Si metoda për multipleximin e lidhjeve, mbështeten metoda të tilla si epoll, kqueue, /dev/poll dhe select. Biblioteka libuv përdoret për multipleximin e lidhjeve, e cila është një shtresë mbi libev në sistemet Unix dhe mbi IOCP në Windows. Për krijimin e një vende pune (thread pool) përdoret biblioteka libeio, dhe për kryerjen e kërkesave DNS në mënyrë asinkrone është integruar c-ares. Të gjitha thirrjet në sistem që shkaktojnë bllokim ekzekutohen brenda vendeve të punës dhe më pas, si trajtuesit e sinjaleve, përcjellin rezultatin e punës së tyre përsëri përmes një kanali të paemërtuar (pipe). Ekzekutimi i kodit JavaScript sigurohet përmes angazhimit të motorit V8 të zhvilluar nga kompanitë Google (përveç kësaj, Microsoft zhvillon një variant të Node.js me motorin Chakra-Core).
Në thelb, Node.js është e ngjashme me framework-et Perl AnyEvent, Ruby Event Machine, Python Twisted dhe implementimin e ngjarjeve në Tcl, por cikli i përpunimit të ngjarjeve (event loop) në Node.js është i fshehur nga zhvilluesi dhe i ngjan përpunimit të ngjarjeve në një aplikacion web që funksionon në shfletues. Kur shkruani aplikacione për Node.js, është e rëndësishme të merrni parasysh veçantitë e programimit të orientuar në ngjarje, për shembull, në vend të ekzekutimit të «var result = db.query(«select..»);» me pritjen e përfundimit të punës dhe përpunimi i mëvonshëm i rezultateve, Node.js përdor principin e ekzekutimit asinkron, domethënë kodi transformohet në «db.query(«select..», function (result) {përpunimi i rezultatit});», ku kontrolli do të kalojë menjëherë në kodin e mëtejmë dhe rezultati i kërkesës do të përpunohet ndërsa të dhënat mbërrijnë.
Burimi: opennet.ru
