Kutolewa kwa JavaScript Node.js 17.0 ya upande wa seva

Node.js 17.0, jukwaa la kuendesha programu za mtandao katika JavaScript, ilitolewa. Node.js 17.0 ni tawi la usaidizi la kawaida ambalo litaendelea kupokea masasisho hadi Juni 2022. Katika siku zijazo, uimarishaji wa tawi la Node.js 16 utakamilika, ambao utapokea hali ya LTS na utasaidiwa hadi Aprili 2024. Matengenezo ya tawi la awali la LTS la Node.js 14.0 litaendelea hadi Aprili 2023, na mwaka mmoja kabla ya tawi la mwisho la LTS 12.0 hadi Aprili 2022.

Maboresho kuu:

  • Injini ya V8 imesasishwa hadi toleo la 9.5.
  • Utekelezaji wa vibadala vya API msingi kulingana na matumizi ya kiolesura cha kompyuta kisicholingana cha Promise umeendelea. Kando na API za Ahadi za Vipima Muda na Ahadi za Mikondo zilizotolewa hapo awali, Node.js 17.0 inatanguliza API ya Readline Promise ya kusoma data mstari kwa mstari kwa kutumia sehemu ya mstari wa kusoma. import * kama mstari wa kusoma kutoka 'node:readline/promises'; agiza {stdin kama pembejeo, stdout kama pato } kutoka kwa 'mchakato'; const rl = readline.createInterface ({ pembejeo, pato }); const answer = await rl.question('Unaonaje kuhusu Node.js?'); console.log('Asante kwa maoni yako muhimu: ${answer}'); rl.funga();
  • Maktaba ya OpenSSL iliyotolewa imesasishwa hadi toleo la 3.0 (uma quictls/openssl iliyo na usaidizi wa itifaki ya QUIC umewashwa inatumika).
  • Imewasha toleo la Node.js kuonyeshwa katika ufuatiliaji wa rafu ambao hutolewa iwapo kutatokea hitilafu mbaya zinazosababisha programu kusitishwa.

Zaidi ya hayo, tunaweza kutaja kuondolewa kwa udhaifu mbili katika matawi ya sasa ya Node.js (CVE-2021-22959, CVE-2021-22960), ambayo hufanya iwezekane kutekeleza mashambulizi ya "HTTP Request Smuggling" (HRS), ambayo kuturuhusu kujumuisha yaliyomo katika maombi ya watumiaji wengine yaliyochakatwa katika uzi ule ule kati ya mandhari ya mbele na ya nyuma (kwa mfano, msimbo hasidi wa JavaScript unaweza kuingizwa kwenye kipindi cha mtumiaji mwingine). Maelezo yatafunuliwa baadaye, lakini kwa sasa tunajua tu kwamba matatizo yanasababishwa na utunzaji usio sahihi wa nafasi kati ya jina la kichwa cha HTTP na koloni, pamoja na utunzaji tofauti wa kurudi kwa gari na wahusika wa malisho ya mstari kwenye kizuizi cha parameta kinachotumiwa wakati wa kusambaza. mwili wa ombi katika sehemu katika hali ya "chunked" "

Hebu tukumbuke kwamba jukwaa la Node.js linaweza kutumika kwa usaidizi wa seva wa programu za Wavuti na kwa kuunda programu za kawaida za mtandao wa mteja na seva. Ili kupanua utendakazi wa programu za Node.js, mkusanyiko mkubwa wa moduli umeandaliwa, ambayo unaweza kupata moduli na utekelezaji wa HTTP, SMTP, XMPP, DNS, FTP, IMAP, seva za POP3 na wateja, moduli za ujumuishaji. yenye mifumo mbalimbali ya wavuti, vidhibiti vya WebSocket na Ajax , viunganishi vya DBMS (MySQL, PostgreSQL, SQLite, MongoDB), injini za violezo, injini za CSS, utekelezaji wa algoriti za kriptografia na mifumo ya uidhinishaji (OAuth), vichanganuzi vya XML.

Ili kushughulikia idadi kubwa ya maombi sawia, Node.js hutumia muundo wa utekelezaji wa msimbo usiolingana kulingana na uchakataji wa tukio lisilozuia na kufafanua vidhibiti vya urejeshaji simu. Mbinu zinazotumika za miunganisho ya kuzidisha ni pamoja na epoll, kqueue, /dev/poll, na select. Kwa uunganisho wa kuzidisha, maktaba ya libuv hutumiwa, ambayo ni nyongeza ya libev kwenye mifumo ya Unix na kwa IOCP kwenye Windows. Maktaba ya libeio inatumiwa kuunda mkusanyiko wa nyuzi, na c-ares imeunganishwa kutekeleza hoja za DNS katika hali isiyozuia. Simu zote za mfumo zinazosababisha kuzuia hutekelezwa ndani ya dimbwi la nyuzi kisha, kama vidhibiti vya mawimbi, hupitisha matokeo ya kazi yao kupitia bomba lisilo na jina. Utekelezaji wa msimbo wa JavaScript unahakikishwa kupitia matumizi ya injini ya V8 iliyotengenezwa na Google (kwa kuongeza, Microsoft inatengeneza toleo la Node.js kwa injini ya Chakra-Core).

Kwa msingi wake, Node.js ni sawa na Perl AnyEvent, Ruby Event Machine, mifumo ya Python Twisted na utekelezaji wa matukio katika Tcl, lakini kitanzi cha tukio katika Node.js kimefichwa kutoka kwa msanidi programu na kinafanana na usindikaji wa tukio katika programu ya wavuti. inayoendesha katika kivinjari. Wakati wa kuandika programu za node.js, ni muhimu kuzingatia mahususi ya programu inayoendeshwa na tukio, kwa mfano, badala ya kufanya "var result = db.query("chagua..");" kwa kusubiri kukamilika kwa kazi na usindikaji unaofuata wa matokeo, Node.js hutumia kanuni ya utekelezaji wa asynchronous, i.e. msimbo hubadilishwa kuwa "db.query("chagua..", chaguo la kukokotoa (matokeo) {uchakataji wa matokeo});", ambapo udhibiti utapita mara moja hadi kwenye msimbo zaidi, na matokeo ya hoja yatachakatwa data inapowasili.

Chanzo: opennet.ru

Kuongeza maoni