Ilmus Node.js 17.0, platvorm, mis võimaldab JavaScripti keeles võrgu rakenduste täitmist. Node.js 17.0 kuulub tavapärase toetuse haru alla, mille uuendused viiakse ellu kuni juuni 2022. Järgmise nädala jooksul lõpetatakse Node.js 16 haru stabiliseerimine, mis saavutab LTS staatuse ja mille toetamine kestab kuni aprilli 2024. Eelmise LTS haru Node.js 14.0 jääb toetuse alla kuni aprilli 2023 ning eelneva LTS haru 12.0 kuni aprilli 2022.
Peamised täiustused:
- V8 mootori versioon 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();
- Paketis sisalduv OpenSSL teek on uuendatud versioonile 3.0 (kasutatakse quictls/openssl haru, kus on sisse lülitatud QUIC protokolli tugi).
- Node.js versiooni väljund on tagatud virna jälgede korral, mis antakse välja kriitiliste vigade puhul, mis viivad rakenduse seiskumiseni.
Lisaks võib mainida, et uusimates Node.js harudes on kõrvaldatud kaks haavatavust (CVE-2021-22959, CVE-2021-22960), mis võimaldavad HTTP Request Smuggling (HRS) klassi rünnakute sooritamist. Nende rünnakute kaudu on võimalik saata spetsiaalselt vormindatud kasutajapäringuid, mis segavad teiste kasutajate päringute sisu, mida töödeldakse samas voos front-endi ja back-endi vahel (näiteks on võimalik sisestada kuritarvitavat JavaScripti koodi teise kasutaja seanssi). Üksikasjad avaldatakse hiljem, kuid praegu on teada vaid see, et probleemid on põhjustatud valest tühikute töötlemisest HTTP-pealkirja nime ja kooloni vahel, samuti erinevast tagasiviimise ja reavahetuse sümbolite töötlemisest parameetrite plokis, mida kasutatakse päringute keha osade kaupa edastamiseks
Tuletame meelde, et Node.js platvormi saab kasutada veebirakenduste serveri toe pakkumiseks, samuti tavapäraste klientide ja serveri võrguprogrammide loomiseks. Node.js rakenduste funktsionaalsuse laiendamiseks on ette valmistatud suur hulk mooduleid, mis sisaldavad mooduleid rakenduste rakendamiseks. serverid HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3 kliente, mooduleid erinevate veebiraamistike integreerimiseks, WebSocket ja Ajax töötlejat, andmebaasi ühendusi (MySQL, PostgreSQL, SQLite, MongoDB), malligeneraatorid, CSS-mootorid, krüptoalgoritmide rakendused ja autentimissüsteemid (OAuth), XML-parsereid.
Suurte paralleelsete päringute töötlemise tagamiseks kasutab Node.js asünkroonset koodikäivitamise mudelit, mis põhineb mitteblokeerival sündmustöötlusel ja tagasiside töötlejate määramisel. Ühenduste multiplexerimise meetoditeks on sellised meetodid nagu epoll, kqueue, /dev/poll ja select. Ühenduste multiplexerimiseks kasutatakse libuv teeki, mis on libevi peal Unix-süsteemides ja IOCP peal Windowsis. Tööde võrgu loomise jaoks kasutatakse libeio teeki, niisuguste mitteblokeerivate DNS-päringute töötlemiseks on integreeritud c-ares. Kõik süsteemikutsed, mis põhjustavad blokeerimist, toimuvad teede grupis ja edastavad seejärel oma töö tulemuse tagasi anonüümse kanali kaudu (pipe). JavaScripti koodi täitmine toimub Google'i välja töötatud V8 mootori kaudu (Microsoft arendab lisaks versiooni Node.js Chakra-Core mootori kasutades).
Oma olemuselt on Node.js sarnane Perl AnyEvent, Ruby Event Machine, Python Twisted raamistikele ja sündmuste rakendusele Tcl-is, kuid Node.js sündmuste töötlemise ring on arendajate eest peidetud ja sarnaneb veebirakenduse sündmuste töötlemisega, mis töötab brauseris. Node.js rakenduste kirjutamisel tuleb arvestada sündmustepõhise programmeerimise eripära, näiteks, selle asemel, et täita "var result = db.query('select..');" oodates töö valmimist ja seejärel tulemuste töötlemist, kasutatakse Node.js-is asünkroonilise täitmise printsiipi, st kood muudetakse "db.query('select..', function (result) {tulemuse töötlemine});", mille puhul juhtimine läheb koheselt järgmisele koodile ja päringu tulemust töödeldakse andmete saamisel.
Allikas: opennet.ru
