U lëshua Node.js 21.0, një platformë për ekzekutimin e aplikacioneve të rrjetit në JavaScript. Dega Node.js 21.0 do të mbështetet për 6 muaj. Në ditët në vijim do të përfundojë stabilizimi i degës Node.js 20, e cila do të marrë statusin LTS dhe do të mbështetet deri në prill 2026. Mirëmbajtja e degës së mëparshme LTS të Node.js 18.0 do të zgjasë deri në shtator 2025 dhe vitin para fundit të degës LTS 16.0 deri në prill 2024.
Përmirësimet kryesore:
- Fetch API është deklaruar i qëndrueshëm, i projektuar për ngarkimin e burimeve në rrjet dhe thjeshtimin e shkrimit të kodit universal JavaScript të përshtatshëm për të punuar në anën e serverit dhe të klientit. Zbatimi bazohet në kodin nga klienti undici HTTP/1.1 dhe është sa më afër API-së së ngjashme të ofruar në shfletues. API përfshin metodën fetch() dhe objektet Headers. Kërkesë dhe përgjigje, që përfaqëson titujt, kërkesën dhe përgjigjen HTTP. const res = await fetch('https://nodejs.org/api/documentation.json'); if (res.ok) {const data = await res.json(); konsol.log(të dhëna); }
- Mbështetja për WebStreams API, e cila siguron qasje në rrjedhat e të dhënave të marra përmes rrjetit, është stabilizuar. API bën të mundur shtimin e mbajtësve tuaj që punojnë me të dhënat kur informacioni mbërrin përmes rrjetit, pa pritur që të shkarkohet i gjithë skedari. Objektet e disponueshme në Node.js përfshijnë ReadableStream*, TransformStream*, WritableStream*, TextEncoderStream, TextDecoderStream, CompressionStream dhe DecompressionStream.
- U shtua implementimi eksperimental i klientit WebSocket, i pajtueshëm me shfletuesitPër të aktivizuar mbështetjen e WebSocket, përdorni flamurin "--experimental-websocket".
- U shtua një modalitet eksperimental për përdorimin e zbatimit të paracaktuar të moduleve JavaScript ESM (Modulet ECMAScript, të përdorura në modulet për shfletues) në vend të CommonJS (specifik për Node.js). Ndryshimi nuk prek modulet, formati i të cilave është përcaktuar në mënyrë eksplicite nëpërmjet fushës "type" në package.json, specifikuar nëpërmjet flamurit "--input-type" ose është i dukshëm për shkak të shtesës së skedarit (.mjs për ESM, .cjs për CommonJS). Megjithatë, modulet që nuk janë përcaktuar në mënyrë eksplicite si CommonJS (për shembull, kanë një shtesë ".js") do të trajtohen si module ESM kur të aktivizohet modaliteti i ri. Për të aktivizuar cilësimet e reja të modulit, është propozuar flamuri "--experimental-default-type".
- Motori V8 është përditësuar në versionin 11.8, i përdorur në Chromium 118, i cili tani mbështet metodën ArrayBuffer.prototype.transfer, aftësinë për të grupuar vargje (metoda grupBy) dhe udhëzime WebAssembly për përpunimin e konstantave (i32.add, i32.sub, i32.mul, i64 .add, i64.sub dhe i64.mul).
- Mbështetja për mbajtësin globalPreload është ndërprerë, në favor të regjistrimit dhe inicializimit të thirrjeve për të konfiguruar modulet.
- Një opsion "flush" është shtuar në funksionin fs.writeFile për të detyruar që të dhënat të shpërndahen në disk pas çdo operacioni shkrimi.
- Performanca e përmirësuar e kodit në lidhje me analizimin e URL-ve, API-në e marrjes, transmetimet, nyjen:fs dhe HTTP.
- U shtua objekti i navigatorit global. Për shembull, për të marrë të dhëna për numrin e bërthamave të CPU-së, mund të përdorni veçorinë navigator.hardwareConcurrency.
- NĂ« parametrin "âtest", Ă«shtĂ« shtuar mbĂ«shtetje pĂ«r maskat glob pĂ«r zgjedhjen e testeve pĂ«r ekzekutim (pĂ«r shembull, mund tĂ« specifikoni "âtest **/*.test.js.").
- Menaxheri i paketave të paketuara npm 10.2.0 dhe analizuesi llhttp 9.1.2 janë përditësuar.
- Visual Studio 2019 dhe versionet e mëvonshme nuk mbështeten më. macOS më i vjetër se 11.0.
Platforma Node.js mund të përdoret si për mbështetjen e aplikacioneve web nga ana e serverit, ashtu edhe për krijimin e programeve standarde të rrjetit nga ana e klientit dhe serverit. Për të zgjeruar funksionalitetin e aplikacioneve Node.js, është përgatitur një koleksion i madh modulesh, duke përfshirë ato me implementime. serverat dhe klientë të HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, module për integrim me korniza të ndryshme web, trajtues WebSocket dhe Ajax, lidhës për DBMS (MySQL, PostgreSQL, SQLite, MongoDB), motorë shabllonësh, motorë CSS, implementime të algoritmeve kriptografike dhe sistemeve të autorizimit (OAuth), analizues XML.
Për të trajtuar një numër të madh kërkesash paralele, Node.js përdor një model ekzekutimi asinkron të kodit bazuar në përpunimin e ngjarjeve jo-bllokuese dhe trajtuesit e thirrjeve të kthimit. Metodat e multipleksimit të lidhjeve të mbështetura përfshijnë epoll, kqueue, /dev/poll dhe select. Biblioteka libuv, e cila është një superset i libev në sistemet Unix dhe IOCP në IOCP, përdoret për multipleksimin e lidhjeve. WindowsBiblioteka libeio përdoret për të krijuar një grup fijesh, dhe c-ares është i integruar për të kryer pyetje DNS në modalitetin jo-bllokues. Të gjitha thirrjet e sistemit bllokues ekzekutohen brenda grupit të fijeve dhe më pas, ashtu si trajtuesit e sinjaleve, kthejnë rezultatet e tyre nëpërmjet një tubi pa emër. Ekzekutimi i JavaScript ofrohet nga motori V8 i Google (Microsoft po zhvillon gjithashtu një variant të Node.js me motorin Chakra-Core).
Në thelb, Node.js është i ngjashëm me Perl AnyEvent, Ruby Event Machine, Python Twisted kornizat dhe zbatimin e ngjarjeve Tcl, por cikli i ngjarjes në Node.js është i fshehur nga zhvilluesi dhe i ngjan trajtimit të ngjarjeve në një aplikacion ueb që ekzekutohet në shfletues. Kur shkruani aplikacione për node.js, duhet të merrni parasysh specifikat e programimit të drejtuar nga ngjarjet, për shembull, në vend që të bëni "var result = db.query("select..");" me pritjen e përfundimit të punës dhe përpunimin pasues të rezultateve, Node.js përdor parimin e ekzekutimit asinkron, d.m.th. kodi transformohet në "db.query("select..", function (rezultat) {result processing});", në të cilin kontrolli do të kalojë në çast në kodin e mëtejshëm dhe rezultati i pyetjes do të përpunohet me mbërritjen e të dhënave.
Burimi: opennet.ru
