Ilmumisest toimus Node.js 23.0.0, JavaScriptiga veebirakenduste käitamise platvorm. Node.js 23.0 kuulub vahepealsetesse harudesse, mille hooldus kestab 7 kuud (kuni juuni 2025). Järgmise nädala jooksul lõpetatakse Node.js 22 haru stabiliseerimine, mis saab 29. oktoobril LTS staatus ja seda toetatakse kuni aprillini 2027. Eelmiste LTS-haru Node.js 20.x ja 18.x toetamine kestab kuni aprillini 2026 ja 2025 vastavalt.
Peamised täiustused:
- Eksperimentaalne TypeScripti keele tugi on lisatud, mis võimaldab selget tüübi määratlemist. Tugi aktiveeritakse valikute "—experimental-strip-types" ja "—experimental-transform-types" kaudu. Esimese valiku korral peab TypeScriptiga töötamine piirduma keelele iseloomulike tüübide määratlemiste puhastamisega (tüübinüansside kontrolli ei tehta, kood muudetakse lihtsalt JavaScripti kuvamiseks ilma tüüpideta). Teine valik преобразует некоторые TypeScripti süntaksi elemendid, nagu enumid ja nimedruumid, JavaScripti koodiks.
- Mugavus "require()" kutsumise kasutamiseks ESM (ECMAScripti moodulite) JavaScripti moodulite sünkroonseks laadimiseks on sisse lülitatud vaikimisi. ESM-mooduleid kasutatakse brauserites ja need asendavad Node.js jaoks iseloomulikke CommonJS mooduleid. ESM-mooduli laadimiseks "require()" kaudu peab see olema sünkroonselt käideldav (ilma awaitita ülemisel tasemel).
- Automaatne ESM-moodulite tuvastamine on tagatud failides, millel ei ole laiendit või millel on laiend ".js". Varasemalt tõlgendati selliseid faile CommonJS moodulitena, kui sama kausta package.json failis ei olnud nende tüüpi selgelt määratud ("type": "module"). Uues versioonis proovib süsteem esialgu laadida defineerimata tüüpe package.json-is CommonJS moodulina ja kui see ebaõnnestub, siis ESM moodulina.
- Eksperimentaalne teostus on lisatud brauserite ühildatav API Web Storage, mis on mõeldud andmete püsivaks (klass localStorage) või ajutiseks (klass sessionStorage) salvestamiseks võtme/väärtuse vormingus. Web Storage'i toe aktiveerimiseks on vajalik käivitamine lipuga "—experimental-webstorage" ja salvestusfaili tee määramine lipuga "—localstorage-file".
- Lisatud on katsetuslik SQLite API andmebaasidega töötamiseks, kasutades SQL-päringute keelt ja SQLite'i raamatukogu baasil põhinevat salvestust. Lisaks andmebaasi salvestamisele faili kettale saab seda ka mälu sisse paigutada, määrates faili nime asemel ':memory:'. Ülalmainitud API Web Storage on samuti rakendatud SQLite'i peal, mis on viinud SQLite'i lisamise Node.js sõltuvuste hulka.
- Stabiilseks on kuulutatud käsk 'node --run', mis on mõeldud skriptide käivitamiseks, mis on määratud failis package.json.
- Teostatud on valikuline toe rakendamine salvestatud koodi vahemällu, et kiirendada märkimisväärselt moodulite käivitamist. Vahemälu lubamine toimub keskkonnamuutuja NODE_COMPILE_CACHE kaudu. Selle eesmärk on sarnane paketiga v8-compile-cache, kuid see pakub paremat jõudlust ja toetab ESM mooduleid.
- Optimeeritud on Buffer objekt, mis on oluliselt suurendanud Buffer.copy() ja Buffer.write() meetodite jõudlust.
- Node:fs mooduli jõudlus on paranend, samuti on vähendatud C++ koodi kutsete arvu töötamise käigus.
- V8 mootor on uuendatud versioonile 12.9, mida kasutatakse Chromiumis 129.
- Toetused 32-bitistele süsteemidele Windowsi operatsioonisüsteemiga on eemaldatud.
- C++20 standardis määratletud võimaluste rakendamise tõttu Node.js-s ja V8 mootoris on tõusnud nõudmised GCC kompilaatori versioonile. Node.js kogumiseks on nüüd vajalik vähemalt GCC versioon 12.
Node.js platvormi saab kasutada nii veebirakenduste serveripoolseks toe tagamiseks kui ka tavaliste klient-serveri võrgurakenduste loomiseks. Node.js jaoks on välja töötatud suur moodulite kogumik, kust leiate mooduleid, mis hõlmavad 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.
Paljude paralleelsete päringute töötlemiseks kasutab Node.js asünkroonset koodi käivitamise mudelit, mis põhineb mitteblokeeriva sündmuste töötlemisel ja tagasiside töötlejate määratlemisel. Ühenduste multiplexerimise meetoditeks on toetatud näiteks epoll, kqueue, /dev/poll ja select. Ühenduste multiplexerimiseks kasutatakse raamatukogu libuv, mis on süsteemides Unix libev-i ja Windowsis IOCP ülemaailmne kiht. Kiiruseteemade basseini (thread pool) loomiseks kasutatakse raamatukogu libeio ning mitteblokeeriva DNS-päringute täitmiseks on integreeritud c-ares. Kõik süsteemikutsed, mis põhjustavad blokeerimist, täidetakse teemapools ja seejärel edastavad tulemuse töötluse tagasi anonüümsesse kanali (pipe) kaudu, sarnaselt signaali töötlejatega.
JavaScripti koodi täitmine toimub Google'i arendatud V8 mootori kaudu (lisaks arendab Microsoft Node.js varianti Chakra-Core mootori abil). Node.js on olemuselt sarnane Perl AnyEvent, Ruby Event Machine, Python Twisted ja Tcl'i sündmustöötluse raamistikuga, kuid Node.js sündmustöötluse tsükkel on arendajate eest peidetud ja meenutab sündmustöötlust veebirakenduses, mis töötab brauseris.
Allikas: opennet.ru
