Servilflanka JavaScript Node.js 17.0 eldono

Node.js 17.0, platformo por ruli retajn aplikojn en JavaScript, estis publikigita. Node.js 17.0 estas regula subtena branĉo, kiu daŭre ricevos ĝisdatigojn ĝis junio 2022. En la venontaj tagoj, la stabiligo de la branĉo Node.js 16 estos kompletigita, kiu ricevos LTS-statuson kaj estos subtenata ĝis aprilo 2024. Prizorgado de la antaŭa LTS-branĉo de Node.js 14.0 daŭros ĝis aprilo 2023, kaj la jaron antaŭ la lasta LTS-filio 12.0 ĝis aprilo 2022.

Ĉefaj plibonigoj:

  • La V8-motoro estis ĝisdatigita al versio 9.5.
  • La efektivigo de variantoj de la baza API bazita sur la uzo de la Promise nesinkrona komputika interfaco daŭris. Krom la antaŭe ofertitaj Timers Promises kaj Streams Promises API-oj, Node.js 17.0 enkondukas la Readline Promise API por legi datumlinion per linio uzante la readline-modulon. importi * kiel readline de 'node:readline/promises'; import { stdin kiel enigo, stdout kiel eligo } el 'procezo'; const rl = readline.createInterface ({ enigo, eligo }); const respondo = await rl.question('Kion vi pensas pri Node.js?'); console.log('Dankon pro via valora rimarko: ${respondo}'); rl.close();
  • La provizita OpenSSL-biblioteko estis ĝisdatigita al versio 3.0 (quictls/openssl-forko kun QUIC-protokolo-subteno ebligita estas uzata).
  • Ebligis la Node.js-versio por esti montrita en stakspuroj kiuj estas eligitaj en kazo de fatalaj eraroj kiuj kaŭzas la aplikaĵon finiĝi.

Aldone, ni povas mencii la forigon de du vundeblecoj en la nunaj branĉoj de Node.js (CVE-2021-22959, CVE-2021-22960), kiuj ebligas efektivigi atakojn "HTTP Request Smuggling" (HRS), kiuj permesu al ni kojni en la enhavon de la petoj de aliaj uzantoj procesitaj en la sama fadeno inter la fasado kaj backend (ekzemple, malica JavaScript-kodo povas esti enmetita en la seancon de alia uzanto). Detaloj estos malkaŝitaj poste, sed nuntempe ni nur scias, ke la problemoj estas kaŭzitaj de malĝusta uzado de spacoj inter la HTTP-kapa nomo kaj la dupunkto, same kiel malsama uzado de kaleŝoreveno kaj liniofluaj signoj en la parametrobloko uzata dum transdono. la petokorpo en partoj en la "tranĉa" reĝimo "

Ni memoru, ke la platformo Node.js povas esti uzata kaj por servilflanka subteno de Retaj aplikaĵoj kaj por krei ordinarajn klientajn kaj servilojn retajn programojn. Por vastigi la funkciecon de aplikoj por Node.js, granda kolekto de moduloj estis preparita, en kiuj vi povas trovi modulojn kun la efektivigo de HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3-serviloj kaj klientoj, moduloj por integriĝo. kun diversaj retaj kadroj, WebSocket kaj Ajax-traktiloj, konektiloj al DBMS (MySQL, PostgreSQL, SQLite, MongoDB), ŝablonaj motoroj, CSS-motoroj, efektivigoj de kriptografiaj algoritmoj kaj rajtigaj sistemoj (OAuth), XML-analiziloj.

Por certigi la prilaboradon de granda nombro da paralelaj petoj, Node.js uzas nesinkronan kodan ekzekutmodelon bazitan sur ne-bloka evento-traktado kaj la difino de revokaj pritraktiloj. Subtenataj metodoj por multipleksaj konektoj estas epoll, kqueue, /dev/poll, kaj select. Por koneksa multipleksado, la biblioteko libuv estas uzata, kiu estas aldonaĵo por libev ĉe Unikso-sistemoj kaj IOCP ĉe Vindozo. La biblioteko libeio estas uzata por krei fadenan naĝejon, kaj c-ares estas integrita por fari DNS-demandojn en ne-bloka reĝimo. Ĉiuj sistemvokoj kiuj kaŭzas blokadon estas ekzekutitaj ene de la fadena naĝejo kaj tiam, kiel signaltraktantoj, translokigas la rezulton de sia laboro reen tra nenomita pipo (pipo). La ekzekuto de JavaScript-kodo estas provizita per la uzo de la V8-motoro evoluigita de Guglo (krome, Microsoft disvolvas version de Node.js kun la Chakra-Core-motoro).

En ĝia kerno, Node.js estas simila al la Perl AnyEvent, Ruby Event Machine, Python Twisted kadroj, kaj la Tcl-okazaĵefektivigo, sed la eventa buklo en Node.js estas kaŝita de la programisto kaj similas evento-traktadon en TTT-aplikaĵo funkcianta. en retumilo. Kiam vi verkas aplikaĵojn por node.js, vi devas konsideri la specifaĵojn de okazaĵa programado, ekzemple, anstataŭ fari "var result = db.query ("select..");" kun atendado de fino de laboro kaj posta prilaborado de rezultoj, Node.js uzas la principon de nesinkrona ekzekuto, t.e. la kodo estas transformita en "db.query ("elekto..", funkcio (rezulto) {rezulta prilaborado});", en kiu kontrolo tuj pasos al plia kodo, kaj la demandrezulto estos prilaborita kiam datumoj alvenas.

fonto: opennet.ru

Aldoni komenton