Lëshimi i platformës JavaScript në anën e serverit Node.js 14.0
Ndodhi lirimin Nyja.js 14.0,platforma për ekzekutimin e aplikacioneve të rrjetit në JavaScript. Node.js 14.0 është një degë e mbështetjes afatgjatë, por ky status do të caktohet vetëm në tetor, pas stabilizimit. Node.js 14.0 do të mbështetet të kryhet deri në prill 2023. Mirëmbajtja e degës së mëparshme LTS të Node.js 12.0 do të zgjasë deri në prill 2022 dhe një vit përpara degës së fundit LTS 10.0 deri në prill 2021. Mbështetja për degën e skenës 13.x do të përfundojë në qershor të këtij viti.
Aftësia për të gjeneruar në fluturim ose pas ndodhjes së ngjarjeve të caktuara është stabilizuar raportet diagnostike, të cilat shfaqin ngjarje që ndihmojnë në diagnostikimin e problemeve të tilla si përplasjet, degradimi i performancës, rrjedhjet e kujtesës, ngarkesa e madhe e CPU-së, dalje e papritur e gabimeve, etj.
U shtua mbështetje eksperimentale API Hapësira ruajtëse lokale e asinkronizuar me zbatimin e klasës AsyncLocalStorage, e cila mund të përdoret për të krijuar gjendje asinkrone me mbajtës të bazuar në thirrjet dhe premtimet e kthimit të thirrjeve. AsyncLocalStorage ju lejon të ruani të dhëna gjatë përpunimit të një kërkese në ueb, që të kujton hapësirën e ruajtjes lokale në gjuhë të tjera.
U hoq mesazhi paralajmërues për veçorinë eksperimentale gjatë ngarkimit moduletECMAScript 6 lidhur dhe eksportuar duke përdorur deklaratat e importit dhe eksportit. Në të njëjtën kohë, zbatimi i moduleve ESM në vetvete mbetet eksperimental.
Motori V8 i përditësuar në version 8.1 (1, 2, 3), i cili përfshin optimizime të reja të performancës dhe veçori të tilla si operatori i ri i lidhjes logjike "??" (kthen operandin e djathtë nëse operandi i majtë është NULL ose i papërcaktuar, dhe anasjelltas), operatori "?." për një kontroll një herë të të gjithë zinxhirit të pronave ose thirrjeve (për shembull, "db?.user?.name?.length" pa kontrolle paraprake), metodën Intl.DisplayName për marrjen e emrave të lokalizuar, etj.
U krye një rishikim i API-së Streams, që synonte përmirësimin e qëndrueshmërisë së API-ve të Streams dhe eliminimin e dallimeve në sjelljen e pjesëve bazë të Node.js. Për shembull, sjellja e http.OutgoingMessage është afër stream.Writable dhe net.Socket është e ngjashme me stream.Duplex. Opsioni autoDestroy është vendosur në "true" si parazgjedhje, që do të thotë thirrja "_destroy" pas përfundimit.
U shtua mbështetje eksperimentale API WASI (Ndërfaqja e sistemit WebAssembly), duke siguruar ndërfaqe softuerike për ndërveprim të drejtpërdrejtë me sistemin operativ (POSIX API për të punuar me skedarë, priza, etj.).
Le të kujtojmë se platforma Node.js mund të përdoret si për mbështetjen e aplikacioneve në ueb nga ana e serverit, ashtu edhe për krijimin e programeve të zakonshme të rrjetit të klientit dhe serverit. Për të zgjeruar funksionalitetin e aplikacioneve për Node.js, një numër i madh i koleksioni i moduleve, 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, trajtues WebSocket dhe Ajax, lidhës me DBMS (MySQL, PostgreSQL, SQLite , MongoDB ), motorët e shablloneve, motorët CSS, implementimet e algoritmeve kriptografike dhe sistemet e autorizimit (OAuth), analizuesit XML.
Për të trajtuar një numër të madh kërkesash paralele, Node.js përdor një model të ekzekutimit të kodit asinkron bazuar në përpunimin e ngjarjeve jo-bllokuese dhe përcaktimin e mbajtësve të kthimit të thirrjes. Metodat e mbështetura për lidhjet e multipleksimit përfshijnë epoll, kqueue, /dev/poll dhe select. Biblioteka përdoret për lidhje të shumëfishta libuv, e cila është një superstrukturë mbi liroj në sistemet Unix dhe mbi IOCP në Windows. Një bibliotekë përdoret për të krijuar një grup thread libeio, për kryerjen e pyetjeve DNS në modalitetin jo-bllokues është i integruar c-ares. Të gjitha thirrjet e sistemit që shkaktojnë bllokim ekzekutohen brenda grupit të thread dhe më pas, si mbajtësit e sinjalit, kalojnë rezultatin e punës së tyre përsëri përmes një tubi pa emër. Ekzekutimi i kodit JavaScript sigurohet nëpërmjet përdorimit të një motori të zhvilluar nga Google V8 (Përveç kësaj, Microsoft po zhvillon një version të Node.js me motorin Chakra-Core).
Në thelbin e tij, Node.js është i ngjashëm me kornizat Perl AnyEvent, Makina e ngjarjeve rubin, Python Twisted и zbatimi ngjarjet në Tcl, por cikli i ngjarjeve në Node.js është i fshehur nga zhvilluesi dhe i ngjan trajtimit të ngjarjeve në një aplikacion ueb që ekzekutohet në një shfletues. Kur shkruani aplikacione për node.js, është e nevojshme të merren 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 e mëvonshëm të rezultateve, Node.js përdor parimin e ekzekutimit asinkron, d.m.th. kodi transformohet në “db.query(“select..”, funksion (rezultat) {rezultat processing});”, në të cilin kontrolli do të kalojë menjëherë në kodin e mëtejshëm dhe rezultati i pyetjes do të përpunohet me mbërritjen e të dhënave. .