E disponueshme platforma JavaScript nga ana e serverit Node.js 21.0

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 zbatimi eksperimental i klientit WebSocket, i pajtueshëm me shfletuesit. Për të aktivizuar mbështetjen e WebSocket, ofrohet flamuri "--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.
  • Mbështetja për Visual Studio 2019 dhe versionet e macOS më të vjetra se 11.0 është ndërprerë.

Platforma Node.js mund të përdoret si për mirëmbajtjen e serverëve të aplikacioneve në ueb ashtu edhe për krijimin e programeve të rregullta të rrjetit të klientëve dhe serverëve. Për të zgjeruar funksionalitetin e aplikacioneve për Node.js, është përgatitur një koleksion i madh modulesh, në të cilat mund të gjeni module me implementimin e serverëve dhe klientëve HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, module për integrim. me korniza të ndryshme ueb, mbajtës të WebSocket dhe Ajax, lidhës DBMS (MySQL, PostgreSQL, SQLite, MongoDB), motorë shabllonesh, motorë CSS, zbatime të algoritmeve kripto dhe sisteme autorizimi (OAuth), analizues XML.

Për të siguruar përpunimin e një numri të madh kërkesash paralele, Node.js përdor një model të ekzekutimit të kodit asinkron bazuar në trajtimin e ngjarjeve jo-bllokuese dhe përkufizimin e mbajtësve të kthimit të thirrjeve. Metodat e mbështetura për lidhjet e multipleksimit janë epoll, kqueue, /dev/poll dhe zgjidhni. Për multipleksimin e lidhjeve, përdoret biblioteka libuv, e cila është një shtesë për libev në sistemet Unix dhe IOCP në Windows. Biblioteka libeio përdoret për të krijuar një grup thread dhe c-ares është i integruar për të kryer pyetje DNS në modalitetin jo-bllokues. Të gjitha thirrjet e sistemit që shkaktojnë bllokim ekzekutohen brenda grupit të thread dhe më pas, si mbajtësit e sinjalit, transferojnë rezultatin e punës së tyre përsëri përmes një tubi (tub) pa emër. Ekzekutimi i kodit JavaScript sigurohet përmes përdorimit të motorit V8 të zhvilluar nga Google (përveç kësaj, Microsoft po zhvillon një version 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

Shto një koment