Lëshohet Node.js 23.0.0, një platformë për ekzekutimin e aplikacioneve rrjetore në gjuhën JavaScript. Node.js 23.0 është klasifikuar si një degë ndërmjetëse, mbështetje për të cilën jepet për një periudhë prej 7 muajsh (deri në qershor 2025). Në ditët në vijim, do të përfundojë stabilizimi i degës Node.js 22, e cila më 29 tetor do të marrë statusin LTS dhe do të mbështetet deri në prill 2027. Mbështetja për degët e kaluara LTS të Node.js 20.x dhe 18.x do të vazhdojë deri në prill 2026 dhe 2025 përkatësisht.
Përmirësimet kryesore:
- Shtohet mbĂ«shtetje eksperimentale pĂ«r gjuhĂ«n TypeScript, e cila lejon pĂ«rcaktimin e qartĂ« tĂ« tipeve. MbĂ«shtetja aktivizohet me opsionet «âexperimental-strip-types» dhe «âexperimental-transform-types». Me opsionin e parĂ«, puna me TypeScript pĂ«rfshin thjesht pastrimin e pĂ«rcaktimeve tĂ« tipeve specifike pĂ«r kĂ«tĂ« gjuhĂ« (nuk kryhet kontrolli i tipeve, kodi thjesht transformohet nĂ« JavaScript pa tipe). Opsioni i dytĂ« transformon disa elementĂ« tĂ« sintaksĂ«s TypeScript nĂ« kodin JavaScript, si pĂ«r shembull enumeratat (enum) dhe hapĂ«sirat emĂ«rore (namespace).
- Aktivizohet nga e para mundësia për të përdorur thirrjen «require()» për ngarkimin e moduleve JavaScript ESM (ECMAScript Modules) në mënyrë sinkrone. Module ESM të përdorura në shfletues dhe zëvendësojnë modulet CommonJS, specifike për Node.js. Për t'u ngarkuar përmes «require()» në Node.js, moduli ESM duhet të ekzekutohet në mënyrë sinkrone (pa await në nivelin e lartë).
- Sigurohet identifikimi automatik i moduleve ESM në skedarët pa zgjerim ose me zgjerimin «.js». Më parë, këta skedarë interpretoheshin si module CommonJS nëse në skedarin package.json në të njëjtin katalog nuk ishte caktuar qartë tipi i tyre («type»: «module»). Në versionin e ri, për skedarët, tipi i të cilëve nuk është caktuar në package.json, në fillim kryhet një përpjekje për t'u ngarkuar si modul CommonJS, dhe nëse kjo dështon, atëherë si modul ESM.
- Implementim eksperimental i shtuar i pĂ«rputhshĂ«m me shfletuesit API Web Storage, i destinuar pĂ«r ruajtjen e pĂ«rhershme (klasa localStorage) ose tĂ« pĂ«rkohshme (klasa sessionStorage) tĂ« tĂ« dhĂ«nave nĂ« formatin çelĂ«s/vlerĂ«. PĂ«r tĂ« aktivizuar mbĂ«shtetje pĂ«r Web Storage, nevojitet ekzekutimi me flagun «âexperimental-webstorage» dhe caktimi i rrugĂ«s pĂ«r skedarin e ruajtjes pĂ«rmes flagut «âlocalstorage-file».
- ĂshtĂ« shtuar njĂ« API eksperimental SQLite pĂ«r tĂ« punuar me bazat e tĂ« dhĂ«nave, duke pĂ«rdorur gjuhĂ«n e pyetjeve SQL dhe ruajtjen nĂ« bazĂ« tĂ« bibliotekĂ«s SQLite. PĂ«rveç ruajtjes sĂ« bazĂ«s sĂ« tĂ« dhĂ«nave nĂ« njĂ« skedar nĂ« disk, ajo gjithashtu mund tĂ« vendoset nĂ« memorie, duke specifikuar nĂ« vend tĂ« emrit tĂ« skedarit ":memory:". API e lartpĂ«rmendur e Web Storage Ă«shtĂ« implementuar gjithashtu mbi SQLite, e cila ka sjellĂ« shtimin e SQLite nĂ« numrin e varĂ«sive pĂ«r Node.js.
- ĂshtĂ« shpallur ekipi stabil "node --run", i destinuar pĂ«r tĂ« ekzekutuar skriptet e pĂ«rcaktuara nĂ« skedarin package.json.
- ĂshtĂ« realizuar mbĂ«shtetje opsionale pĂ«r ruajtjen e kodit tĂ« kompiluar nĂ« disk pĂ«r tĂ« pĂ«rshpejtuar ndjeshĂ«m ekzekutimin e moduleve. Aktivizimi i ruajtjes bĂ«het nĂ«pĂ«rmjet variablĂ«s sĂ« ambientit NODE_COMPILE_CACHE. QĂ«llimi i kĂ«saj funksionaliteti Ă«shtĂ« i ngjashĂ«m me paketĂ«n v8-compile-cache, por dallohet pĂ«r performancĂ« mĂ« tĂ« lartĂ« dhe mbĂ«shtetje pĂ«r modulat ESM.
- ĂshtĂ« optimizuar objekti Buffer, i cili ka lejuar njĂ« rritje tĂ« konsiderueshme tĂ« performancĂ«s sĂ« metodave Buffer.copy() dhe Buffer.write().
- ĂshtĂ« rritur performanca e modulit node:fs, nĂ« tĂ« cilin gjithashtu Ă«shtĂ« reduktuar numri i thirrjeve nĂ« kodin C++ gjatĂ« funksionimit.
- Motori V8 është azhurnuar në versionin 12.9, i përdorur në Chromium 129.
- ĂshtĂ« hequr mbĂ«shtetja pĂ«r sistemet 32-bit me sistemin operativ Windows.
- Për shkak të implementimit të mundësive në Node.js dhe motorin V8, të përcaktuara në standardin C++20, janë rritur kërkesat për versionin e kompilatorit GCC. Për ndërtimin e Node.js tani kërkohet të paktën versioni 12 i GCC.
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
