Node.js 17.0 serveripõhise JavaScript platvormi väljaanne

Ilmus Node.js 17.0, JavaScript-i võrgurakenduste käitamise platvorm. Node.js 17.0 kuulub tavapärase toe harusse, mille uuendusi antakse välja kuni 2022. aasta juuni lõpuni. Järgmise nädala jooksul viimistletakse Node.js 16 haru, mis omandab LTS staatuse ja mille tugi kestab kuni 2024. aasta aprillini. Eelmise LTS haru Node.js 14.0 tugi kestab kuni 2023. aasta aprillini, samas kui eelmist LTS haru 12.0 toetatakse kuni 2022. aasta aprillini.

Peamised parandused:

  • V8 mootor on uuendatud versioonile 9.5.
  • Продолжена реализация вариантов базового 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();
  • Kaasa arvatud OpenSSL raamatukogu on uuendatud versioonile 3.0 (kasutatakse quictls/openssl fork'i, millel on sisse lülitatud QUIC protokolli tugi).
  • Node.js versiooni väljund on tagatud kuhjatavate virnatrace'ide puhul, mis on loodud fataalsete vigade tõttu, mis viivad rakenduse sulgemiseni.

Täiendavalt võib mainida, et Node.js viimastes harudes on kõrvaldatud kaks haavatavust (CVE-2021-22959, CVE-2021-22960), mis võimaldavad "HTTP Request Smuggling" (HRS) rünnakute sooritamist. Need rünnakud võimaldavad saata spetsiaalselt vormindatud klientide päringute kaudu teiste kasutajate päringute sisu, mida töödeldakse samas voos frontendi ja backend'i vahel (näiteks võib see võimaldada pahatahtliku JavaScripti koodi sisestamist teise kasutaja sessiooni). Üksikasjad avaldatakse hiljem, kuid praegu on teada, et probleemid on tingitud ebaõigest kauguselt käsitlemisest HTTP-pealkirja nime ja kolmnurga vahel, samuti eri käitlemisest tagasipööramismärkide ja ridade vahetamise märkide osas parameetrite plokkides, mida kasutatakse päringute keha edastamiseks osade kaupa „chunked“ režiimis.

Tuletame meelde, et Node.js platvormi saab kasutada nii veebirakenduste serveripoolseks toetamiseks kui ka tavaliste kliendi- ja serveri võrguprogrammide loomiseks. Node.js rakenduste funktsionaalsuse laiendamiseks on ette valmistatud suur moodulite kogu, milles leidub erinevaid teostuse mooduleid. serverite Lisaks on saadaval moodulid erinevate veebiraamistikest integreerimiseks, WebSocketi ja Ajax töötlejate, andmebaasi ühenduse moodulite (MySQL, PostgreSQL, SQLite, MongoDB), templaatide, CSS-mootorite, krüptoalgoritmide ja autoriseerimissüsteemide (OAuth), XML-parside rakendusteks.

Node.js kasutab paljude paralleelsete päringute töötlemiseks asünkroonset koodikäitlusmudelit, mille aluseks on sündmuste mittesüvendav töötlemine ja tagasikutsumiste määramine. Ühenduste multiplexerimiseks toetatakse selliseid meetodeid nagu epoll, kqueue, /dev/poll ja select. Ühenduste multiplexerimiseks kasutatakse libuv raamatukogu, mis on Unix-süsteemides libev ja Windowsis IOCP. Töötajate basaari (thread pool) loomiseks kasutatakse libeio raamatukogu ning mittesüvendav DNS-päringute töötlemine on integreeritud c-ares'iga. Kõik süsteemi kutsed, mis võivad blokeeruda, täidetakse töötajate basaari sees ja seejärel, nagu ka signaalide töötlejad, edastavad oma töö tulemuse tagasi anonüümsesse torusse (pipe). JavaScripti koodi täitmine tagatakse Google'i loodud V8 mootori kaasamise kaudu (täpsemalt arendab Microsoft Node.js varianti Chakra-Core mootoriga).

Node.js on teatud mõttes sarnane Perl AnyEvent, Ruby Event Machine, Python Twisted ja Tcl-i sündmustepõhiste rakendustega, kuid Node.js-i sündmuste töötlemise tsükkel (event loop) on arendaja eest varjatud ning sarnaneb veebirakenduse sündmuste töötlemisega, mis töötab brauseris. Node.js-i rakenduste kirjutamisel tuleb arvestada sündmustepõhise programmeerimise eripäradega. Näiteks, selle asemel et teostada "var result = db.query('select..');" ja oodata tulemuste töötlemise lõpetamist, kasutatakse Node.js-is asünkroonse täitmise põhimõtet, st kood muutub "db.query('select..', function (result) {töötle tulemus});", kus juhtimine läheb kohe edasi järgmisele koodile ja päringu tulemus töödeldakse andmete saabumise ajal.

Allikas: opennet.ru

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster