Serveripoolne JavaScript Node.js 17.0 väljalase

Toimunud on JavaScriptis võrgurakenduste käivitamise platvormi Node.js 17.0 väljalase. Node.js 17.0 on tavaline tugiharu, mida värskendatakse kuni 2022. aasta juunini. Lähipäevil jõuab lõpule Node.js 16 haru stabiliseerimine, mis saab LTS staatuse ja mida toetatakse 2024. aasta aprillini. Eelmise Node.js 14.0 LTS filiaali hooldus kestab 2023. aasta aprillini ja eelmise 12.0 LTS haru 2022. aasta aprillini.

Peamised täiustused:

  • V8 mootor on värskendatud versioonile 9.5.
  • Jätkatud on Promise asünkroonse andmetöötlusliidese kasutamisel põhinevate baas-API variantide juurutamine. Lisaks varem pakutud taimerite lubaduste ja voogude lubaduste API-dele, tutvustab Node.js 17.0 Readline lubaduse API-d andmete rida-realt lugemiseks lugemisliini mooduli abil. import * readline-na alates 'node:readline/promises'; import { stdin sisendiks, stdout väljundiks } 'protsessist'; const rl = readline.createInterface({ sisend, väljund }); const answer = oodake rl.question('Mida sa arvad Node.js-st?'); console.log('Täname väärtusliku tagasiside eest: ${answer}'); rl.close();
  • Kaasasolev OpenSSL-i teek on värskendatud versioonile 3.0 (kasutades quictls/openssl-kahvlit koos lubatud QUIC-protokolli toega).
  • Veenduge, et Node.js-i versioon kuvatakse virnajälgedes saatuslike vigade korral, mis põhjustavad rakenduse töö lõpetamise.

Lisaks võib mainida kahe haavatavuse kõrvaldamist Node.js praegustest harudest (CVE-2021-22959, CVE-2021-22960), mis võimaldavad sooritada HTTP Request Smuggling (HRS) klassi ründeid, mis võimaldavad spetsiaalselt loodud kliendipäringute saatmise kaudu kiiluda teiste kasutajate päringute sisusse, mida töödeldakse samas lõimes esi- ja taustaprogrammi vahel (näiteks võite saavutada pahatahtliku JavaScripti koodi asendamise teise kasutaja seansis). Üksikasjad selguvad hiljem, kuid praegu on teada vaid see, et probleemide põhjuseks on HTTP päise nime ja kooloni vaheliste tühikute vale käsitsemine, samuti läbimisel kasutatavas parameetriplokis kasutatavas kelgu tagastus- ja reavahetuse märkide erinev käsitsemine. päringu keha tükkidena "tükitatud" režiimis.

Tuletame meelde, et Node.js platvormi saab kasutada nii veebirakenduste serverihoolduseks kui ka tavaliste kliendi- ja serverivõrguprogrammide loomiseks. Node.js-i rakenduste funktsionaalsuse laiendamiseks on koostatud suur moodulite kogu, millest leiate HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3 serverite ja klientide juurutusega mooduleid, integreerimismooduleid erinevate veebiraamistike, WebSocketi ja Ajaxi töötlejate, DBMS-i pistikute (MySQL, PostgreSQL, SQLite, MongoDB), mallimootorite, CSS-mootorite, krüptoalgoritmide ja autoriseerimissüsteemide (OAuth) juurutuste, XML-i parseritega.

Suure hulga paralleelsete päringute töötlemise tagamiseks kasutab Node.js asünkroonse koodi täitmismudelit, mis põhineb sündmuste mitteblokeerimisel ja tagasihelistajate definitsioonil. Ühenduste multipleksimise toetatud meetodid on epoll, kqueue, /dev/poll ja select. Ühenduse multipleksimiseks kasutatakse libuv teeki, mis on lisandmoodul libevi jaoks Unixi süsteemides ja IOCP jaoks Windowsis. Libeio teeki kasutatakse lõimekogumi loomiseks ja c-ares on integreeritud DNS-päringute tegemiseks mitteblokeerivas režiimis. Kõik blokeerimist põhjustavad süsteemikutsed teostatakse lõimekogumi sees ja seejärel edastavad sarnaselt signaalikäsitlejatele oma töö tulemuse nimetu toru (toru) kaudu tagasi. JavaScripti koodi täitmine on tagatud Google’i poolt välja töötatud V8 mootori kasutamise kaudu (lisaks arendab Microsoft Chakra-Core mootoriga Node.js versiooni).

Oma põhiolemuselt sarnaneb Node.js Perl AnyEvent, Ruby Event Machine, Python Twisted raamistikega ja Tcl sündmuste juurutusega, kuid Node.js-i sündmusesilmus on arendaja eest peidetud ja sarnaneb sündmuste käsitlemisega töötavas veebirakenduses brauseris. Node.js-i rakenduste kirjutamisel peate arvestama näiteks sündmustepõhise programmeerimise spetsiifikaga, selle asemel, et teha "var result = db.query("select..");" töö valmimise ootamisega ja sellele järgneva tulemuste töötlemisega kasutab Node.js asünkroonse täitmise põhimõtet, st. kood teisendatakse "db.query("select..", funktsiooniks (result) {tulemuse töötlemine});", milles juhtimine läheb koheselt edasi edasisele koodile ja päringu tulemust töödeldakse andmete saabudes.

Allikas: opennet.ru

Lisa kommentaar