Lëshimi i platformës JavaScript në anën e serverit Node.js 17.0

Node.js 17.0, një platformë për ekzekutimin e aplikacioneve të rrjetit në JavaScript, u ​​lëshua. Node.js 17.0 është një degë e rregullt mbështetëse që do të vazhdojë të marrë përditësime deri në qershor 2022. Në ditët në vijim do të përfundojë stabilizimi i degës Node.js 16, e cila do të marrë statusin LTS dhe do të mbështetet deri në prill 2024. Mirëmbajtja e degës së mëparshme LTS të Node.js 14.0 do të zgjasë deri në prill 2023 dhe një vit përpara degës së fundit LTS 12.0 deri në prill 2022.

Përmirësimet kryesore:

  • Motori V8 është përditësuar në versionin 9.5.
  • Zbatimi i varianteve të API-së bazë të bazuar në përdorimin e ndërfaqes kompjuterike asinkrone Promise ka vazhduar. Përveç API-ve të ofruara më parë të Timers Promises dhe Streams Promises, Node.js 17.0 prezanton Readline Promise API për leximin e të dhënave rresht pas rreshti duke përdorur modulin Readline. importo * si linjë leximi nga 'node:readline/promises'; importoni { stdin si hyrje, stdout si dalje } nga 'procesi'; const rl = readline.createInterface({ hyrje, dalje }); const answer = await rl.question('Çfarë mendoni për Node.js?'); console.log('Faleminderit për komentet tuaja të vlefshme: ${answer}'); rl.close();
  • Biblioteka e ofruar OpenSSL është përditësuar në versionin 3.0 (përdoret një pirun quictls/openssl me mbështetjen e protokollit QUIC të aktivizuar).
  • Aktivizoi që versioni Node.js të shfaqet në gjurmët e stivës që dalin në rast të gabimeve fatale që shkaktojnë mbylljen e aplikacionit.

Për më tepër, mund të përmendim eliminimin e dy dobësive në degët aktuale të Node.js (CVE-2021-22959, CVE-2021-22960), të cilat bëjnë të mundur kryerjen e sulmeve “HTTP Request Smuggling” (HRS), të cilat na lejoni të futemi në përmbajtjen e kërkesave të përdoruesve të tjerë të përpunuara në të njëjtën fillesë midis frontendit dhe backend-it (për shembull, kodi keqdashës JavaScript mund të futet në sesionin e një përdoruesi tjetër). Detajet do të zbulohen më vonë, por tani për tani ne e dimë vetëm se problemet janë shkaktuar nga trajtimi i gabuar i hapësirave midis emrit të kokës HTTP dhe dy pika, si dhe trajtimi i ndryshëm i karaktereve të kthimit të karrocës dhe linjës në bllokun e parametrave të përdorur gjatë transmetimit. trupi i kërkesës në pjesë në modalitetin "i copëtuar" "

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, ë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, trajtues WebSocket dhe Ajax, lidhës me DBMS (MySQL, PostgreSQL, SQLite, MongoDB), motorë shabllonesh, motorë CSS, zbatime të algoritmeve kriptografike 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