Izšla je različica Node.js 19.0, platforme za izvajanje omrežnih aplikacij v jeziku JavaScript. Node.js 19 je razvrščen v veja s redno podporo, posodobitve katere bodo izhajale do junija 2023. V prihodnjih dneh bo zaključena stabilizacija veje Node.js 18, ki bo pridobila status LTS in bo podprta do aprila 2025. Vzdrževanje prejšnje LTS veje Node.js 16.0 bo trajalo do septembra 2023, medtem ko bo prejšnja LTS veja 14.0 podprta do aprila 2023.
Glavne izboljšave:
- Motor V8 je posodobljen na različico 10.7, ki se uporablja v Chromu 107. Med spremembami v motorju v primerjavi z Node.js 18 je implementacija tretje različice API Intl.NumberFormat, ki je dodala nove funkcije formatRange(), formatRangeToParts() in selectRange(), grupiranje množic, nove možnosti za zaokroževanje in določanje natančnosti ter možnost interpretacije nizov kot decimalnih števil. Prav tako so posodobljene vključene odvisnosti llhttp 8.1.0 in npm 8.19.2.
- Predlagana je eksperimentalna ukazna vrstica „node —watch“ z implementacijo načina nadzora, ki omogoča ponovni zagon procesa ob spremembi uvoženega datoteke (na primer, pri izvajanju „node —watch index.js“ se bo postopek samodejno ponovno zagnal ob spremembi index.js).
- Za vse odhodne HTTP/HTTPS povezave je omogočena podpora za mehanizem HTTP 1.1 Keep-Alive, ki ohranja povezavo odprto za obdelavo več HTTP zahtevkov znotraj enega samega povezave. Predvideva se, da bo uporaba Keep-Alive povečala prepustnost in zmogljivost. Privzeto je časovni iztečaj za ohranjanje povezave odprte nastavljen na 5 sekund. V implementacijo HTTP odjemalca je dodana podpora za analiziranje HTTP glave Keep-Alive v odgovorih. strežnika, v implementacijo HTTP strežnika Node.js pa je dodano samodejno odklapljanje neaktivnih strank, ki uporabljajo Keep-Alive.
- V razred stabilnih je bila razvrščena API WebCrypto, razen funkcij, ki uporabljajo algoritme Ed25519, Ed448, X25519 in X448. Za dostop do modula WebCrypto lahko zdaj uporabite globalThis.crypto ali require(‘node:crypto’).webcrypto.
- Podpora za sledilna orodja DTrace, SystemTap in ETW (Event Tracing for Windows) je odstranjena, saj je njihovo vzdrževanje ob spremenjeni situaciji postalo zapleteno brez ustreznega načrta za podporo.
Platforma Node.js se lahko uporablja tako za strežniško spremljanje delovanja spletnih aplikacij kot tudi za ustvarjanje običajnih odjemalskih in strežniških omrežnih programov. Za razširitev funkcionalnosti aplikacij za Node.js je pripravljena obsežna zbirka modulov, v kateri lahko najdete module z implementacijo. strežnikov i HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3 klijenata, module za integraciju sa raznim web okvirima, WebSocket i Ajax obradi, konektore za baze podataka (MySQL, PostgreSQL, SQLite, MongoDB), predloške, CSS motore, implementacije kriptoalgoritama i sistema autorizacije (OAuth), XML parsera.
Za obradnjo velikega števila vzporednih zahtevkov Node.js uporablja asinhroni model izvajanja kode, ki temelji na obdelavi dogodkov v neblokirnem načinu in določanju callback obdelovalcev. Kot načine multiplexiranja povezav podpira metode, kot so epoll, kqueue, /dev/poll in select. Za multiplexiranje povezav se uporablja knjižnica libuv, ki je nadgradnja nad libev v sistemih Unix in nad IOCP v Windows. Za ustvarjanje sklada niti (thread pool) se uporablja knjižnica libeio, za izvedbo DNS zahtevkov v neblokirnem načinu pa je integriran c-ares. Vsi sistemski klici, ki povzročajo blokado, se izvajajo v okviru sklada niti in nato, tako kot obdelovalci signalov, rezultat svojega dela pošljejo nazaj prek anonimne cevi (pipe). Izvajanje JavaScript kode omogoča vključen motor V8, ki ga je razvilo podjetje Google (dodatno Microsoft razvija različico Node.js z motorjem Chakra-Core).
Po svoji naravi je Node.js podoben okvirjem Perl AnyEvent, Ruby Event Machine, Python Twisted in izvedbi dogodkov v Tcl, vendar je cikel obdelave dogodkov (event loop) v Node.js skrit pred razvijalcem in spominja na obdelavo dogodkov v spletni aplikaciji, ki deluje v brskalniku. Pri pisanju aplikacij za Node.js je potrebno upoštevati posebnosti programiranja, usmerjenega na dogodke; na primer, namesto izvajanja 'var result = db.query('select..');' z čakanjem na zaključek dela in nadaljnjo obdelavo rezultatov, Node.js uporablja načelo asinhronega izvajanja, torej se koda preoblikuje v 'db.query('select..', function (result) {obdelava rezultata});', pri čemer se nadzor takoj prenese na nadaljnjo kodo, rezultat poizvedbe pa se obdeluje ob prihodu podatkov.
Izvor: opennet.ru
