Node.js 17.0, platforma tÄ«mekļa lietojumprogrammu izpildei JavaScript valodÄ, ir uzsÄkta. Node.js 17.0 pieder parastÄs atbalsta filiÄlei, kuras atjauninÄjumi tiks izlaisti lÄ«dz 2022. gada jÅ«nijam. NÄkamo dienu laikÄ tiks pabeigta Node.js 16 filiÄles stabilizÄcija, kas iegÅ«s LTS statusu un tiks atbalstÄ«ta lÄ«dz 2024. gada aprÄ«lim. IepriekÅ”ÄjÄs LTS filiÄles Node.js 14.0 atbalsts ilgs lÄ«dz 2023. gada aprÄ«lim, bet pirms divÄm LTS filiÄlÄm 12.0 lÄ«dz 2022. gada aprÄ«lim.
Galvenie uzlabojumi:
- V8 dzinÄjs ir atjauninÄts uz 9.5 versiju.
- ŠŃоГолжена ŃŠµŠ°Š»ŠøŠ·Š°ŃŠøŃ Š²Š°ŃŠøŠ°Š½Ńов базового API, Š¾ŃŠ½Š¾Š²Š°Š½Š½ŃŃ Š½Š° ŠøŃŠæŠ¾Š»ŃŠ·Š¾Š²Š°Š½ŠøŠø ŠøŠ½ŃŠµŃŃŠµŠ¹Ńа Š°ŃŠøŠ½Ń ŃŠ¾Š½Š½ŃŃ Š²ŃŃŠøŃлений Promise. РГополнение Šŗ ŃŠ°Š½ŠµŠµ ŠæŃŠµŠ“Š»Š¾Š¶ŠµŠ½Š½ŃŠ¼ API Timers Promises Šø Streams Promises в Node.js 17.0 ŠæŃŠµŠ“ŃŃŠ°Š²Š»ŠµŠ½ API Readline Promise Š“Š»Ń ŠæŠ¾ŃŃŃŠ¾Ńного ŃŃŠµŠ½ŠøŃ ГаннŃŃ Ń ŠøŃŠæŠ¾Š»ŃŠ·Š¾Š²Š°Š½ŠøŠµŠ¼ Š¼Š¾Š“ŃŠ»Ń readline. import * as readline from ānode:readline/promisesā; import { stdin as input, stdout as output } from āprocessā; const rl = readline.createInterface({ input, output }); const answer = await rl.question(āWhat do you think of Node.js?ā); console.log(āThank you for your valuable feedback: ${answer}ā); rl.close();
- IekļautÄ OpenSSL bibliotÄka ir atjauninÄta uz 3.0 versiju (ir izmantots quictls/openssl forks ar iekļautu QUIC protokola atbalstu).
- Node.js versijas izvadīŔana ir nodroÅ”inÄta steka izsekojumos, kas tiek izvadÄ«ti kritisku kļūdu gadÄ«jumÄ, kas noved pie lietojumprogrammas darbÄ«bas pÄrtraukÅ”anas.
Papildus jÄatzÄ«mÄ, ka aktuÄlajÄs Node.js filiÄlÄs ir novÄrstas divas ievainojamÄ«bas (CVE-2021-22959, CVE-2021-22960), kas ļauj veikt uzbrukumus āHTTP Request Smugglingā (HRS) veidÄ, kas ļauj, nosÅ«tot speciÄli izstrÄdÄtus klientu pieprasÄ«jumus, iekļauties citu lietotÄju pieprasÄ«jumu saturÄ, kas tiek apstrÄdÄti tajÄ paÅ”Ä plÅ«smÄ starp frontend un backend (piemÄram, ir iespÄjams ievietot ļaunprÄtÄ«gu JavaScript kodu cita lietotÄja sesijÄ). SÄ«kÄka informÄcija tiks atklÄta vÄlÄk, bet pagaidÄm zinÄms, ka problÄmas ir saistÄ«tas ar nepareizu atstarpeÅu apstrÄdi starp HTTP galvenes nosaukumu un koloni, kÄ arÄ« atŔķirÄ«gu apstrÄdi ar atgrieÅ”anÄs kursu un jaunu rindu zÄ«mÄm parametru blokÄ, kas tiek izmantots, lai nosÅ«tÄ«tu pieprasÄ«juma saturu pa daļÄm āchunkedā režīmÄ.
AtgÄdinÄm, ka Node.js platforma var tikt izmantota gan tÄ«mekļa lietojumprogrammu serveru atbalstam, gan parasto klientu un serveru tÄ«mekļa programmu izstrÄdei. Lai paplaÅ”inÄtu lietojumprogrammu funkcionalitÄti Node.js, ir sagatavota liela moduļu kolekcija, kurÄ var atrast moduļus ar realizÄcijÄm serveriem un HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3 klientiem, moduļiem integrÄÅ”anai ar dažÄdiem tÄ«mekļa ietvariem, WebSocket un Ajax apstrÄdÄtÄjiem, datubÄzu (MySQL, PostgreSQL, SQLite, MongoDB) savienotÄjiem, veidÅu motorus, CSS dzinÄjus, kriptovalÅ«tu algoritmu realizÄcijas un autorizÄcijas sistÄmas (OAuth), XML parsÄtÄjus.
Lai nodroÅ”inÄtu lielÄ skaita vienlaicÄ«gu pieprasÄ«jumu apstrÄdi, Node.js izmanto asynchrono koda palaiÅ”anas modeli, kas balstÄs uz notikumu apstrÄdi bez bloÄ·ÄÅ”anas un callback-handler definÄÅ”anu. Savienojumu multiplexÄÅ”anai tiek atbalstÄ«ti tÄdi paÅÄmieni kÄ epoll, kqueue, /dev/poll un select. Savienojumu multiplexÄÅ”anai tiek izmantota bibliotÄka libuv, kas ir virs libev Unix sistÄmÄs un IOCP Windows. Lai izveidotu pavedienu grupu (thread pool), tiek izmantota bibliotÄka libeio, bet DNS pieprasÄ«jumu izpilde bez bloÄ·ÄÅ”anas ir integrÄta ar c-ares. Visi sistÄmas izsaukumi, kas izraisa bloÄ·ÄÅ”anu, tiek veikti pavedienu grupÄ, un, tÄpat kÄ signÄlu apstrÄdÄtÄji, tie atgriež rezultÄtu caur nenosaukto cauruli (pipe). JavaScript koda izpilde tiek nodroÅ”inÄta, izmantojot Google izstrÄdÄtÄ V8 dzinÄja iesaisti (papildus Microsoft attÄ«sta Node.js versiju ar Chakra-Core dzinÄju).
SavÄ bÅ«tÄ«bÄ Node.js ir lÄ«dzÄ«gs Perl AnyEvent, Ruby Event Machine, Python Twisted un Tcl notikumu ievieÅ”anai, taÄu notikumu apstrÄdes cikls (event loop) Node.js ir slÄpts no izstrÄdÄtÄja un atgÄdina notikumu apstrÄdi web lietojumprogrammÄ, kas darbojas pÄrlÅ«kprogrammÄ. IzstrÄdÄjot lietojumprogrammas node.js, jÄÅem vÄrÄ notikumu orientÄtas programmÄÅ”anas Ä«patnÄ«bas, piemÄram, vietÄ, lai veiktu āvar result = db.query(āselect..ā);ā ar gaidīŔanu rezultÄtu apstrÄdei, Node.js izmanto asinkronÄs izpildes principu, t.i., kodu pÄrveido ādb.query(āselect..ā, function (result) {rezultÄta apstrÄde});ā, kur kontrole nekavÄjoties pÄries uz sekojoÅ”o kodu, un pieprasÄ«juma rezultÄts tiks apstrÄdÄts, kad dati tiks saÅemti.
Avots: opennet.lv
