U publikua Node.js 20.0, një platformë për ekzekutimin e aplikacioneve rrjetore në gjuhën JavaScript. Node.js 20.0 është renditur në degët me mbështetje afatgjatë, por ky status do të jepet vetëm në tetor, pas stabilizimit. Mbështetje për Node.js 20.x do të ofrohet deri më 30 prill 2026. Mbështetje për degën e kaluar LTS Node.js 18.x do të vazhdojë deri në prill 2025, ndërsa për degën e mëparshme LTS 16.x deri në shtator 2023. Mbështetje për degën LTS 14.x do të ndërpritet më 30 prill, dhe për degën ndërmjetëse Node.js 19.x më 1 qershor.
Përmirësimet kryesore:
- Motori V8 është përditësuar në versionin 11.3, që përdoret në Chromium 113. Ndër ndryshimet në krahasim me degën Node.js 19, e cila përdoori motorin Chromium 107, theksohen funksionet String.prototype.isWellFormed dhe toWellFormed, metodat Array.prototype dhe TypedArray.prototype për të punuar me një kopje gjatë ndryshimit të objekteve Array dhe TypedArray, flagu 'v' në RegExp, mbështetje për ndryshimin e madhësisë së ArrayBuffer dhe rritjen e madhësisë së SharedArrayBuffer, si dhe rekurziviteti i bishtit (tail-call) në WebAssembly.
- Предложен экспериментальный механизм Permission Model, позволяющий ограничить доступ к определённым ресурсам в процессе исполнения. Поддержка Permission Model включается через указание при запуске флага «—experimental-permission». В начальной реализации предложены опции для ограничения доступа на запись (—allow-fs-write) и чтение (—allow-fs-read) к определённым частям ФС, дочерним процессам (—allow-child-process), дополнениям (—no-addons) и потокам (—allow-worker). Например, чтобы разрешить запись в каталог /tmp и чтение файла /home/index.js можно указать: node —experimental-permission —allow-fs-write=/tmp/ —allow-fs-read=/home/index.js index.js
Për të kontrolluar aksesin, sugjerohet përdorimi i metodës process.permission.has(), për shembull, 'process.permission.has(‘fs.write’, '/tmp/test').
- Trajtuesit e moduleve të jashtme ECMAScript (ESM), që ngarkohen përmes opsionit '--experimental-loader', tani ekzekutohen në një thread të ndarë, të izoluara nga thread-i kryesor, duke eliminuar ndërhyrjen e kodit të aplikacioneve dhe moduleve ESM të ngarkuara. Si në shfletues, metoda import.meta.resolve() kur thirret nga aplikacioni tani ekzekutohet në mënyrë sinkrone. Në një nga degët e ardhshme të Node.js, mbështetje për ngarkimin ESM pritet të kalojë në mundësi të stabilizuara.
- Moduli node:test (test_runner), i destinuar për krijimin dhe ekzekutimin e testeve në gjuhën JavaScript, që japin rezultate në formatin TAP (Test Anything Protocol), është kaluar në kategorizimin e mundësive stabile.
- Është formuar një ekip i veçantë zhvilluesish përgjegjës për optimizimin e performancës, i cili gjatë përgatitjes së një dege të re ka punuar për të përshpejtuar komponentët e ndryshëm të runtime, duke përfshirë analizin e URL-ve, fetch() dhe EventTarget. Për shembull, kostot gjatë inicializimit të EventTarget janë ulur dyfish, performanca e metodës URL.canParse() është përmirësuar ndjeshëm dhe efikasiteti i punës së timerëve është rritur. Për më tepër, është përfshirë lëshimi i parserit të lartë të performancës URL – Ada 2.0, e shkruar në gjuhën C++.
- Ka vazhduar zhvillimi i mundësisë eksperimentale për shpërndarjen e aplikacioneve në formën e një skedari ekzekutiv të vetëm (SEA, Single Executable Applications). Krijimi i skedarit ekzekutiv tani kërkon zëvendësimin e blob-it, i formuar duke u bazuar në skedarin e konfigurimit në formatin JSON (në vend të zëvendësimit të skedarit JavaScript).
- Është përmirësuar kompatibiliteti i API Web Crypto me implementimet nga projekte të tjera.
- Është shtuar mbështetje zyrtare për Windows në sistemet ARM64.
- Vazhdon implementimi i mbështetjes për zgjerimet WASI (WebAssembly System Interface) për krijimin e aplikacioneve të izoluara WebAssembly. Është hequr nevoja për të specifikuar një flamur të veçantë të komandës për të aktivizuar mbështetje për WASI.
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
