U publikua Node.js 18.0, platforma për ekzekutimin e aplikacioneve rrjetike në gjuhën JavaScript. Node.js 18.0 është klasifikuar në degët me mbështetje afatgjatë, por statusi do t'i jepet vetëm në tetor, pas stabilizimit. Mbështetje për Node.js 18.x do të realizohet deri në prill 2025. Mbshtetja e degës së mëparshme LTS Node.js 16.x do të vazhdojë deri në prill 2024, ndërsa për degën LTS 14.x deri në prill 2023. Mbështetja për degën LTS 12.x do të përfundojë më 30 prill, dhe për degën ndërmjetëse Node.js 17.x më 1 qershor.
Përmirësimet kryesore:
- Motori V8 është azhurnuar në versionin 10.1, i përdorur në Chromium 101. Krahasuar me lëshimin Node.js 17.9.0, tani ka mbështetje për funksionalitete si metodat findLast dhe findLastIndex për të kërkuar elemente në fund të array-t dhe funksionet Intl.supportedValuesOf. API Intl.Locale është përmirësuar. Inizializimi i fushave të klasave dhe metodave private është përshpejtuar.
- API eksperimental fetch() është aktivizuar si default, që është i destinuar për ngarkimin e burimeve nga interneti. Implementimi bazohet në kodin nga klienti HTTP/1.1 undici dhe është sa më afër API-së së ngjashme që ofrohet në shfletuesit. Përfshihet mbështetje për ndërfaqet FormData, Headers, Request, dhe Response për manipulimin e titujve HTTP të kërkesave dhe përgjigjeve. const res = await fetch('https://nodejs.org/api/documentation.json'); if (res.ok) { const data = await res.json(); console.log(data); }
- Një realizim eksperimental i API Web Streams është shtuar, që ofron qasje në rrjedhat e dhënave të marra nga interneti. API lejon shtimin e trajtuesve të personalizuar për të punuar me të dhënat ndërsa informatat vijnë, pa pritur që të ngarkohet e gjithë skedari. Në Node.js tani janë të disponueshëm objekte si ReadableStream*, TransformStream*, WritableStream*, TextEncoderStream, TextDecoderStream, CompressionStream dhe DecompressionStream.
- API Blob është përfshirë në listën e stabilizuar, i cili lejon inkapsulimin e të dhënave të paprekshme për përdorim të sigurt në punët e ndryshme.
- API BroadcastChannel është përfshirë në listën e stabilizuar, i cili lejon organizimin e shkëmbimit të mesazheve në mënyrë asinkrone në formatin 'një dërgues - shumë marrës'.
- Një modul eksperimental node:test është shtuar për krijimin dhe ekzekutimin e testeve në gjuhën JavaScript, që kthen rezultatet në formatin TAP (Test Anything Protocol).
- Janë krijuar ndërtimet e gatshme për Red Hat Enterprise Linux (RHEL) 8 dhe distribuime të tjera që bazohen në Glibc 2.28+, duke përfshirë Debian 10 dhe Ubuntu 20.04, si dhe për macOS 10.15+. Për shkak të problemeve me ndërtimin e motorit V8, ndërtimet 32-bit për Windows janë pezulluar përkohësisht.
- ĂshtĂ« ofruar mundĂ«sia eksperimentale pĂ«r ndĂ«rtimin e ekzekutuesit Node.js me komponentĂ« tĂ« zgjedhur nga pĂ«rdoruesi, tĂ« inicializuar gjatĂ« fillimit. PĂ«r pĂ«rcaktimin e komponentĂ«ve fillestarĂ«, Ă«shtĂ« shtuar opsioni '--node-snapshot-main' nĂ« skriptin e ndĂ«rtimit configure, pĂ«r shembull, './configure --node-snapshot-main=marked.js; name node'
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
