Lëshimi i Node.js 22.0, platformës për ekzekutimin e aplikacioneve rrjetore në gjuhën JavaScript, u bë realitet. Node.js 22.0 është kategorizuar si version me mbështetje afatgjatë, por statusi do të konfirmohet vetëm në tetor, pas stabilizimit. Mbështetja për Node.js 22.x do të vazhdojë deri më 30 prill 2027. Mbështetja për versionin e mëparshëm LTS, Node.js 20.x do të vazhdojë deri në prill 2026, ndërsa për versionin e kaluar LTS 18.x deri në prill 2025. Mbështetja për versionin ndërmjetës Node.js 21.x do të ndalet më 1 qershor 2024.
Përmirësimet kryesore:
- Motori V8 është azhurnuar në versionin 12.4, i përdorur në Chromium 124. Ndryshimet e krahasuara me versionin Node.js 21, i cili përdorte motorin V8 11.8, përfshijnë:
- Mbështetje për zgjerimin WasmGC, i cili lehtëson portimin e programeve në WebAssembly që janë shkruar në gjuhë programimi që përdorin mbledhës plehrash (Kotlin, PHP, Java etj.). WasmGC shton lloje të reja strukturash dhe vargjesh, për të cilat mund të aplikohet alokimi jo-linear i memories.
- Mbështetje për metodën Array.fromAsync(), e cila në modalitetin asinkron kthen një instancë të re të objektit Array, e kopjuar nga objektet që i ngjajnë vargjeve, të enumeruara (iterable) ose të enumeruara asinkronisht (async iterable).
- Mbështetje për metoda të punës me iteratorët, si .map, .filter, .find, .take, .drop, .forEach dhe .reduce.
- Mbështetje për objektin Set, që përcakton një koleksion vlerash dhe ofron metoda për implementimin e operacioneve tipike mbi shumësi, si prerje, bashkime, diferencë dhe plotësim.
- Optimizuesi i JIT, Maglev, është aktivizuar si parazgjedhje, me fokus në gjenerimin e shpejtë të kodit të lartë performant për kodin JavaScript që përdoret aktivisht. Aktivizimi i Maglev sjell përfitime të dukshme për aplikacione CLI me jetë të shkurtër, që nuk kryejnë operacione të gjatë; për shembull, koha e kryerjes së testit Jetstream shkurtohet me 7.5%, ndërsa testi Speedometer me 5%.
- Përmirësimi i funksionimit me rrjedha përmes rritjes së vlerës së opsionit highWaterMark nga 16 KB në 65 KB (përcakton limitin deri në të cilin bëhet buferizimi i shkrimit). Ky ndryshim rrit konsumimin e memories, prandaj aplikacionet që janë të menduara për t'u përdorur me memorie të kufizuar mund të kenë nevojë të kthejnë vlerën e vjetër përmes thirrjes setDefaultHighWaterMark().
- Rritja e performancës së API fetch() dhe test runner përmes ndihmës së krijimit të instancave të AbortSignal. Përmirësimi i performancës për API-të lidhur me punën sinhrone me sistemet e skedave.
- Ofrimi i mundĂ«sisĂ« eksperimentale pĂ«r tĂ« pĂ«rdorur thirrjen "require()" pĂ«r tĂ« ngarkuar module JavaScript ESM (ECMAScript Modules) nĂ« modalitet sinhron. Modulet ESM pĂ«rdoren nĂ« shfletues dhe zĂ«vendĂ«sojnĂ« modulet CommonJS, specifike pĂ«r Node.js. PĂ«r t'u ngarkuar pĂ«rmes "require()", moduli ESM duhet tĂ« ekzekutohet nĂ« modalitet sinhron (pa await nĂ« nivelin e lartĂ«). MbĂ«shtetja aktivizohet pĂ«rmes flamurit "âexperimental-require-module".
- Shtuar mundĂ«sia eksperimentale pĂ«r tĂ« ekzekutuar skriptet e caktuara nĂ« skedarin package.json, duke pĂ«rdorur komandĂ«n "ârun ".
- Komanda "node âwatch" Ă«shtĂ« pĂ«rfshirĂ« nĂ« kategorinĂ« e qĂ«ndrueshme, me implementimin e modit tĂ« vĂ«zhgimit qĂ« siguron rinovimin e procesit kur ndryshohet skedari i importuar (pĂ«r shembull, kur ekzekutohet "node âwatch index.js", procesi do tĂ« rinovohet automatikisht kur ndodhin ndryshime nĂ« index.js).
- Implementimi i brendshëm i API WebSocket është stabilizuar, i cili lejon përdorimin e WebSocket si klient pa nevojën e instalimit të varësive të tjera.
- Shtuar mbështetje të pjesshme për API Navigator.
- Në API Webstreams është shtuar mbështetje për formatin e kompresimit deflate-raw.
- Në modulin node:fsmodule janë shtuar funksionet glob dhe globSync për përputhjen e rrugëve të skedarëve sipas një modeli.
- Përmirësimi i trajtimit të stekëve IPv6 që janë konfiguruar keq. Implementimi i algoritmit Happy Eyeballs për rënien e shpejtë në rast të problemeve me IPv6.
- API util është shpallur i vjetruar.
- Versionet e varësive janë azhurnuar: 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 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 të ekzekutimit të kodit, të bazuar në përpunimin e ngjarjeve në mënyrë jo bllokuese dhe në përcaktimin e callback-handlera. Si metoda të shumëfishimit të lidhjeve mbështeten metoda si epoll, kqueue, /dev/poll dhe select. Për shumëfishimin e lidhjeve përdoret biblioteka libuv, e cila është një shtresë mbi libev në sistemet Unix dhe mbi IOCP në Windows. Për krijimin e një grupi të thjeshtësive (thread pool) përdoret biblioteka libeio, dhe për ekzekutimin e kërkesave DNS në mënyrë jo bllokuese është integruar c-ares. Të gjitha thirrjet sistemike që shkaktojnë bllokimin ekzekutohen brenda grupit të thjeshtësive dhe më pas, si dhe menaxherët e sinjaleve, transmetojnë rezultatin e punës së tyre prapa përmes një kanali pa emër (pipe).
Ekzekutimi i kodit JavaScript sigurohet përmes aktivizimit të motorit V8 të zhvilluar nga Google (për më tepër, Microsoft po zhvillon një variant 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ë funksionon në shfletues.
Burimi: opennet.ru
