Bol vydaný Node.js 21.0, platforma pre spúšťanie sieťových aplikácií v jazyku JavaScript. Podpora vetvy Node.js 21.0 bude zabezpečená počas šiestich mesiacov. V najbližších dňoch bude dokončená stabilizácia vetvy Node.js 20, ktorá získa status LTS a bude podporovaná do apríla 2026. Podpora predchádzajúcej LTS vetvy Node.js 18.0 potrvá do septembra 2025 a vetvy 16.0 do apríla 2024.
Hlavné vylepšenia:
- Bol oznámený stabilný API Fetch, určený na načítavanie zdrojov cez sieť a zjednodušujúci písanie univerzálneho JavaScript kódu, vhodného na serverovú aj klientskú stranu. Implementácia je založená na kóde z HTTP/1.1 klienta undici a je čo najbližšie k analogickému API poskytovanému v prehliadačoch. API obsahuje metódu fetch() a objekty Headers, Request a Response, predstavujúce HTTP hlavičky, požiadavku a odpoveď. const res = await fetch('https://nodejs.org/api/documentation.json'); if (res.ok) { const data = await res.json(); console.log(data); }
- Bola stabilizovaná podpora API WebStreams, poskytujúceho prístup k prúdom dát prijímaných cez sieť. API umožňuje pridať vlastné spracovateľské funkcie, ktoré pracujú s údajmi, keď prichádzajú po sieti, bez čakania na načítanie celého súboru. V Node.js sú dostupné objekty ako ReadableStream*, TransformStream*, WritableStream*, TextEncoderStream, TextDecoderStream, CompressionStream a DecompressionStream.
- Bola pridaná experimentálna implementácia klienta WebSocket, kompatibilná s prehliadačmi. Na zapnutie podpory WebSocket je predpokladaný flag "--experimental-websocket".
- Bol pridaný experimentálny predvoľba pre predvolené používanie implementácie JavaScript modulov ESM (ECMAScript Modules, používa sa v moduloch pre prehliadače) namiesto CommonJS (špecifické pre Node.js). Zmena sa netýka modulov, ktorých formát je jasne definovaný prostredníctvom poľa "type" v package.json, zadaného cez flag "--input-type" alebo očividný na základe prípony súboru (.mjs pre ESM, .cjs pre CommonJS). Moduly, ktoré nie sú jasne definované ako CommonJS (napríklad majú príponu ".js"), budú pri aktivácii nového režimu považované za moduly ESM. Na aktiváciu nových nastavení modulov bol navrhnutý flag "--experimental-default-type".
- Motor V8 bol aktualizovaný na verziu 11.8, použitú v Chromium 118, v ktorom sa objavila podpora metódy ArrayBuffer.prototype.transfer, schopnosť grupovania polí (metóda groupBy) a WebAssembly inštrukcií na spracovanie konštánt (i32.add, i32.sub, i32.mul, i64.add, i64.sub a i64.mul).
- Podpora pre spracovateľ globalPreload bola ukončená, namiesto toho by sa pre nastavenie modulov mali používať volania register a initialize.
- Do funkcie fs.writeFile bola pridaná možnosť „flush“ na nútené vyprázdnenie dát na úložisko po každej operácii zápisu.
- Zvýšený výkon kódu súvisiaceho s analýzou URL, API fetch, streamami, node:fs a HTTP.
- Bol pridaný globálny objekt navigator. Napríklad pre získanie údajov o počte jadier CPU je možné použiť vlastnosť navigator.hardwareConcurrency.
- Do parametra „—test“ bola pridaná podpora globálnych mask pre výber spúšťaných testov (napríklad je možné uviesť „—test **/*.test.js“).
- Aktualizované súčasti vrátane balíkovej správy npm 10.2.0 a analyzátora llhttp 9.1.2.
- Podpora pre Visual Studio 2019 a verzie macOS staršie ako 11.0 bola ukončená.
Platforma Node.js môže byť použitá na serverovú podporu webových aplikácií, ako aj na vytváranie klasických klientských a serverových sieťových programov. Pre rozšírenie funkčnosti aplikácií pre Node.js bola pripravená veľká kolekcia modulov, v ktorej nájdete moduly s realizáciou. serverov a klientov HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, moduly na integráciu s rôznymi webovými rámcami, spracovateľov WebSocket a Ajax, konektorov k DBMS (MySQL, PostgreSQL, SQLite, MongoDB), šablónovačov, CSS enginov, implementácií kryptografických algoritmov a systémov autorizácie (OAuth), XML parserov.
Na zabezpečenie spracovania veľkého počtu paralelných dopytov využíva Node.js asynchrónny model spúšťania kódu, založený na spracovaní udalostí v neblokujúcom režime a určovaní callback spracovateľov. Ako metódy multiplexovania pripojení podporujú také metódy, ako sú epoll, kqueue, /dev/poll a select. Na multiplexovanie pripojení sa používa knižnica libuv, ktorá je nadstavbou nad libev na systémoch Unix a nad IOCP na Windows. Na vytvorenie poolu vlákien (thread pool) je zapojená knižnica libeio, na vykonávanie DNS dopytov v neblokujúcom režime je integrovaný c-ares. Všetky systémové volania, ktoré spôsobujú blokovanie, sa vykonávajú vnútri poolu vlákien a potom, rovnako ako spracovatelia signálov, prenášajú výsledok svojej práce späť cez anonymný kanál (pipe). Vykonávanie JavaScript kódu je zabezpečené zapojením vyvinutého engine V8 spoločnosťou Google (ďalej Microsoft vyvíja variant Node.js s engine Chakra-Core).
V podstate je Node.js podobný rámcom Perl AnyEvent, Ruby Event Machine, Python Twisted a realizácii udalostí v Tcl, ale cyklus spracovania udalostí (event loop) v Node.js je skrytý pred vývojárom a pripomína spracovanie udalostí vo webovej aplikácii, ktorá beží v prehliadači. Pri písaní aplikácií pre Node.js je potrebné zohľadniť špecifiku udalostne orientovaného programovania, napríklad, namiesto vykonávania „var result = db.query(„select..“);“ s očakávaním dokončenia práce a následným spracovaním výsledkov, v Node.js sa používa princíp asynchrónneho vykonávania, t.j. kód sa transformuje na „db.query(„select..“, function (result) {spracovanie výsledku});“, pri ktorom sa riadenie okamžite presunie na ďalší kód a výsledok dopytu bude spracovaný, akonáhle sa údaje dostanú.
Zdroj: opennet.ru
