U lançua Node.js 22.0, një platformë për ekzekutimin e aplikacioneve rrjetore në gjuhën JavaScript. Node.js 22.0 i është përkushtuar degëve me mbështetje afatgjatë, por ky status do të jepet vetëm në tetor, pas stabilizimin. Mbështetja për Node.js 22.x do të vazhdojë deri më 30 prill 2027. Mbështetja për degën e kaluar LTS Node.js 20.x do të zgjasë deri në prill 2026, ndërsa për degën e mëparshme LTS 18.x deri në prill 2025. Mbështetja për degën ndërmjetëse Node.js 21.x do të ndërpritet më 1 qershor 2024.
Përmirësimet kryesore:
- Motori V8 është përditësuar në versionin 12.4, i përdorur në Chromium 124. Ndryshimet krahasuar me degën Node.js 21, e cila përdorte motorin V8 11.8, përfshijnë:
- Mbështetje për shtesën WasmGC, e cila thjeshtëson portimin në WebAssembly të programeve të shkruara në gjuhët e programimit që përdorin mbledhësin e mbetjeve (Kotlin, PHP, Java, etj.). WasmGC shton lloje të reja strukturash dhe vargjesh, për të cilat mund të aplikohet ndarje jo lineare e kujtesës.
- Mbështetje për metodën Array.fromAsync(), e cila në mënyrë asinkrone kthen një instancë të re të objektit Array, e cila është kopjuar nga objektet që ngjajnë me vargjet, të cilat janë enumeruese (iterable) ose enumeruese asinkrone (async iterable).
- Mbështetje për metodat për punën me iteratorë, si .map, .filter, .find, .take, .drop, .forEach dhe .reduce.
- Mbështetje për objektin Set, i cili përkufizon një koleksion vlerash dhe ofron metoda me realizimin e operacioneve tipike të punës me grupe, si ndërprerjet, bashkimeve, diferencave dhe plotësimeve.
- E përfshirë si parazgjedhje kompajleri optimizues JIT i quajtur Maglev, i cili fokusohet në gjenerimin e shpejtë të kodit maqinar me performancë të lartë për kodin e përdorur aktivisht në JavaScript. Aktivizimi i Maglev lejon të përshpejtohet ndjeshëm puna e aplikacioneve CLI me jetë të shkurtër, që nuk kryejnë operacione të gjata, për shembull, koha e kalimit të testit Jetstream zvogëlohet me 7.5%, ndërsa testi Speedometer me 5%.
- Puna me rrjedhat është përshpejtuar përmes rritjes së vlerës së opsionit highWaterMark nga 16 KB në 65 KB (përcakton kufirin deri ku bëhet tamponimi i shkrimit). Ky ndryshim çon në rritjen e konsumit të memories, kështu që aplikacionet që janë projektuar të punojnë me një volum të kufizuar RAM mund t'i duhet të kthejnë vlerën e vjetër përmes thirrjes setDefaultHighWaterMark().
- Përmirësimi i performancës së API-t fetch() dhe test runner-it për shkak të rritjes së efikasitetit në krijimin e instancave të AbortSignal. Përmirësuar performanca e API-ve që lidhen me punën sinkrone me sistemet e skedarëve.
- Ofrimi i mundësisë eksperimentale për përdorimin e thirrjes "require()" për ngarkimin e moduleve JavaScript ESM (ECMAScript Modules) në modin sinkron. Modulët ESM përdoren në shfletues dhe zëvendësojnë modulet CommonJS, specifike për Node.js. Për të ngarkuar përmes "require()", moduli ESM duhet të ekzekutohet në modin sinkron (pa await në nivelin më të lartë). Mbështetjeja aktivizohet përmes flagut "--experimental-require-module".
- Shtuar mundësinë eksperimentale për ekzekutimin e skripteve të përcaktuara në skedarin package.json, duke përdorur komandën "--run ".
- Komanda "node --watch" është marrë në kategori të stabilizuar me implementimin e modit të vëzhgimit, që mundëson rinisjen e procesit kur skedari i importuar ndryshon (për shembull, duke ekzekutuar "node --watch index.js", procesi do të riniset automatikisht kur ndryshohet index.js).
- Stabilizimi i implementimit të brendshëm të API-t WebSocket, që mundëson përdorimin e WebSocket-it në modin klient pa instaluar varësi të tjera.
- Shtuar mbështetje të pjesshme për API-në Navigator.
- Në API-në Webstreams, është shtuar mbështetje për formatin e kompresimit deflate-raw.
- Në modulën node:fsmodule janë shtuar funksionet glob dhe globSync për përputhjen e rrugëve të skedarëve sipas një shembulli.
- Përmirësuar përpunimi i stack-eve IPv6 të konfiguruara keq. Implementuar algoritmi Happy Eyeballs për rishikimin e shpejtë në rast problemeve me IPv6.
- API util është shpallur i deprecated.
- Versionet e varësive janë përditësuar: 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 në 3.8.0, ada 2.7.7 dhe undici 6.6.0.
Platforma Node.js mund të përdoret për mbështetje serverike të funksionimit të aplikacioneve Web, si dhe për krijimin e aplikacioneve të zakonshme klient-server. Për të zgjeruar funksionalitetin e aplikacioneve për Node.js, është përgatitur një koleksion i madh modulash, ku mund të gjenden module me implementime serverësh dhe klientë HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, module për integrimin me framework-e të ndryshme web, trajtues të WebSocket dhe Ajax, lidhës për DB (MySQL, PostgreSQL, SQLite, MongoDB), motorë të templativëve, engine CSS, implementime të algoritmeve kriptografikë dhe sisteme autorizimi (OAuth), parserë XML.
Për të siguruar përpunimin e një numri të madh të kërkesave paralele, Node.js përdor një model të asinxhëm të ekzekutimit të kodit, të bazuar në përpunimin e ngjarjeve në modalitet jo bllokues dhe definimin e trajtuesve të callback. Metodat si epoll, kqueue, /dev/poll dhe select mbështeten si mënyra për të bërë shumëfishimin e lidhjeve. Biblioteka libuv përdoret për shumëfishimin e lidhjeve, e cila është një shtresë mbi libev në sistemet Unix dhe mbi IOCP në Windows. Për të krijuar një rezervë të vijave të ekzekutimit (thread pool), përdoret biblioteka libeio, ndërsa për kryerjen e kërkesave DNS në modalitet jo bllokues integrohet c-ares. Të gjitha thirrjet në sistem që shkaktojnë bllokim kryhen brenda rezervës dhe më pas, si dhe trajtuesit e sinjaleve, kalojnë rezultatin e punës së tyre përsëri përmes një kanali të paemëruar (pipe).
Ekzekutimi i kodit JavaScript sigurohet përmes përdorimit të motorit V8 të zhvilluar nga kompania Google (për më tepër, Microsoft zhvillon një variant të Node.js me motorin Chakra-Core). Në thelb, Node.js është i ngjashëm 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ë punon në shfletues.
Burimi: opennet.ru
