Servilflanka JavaScript Node.js 17.0 eldono

Node.js 17.0, platformo por funkciigi retajn aplikaĵojn en JavaScript, estis publikigita. Node.js 17.0 apartenas al la regula subtena branĉo, kiu ricevos ĝisdatigojn ĝis junio 2022. En la venontaj tagoj, la branĉo Node.js 16 estos stabiligita, ricevos LTS-statuson kaj estos subtenata ĝis aprilo 2024. La antaŭa LTS-branĉo Node.js 14.0 estos subtenata ĝis aprilo 2023, kaj la antaŭa LTS-branĉo 12.0 ĝis aprilo 2022.

Ĉefaj plibonigoj:

  • La V8-motoro estis ĝisdatigita al versio 9.5.
  • Daŭra efektivigo de kernaj API-variantoj bazitaj sur la nesinkrona komputada interfaco Promise. Aldone al la antaŭe proponitaj API-oj Timers Promises kaj Streams Promises, Node.js 17.0 enkondukas la API-on Readline Promise por legi datumojn linion post linio uzante la modulon 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('Kion vi pensas pri Node.js?'); console.log('Dankon pro via valora retrosciigo: ${answer}'); rl.close();
  • La inkluzivita OpenSSL-biblioteko estis ĝisdatigita al versio 3.0 (uzante la forkon quictls/openssl kun ebligita subteno por la protokolo QUIC).
  • Certigis, ke la Node.js-versio estas montrata en stakaj spuroj, kiuj estas eliritaj kiam okazas fatalaj eraroj, kiuj kaŭzas la ĉesigon de la aplikaĵo.

Plie, ni povas mencii la eliminon de du vundeblecoj en la nunaj branĉoj de Node.js (CVE-2021-22959, CVE-2021-22960), kiuj ebligas efektivigi atakojn de la klaso "HTTP Request Smuggling" (HRS), kiuj permesas, per sendado de speciale dizajnitaj klientaj petoj, enŝoviĝi en la enhavon de la petoj de aliaj uzantoj prilaboritaj en la sama fluo inter la fronta kaj la malantaŭa parto (ekzemple, eblas atingi la anstataŭigon de malica JavaScript-kodo en la sesio de alia uzanto). La detaloj estos malkaŝitaj poste, sed nuntempe oni scias nur, ke la problemoj estas kaŭzitaj de malĝusta traktado de spacetoj inter la nomo de la HTTP-kaplinio kaj la dupunkto, same kiel malsama traktado de la signoj "ĉapelreveno" kaj "liniosalto" en la parametra bloko uzata dum transdono de la petokorpo en partoj en la "blokita" reĝimo.

Kiel memorigilo, la platformo Node.js uzeblas kaj por servilflanka subteno de TTT-aplikaĵoj kaj por krei normajn klientflankajn kaj servilflankajn retprogramojn. Por plivastigi la funkciecon de Node.js-aplikaĵoj, granda kolekto de moduloj estis preparita, inkluzive de tiuj kun efektivigoj. serviloj kaj klientoj de HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, moduloj por integriĝo kun diversaj TTT-kadroj, WebSocket kaj Ajax-traktiloj, konektiloj al DBMS (MySQL, PostgreSQL, SQLite, MongoDB), ŝablonmotoroj, CSS-motoroj, efektivigoj de kriptografiaj algoritmoj kaj rajtigaj sistemoj (OAuth), XML-analiziloj.

Por pritrakti grandan nombron da paralelaj petoj, Node.js uzas nesinkronan kod-ekzekutan modelon bazitan sur ne-bloka okazaĵa prilaborado kaj revokaj traktiloj. Subtenataj metodoj por konekto-multipleksado inkluzivas epoll, kqueue, /dev/poll, kaj select. La biblioteko libuv, kiu estas superaro de libev en Uniksaj sistemoj kaj IOCP en IOCP, estas uzata por konekto-multipleksado. WindowsLa biblioteko libeio estas uzata por krei fadenaron, kaj c-ares estas integrita por plenumi DNS-demandojn en ne-bloka reĝimo. Ĉiuj blokaj sistemvokoj estas plenumataj ene de la fadenaro kaj poste, kiel signaltraktiloj, redonas siajn rezultojn per nenomita tubo. JavaScript-plenumon provizas la V8-motoro de Google (Microsoft ankaŭ evoluigas variaĵon 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

Aĉetu fidindan gastigadon por retejoj kun DDoS-protekto, VPS-VDS-serviloj 🔥 Aĉetu fidindan retejan gastigadon kun DDoS-protekto, VPS VDS-servilojn | ProHoster