Servera puses JavaScript Node.js 17.0 laidiens

Ir notikusi Node.js 17.0, platformas tīkla lietojumprogrammu izpildei JavaScript formātā, izlaišana. Node.js 17.0 ir regulāra atbalsta filiāle ar atjauninājumiem līdz 2022. gada jūnijam. Tuvākajās dienās tiks pabeigta Node.js 16 filiāles stabilizācija, kas saņems LTS statusu un tiks atbalstīta līdz 2024. gada aprīlim. Iepriekšējās Node.js 14.0 LTS filiāles apkope ilgs līdz 2023. gada aprīlim, bet iepriekšējā 12.0 LTS filiāle līdz 2022. gada aprīlim.

Galvenie uzlabojumi:

  • V8 dzinējs ir atjaunināts uz versiju 9.5.
  • Turpinājās bāzes API variantu ieviešana, pamatojoties uz Promise asinhronās skaitļošanas saskarnes izmantošanu. Papildus iepriekš piedāvātajām Timers Promises un Streams Promises API, Node.js 17.0 ievieš Readline Promise API datu lasīšanai rindiņu pa rindiņai, izmantojot readline moduli. importēt * kā readline no 'node:readline/promises'; importēt { stdin kā ievadi, stdout kā izvadi } no 'process'; const rl = readline.createInterface({ ievade, izvade }); const answer = gaidīt rl.question('Ko jūs domājat par Node.js?'); console.log('Paldies par vērtīgajām atsauksmēm: ${answer}'); rl.close();
  • Piegādātā OpenSSL bibliotēka ir atjaunināta uz versiju 3.0 (izmantojot quictls/openssl fork ar iespējotu QUIC protokola atbalstu).
  • Pārliecinieties, ka Node.js versija tiek parādīta steka trasēs, ja rodas fatālas kļūdas, kuru dēļ lietojumprogramma tiek pārtraukta.

Papildus var minēt divu ievainojamību novēršanu pašreizējās Node.js filiālēs (CVE-2021-22959, CVE-2021-22960), kas ļauj veikt HTTP Request Smuggling (HRS) klases uzbrukumus, kas ļaut, nosūtot īpaši izstrādātus klientu pieprasījumus, iekļauties citu lietotāju pieprasījumu saturā, kas apstrādāti tajā pašā pavedienā starp priekšgalu un aizmugursistēmu (piemēram, varat panākt ļaunprātīga JavaScript koda aizstāšanu cita lietotāja sesijā). Sīkāka informācija tiks atklāta vēlāk, taču pagaidām zināms tikai tas, ka problēmas rada nepareiza atstarpju apstrāde starp HTTP galvenes nosaukumu un kolu, kā arī atšķirīga pārvietošanās ar karieta atgriešanas un rindas padeves rakstzīmēm parametru blokā, kas tiek izmantots, nododot. pieprasījuma pamatteksts gabalos "gabalos" režīmā.

Atgādinām, ka Node.js platformu var izmantot gan Web aplikāciju serveru uzturēšanai, gan parastu klientu un serveru tīkla programmu izveidei. Lai paplašinātu Node.js aplikāciju funkcionalitāti, ir sagatavota liela moduļu kolekcija, kurā var atrast moduļus ar HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3 serveru un klientu ieviešanu, moduļus integrācijai ar dažādiem tīmekļa ietvariem, WebSocket un Ajax apdarinātājiem, DBVS savienotājiem (MySQL, PostgreSQL, SQLite, MongoDB), veidņu dzinējiem, CSS dzinējiem, kriptogrāfijas algoritmu un autorizācijas sistēmu (OAuth) implementācijām, XML parsētājiem.

Lai nodrošinātu liela skaita paralēlu pieprasījumu apstrādi, Node.js izmanto asinhronā koda izpildes modeli, kura pamatā ir notikumu nebloķējoša apstrāde un atzvanīšanas apstrādātāju definīcija. Atbalstītās savienojumu multipleksēšanas metodes ir epoll, kqueue, /dev/poll un select. Savienojuma multipleksēšanai tiek izmantota libuv bibliotēka, kas ir libev papildinājums Unix sistēmās un IOCP operētājsistēmā Windows. Libeio bibliotēka tiek izmantota, lai izveidotu pavedienu pūlu, un c-ares ir integrēta, lai veiktu DNS vaicājumus nebloķējošā režīmā. Visi sistēmas izsaukumi, kas izraisa bloķēšanu, tiek izpildīti pavedienu pūlā un pēc tam, tāpat kā signālu apstrādātāji, pārsūta sava darba rezultātu atpakaļ caur nenosauktu cauruli (cauruli). JavaScript koda izpilde tiek nodrošināta, izmantojot Google izstrādāto V8 dzinēju (turklāt Microsoft izstrādā Node.js versiju ar Chakra-Core dzinēju).

Savā pamatā Node.js ir līdzīgs Perl AnyEvent, Ruby Event Machine, Python Twisted ietvariem un Tcl notikumu ieviešanai, taču notikuma cilpa programmā Node.js ir paslēpta no izstrādātāja un atgādina notikumu apstrādi tīmekļa lietojumprogrammā, kas darbojas. pārlūkprogrammā. Rakstot lietojumprogrammas node.js, ir jāņem vērā, piemēram, notikumu vadītas programmēšanas specifika, nevis jādara "var rezultāts = db.query("select..");" ar darba pabeigšanas gaidīšanu un sekojošu rezultātu apstrādi Node.js izmanto asinhronās izpildes principu, t.i. kods tiek pārveidots par "db.query("select..", funkcija (rezultāts) {rezultāta apstrāde});", kurā vadība uzreiz pāries tālākam kodam, un vaicājuma rezultāts tiks apstrādāts līdz ar datu saņemšanu.

Avots: opennet.ru

Pievieno komentāru