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

Lëshimi i Node.js 20.0, një platformë për ekzekutimin e aplikacioneve të rrjetit në JavaScript, ka ndodhur. Node.js 20.0 është caktuar në degën e mbështetjes së gjatë, por ky status nuk do të caktohet deri në tetor, pas stabilizimit. Node.js 20.x do të mbështetet deri më 30 prill 2026. Mirëmbajtja e degës së mëparshme Node.js 18.x LTS do të zgjasë deri në prill 2025 dhe dega e mëparshme 16.x LTS deri në shtator 2023. Dega 14.x LTS do të ndalohet më 30 prill dhe dega e përkohshme Node.js 19.x më 1 qershor.

Përmirësimet kryesore:

  • Motori V8 është përditësuar në versionin 11.3, i cili përdoret në Chromium 113. Nga ndryshimet në krahasim me degën Node.js 19, e cila përdorte motorin Chromium 107, funksionet String.prototype.isWellFormed dhe toWellFormed, Array.prototype dhe metodat TypedArray.prototype për të punuar me kopjen në ndryshimin e objekteve Array dhe TypedArray, flamuri "v" në RegExp, mbështetje për ndryshimin e madhësisë së ArrayBuffer dhe rritjen e madhësisë së SharedArrayBuffer, thirrje tail në WebAssembly.
  • Propozohet një mekanizëm eksperimental i Modelit të Lejeve që ju lejon të kufizoni aksesin në burime të caktuara gjatë ekzekutimit. Mbështetja e modelit të lejeve aktivizohet duke specifikuar flamurin "--experimental-permission" kur ekzekutohet. Në zbatimin fillestar, u propozuan opsione për të kufizuar hyrjen e shkrimit (--lejoj-fs-shkruaj) dhe leximin (--lejo-fs-leximin) në pjesë të caktuara të FS, proceset e fëmijëve (--lejoj-fs-procesi) , shtesat (--no-addons ) dhe temat (--allow-worker). Për shembull, për të lejuar shkrimin në drejtorinë /tmp dhe leximin e skedarit /home/index.js, mund të specifikoni: 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 për modulet e jashtme ECMAScript (ESM) të ngarkuara nëpërmjet opsionit "--experimental-loader" ekzekutohen tani në një thread të veçantë, të izoluar nga filli kryesor, i cili eliminon kryqëzimin e kodit të aplikacionit dhe moduleve të ngarkuara ESM. Ngjashëm me shfletuesit, metoda import.meta.resolve() tani ekzekutohet në mënyrë sinkrone kur thirret nga brenda një aplikacioni. Në një nga degët e ardhshme të Node.js, mbështetja e ngarkimit të ESM është planifikuar të zhvendoset në kategorinë e veçorive të qëndrueshme.
  • Moduli node:test (test_runner), i krijuar për të krijuar dhe ekzekutuar teste JavaScript që kthejnë rezultatet në formatin TAP (Test Anything Protocol), është zhvendosur në stabil.
  • Është formuar një ekip i veçantë i performancës, i cili, në përgatitje për degën e re, ka punuar për të shpejtuar komponentë të ndryshëm të kohës së funksionimit, duke përfshirë analizimin e URL-ve, fetch() dhe EventTarget. Për shembull, shpenzimet e përgjithshme të inicializimit të EventTarget janë përgjysmuar, performanca e metodës URL.canParse() është përmirësuar ndjeshëm dhe efikasiteti i kohëmatësve është përmirësuar. Për më tepër, lëshimi i një analizuesi URL me performancë të lartë - Ada 2.0, i shkruar në C ++, përfshihet në përbërje.
  • Ka vazhduar zhvillimi i një veçorie eksperimentale për dërgimin e aplikacioneve në formën e një skedari të vetëm të ekzekutueshëm (SEA, Single Executable Applications). Krijimi i një skedari të ekzekutueshëm tani kërkon zëvendësimin e një blob të krijuar nga një skedar konfigurimi JSON (në vend që të zëvendësohet një skedar JavaScript).
  • Përmirësimi i përputhshmërisë së Web Crypto API me implementime nga projekte të tjera.
  • U shtua mbështetje zyrtare për Windows në sistemet ARM64.
  • Mbështetja e vazhdueshme për shtesat WASI (WebAssembly System Interface) për krijimin e aplikacioneve të pavarura WebAssembly. U hoq nevoja për të specifikuar një flamur të veçantë të linjës komanduese për të mundësuar mbështetjen WASI.

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