Byl vydán Node.js 19.0, platforma pro provozování síťových aplikací v jazyce JavaScript. Node.js 19 spadá do větve s běžnou podporou, její aktualizace budou vydávány do června 2023. V nejbližších dnech dojde k dokončení stabilizace větve Node.js 18, která získá status LTS a bude podporována do dubna 2025. Podpora předchozí LTS verze Node.js 16.0 bude pokračovat do září 2023, a dřívější verze LTS 14.0 do dubna 2023.
Hlavní vylepšení:
- Engine V8 byl aktualizován na verzi 10.7, použité v Chromium 107. Mezi změnami v engine ve srovnání s větví Node.js 18 je implementace třetí verze API Intl.NumberFormat, která přidává nové funkce formatRange(), formatRangeToParts() a selectRange(), skupinové množiny, nové možnosti zaokrouhlení a určení přesnosti, stejně jako možnost interpretace řetězců jako desetinných čísel. Byly také aktualizovány závislosti v balíčku llhttp 8.1.0 a npm 8.19.2.
- Byla navržena experimentální příkazová volba „node —watch“ s implementací režimu sledování, který zajišťuje restart procesu při změně importovaného souboru (například pokud spustíte „node —watch index.js“, proces se automaticky restartuje při změně index.js).
- Pro všechna odchozí HTTP/HTTPS spojení byla povolena podpora mechanismu HTTP 1.1 Keep-Alive, který udržuje spojení otevřené určitou dobu pro zpracování více HTTP požadavků v rámci jednoho spojení. Očekává se, že použití Keep-Alive zvýší propustnost a výkon. Výchozí timeout pro udržení spojení otevřeného byl nastaven na 5 sekund. Do implementace HTTP klienta byla přidána podpora pro analýzu HTTP hlavičky Keep-Alive v odpovědích serveru, a do implementace HTTP serveru Node.js bylo přidáno automatické odpojení neaktivních klientů používajících Keep-Alive.
- API WebCrypto bylo převedeno do stabilní fáze, s výjimkou funkcí používajících algoritmy Ed25519, Ed448, X25519 a X448. Pro přístup k modulu WebCrypto lze nyní použít globalThis.crypto nebo require(‘node:crypto’).webcrypto.
- Byla odstraněna podpora pro nástroje pro trasování DTrace, SystemTap a ETW (Event Tracing for Windows), jejichž udržování bylo shledáno neefektivním kvůli složitosti údržby v aktuálním stavu bez řádného plánu jejich podpory.
Platforma Node.js může být využita jak pro serverové zajištění chodu webových aplikací, tak pro vytváření obyčejných klientských a serverových síťových programů. Pro rozšíření funkcionality aplikací pro Node.js je k dispozici rozsáhlá sbírka modulů, ve které lze nalézt moduly s realizacemi servery a klientů HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, moduly pro integraci s různými webovými frameworky, zpracovatele WebSocket a Ajax, konektory k databázím (MySQL, PostgreSQL, SQLite, MongoDB), šablonovací enginy, CSS frameworky, implementace kryptografických algoritmů a systémů autorizace (OAuth), XML parsery.
Aby Node.js zvládl zpracování velkého počtu paralelních požadavků, využívá asynchronní model spouštění kódu založený na zpracování událostí v nezablokovaném režimu a určení callback-handlerů. Mezi metody multiplexování spojení patří epoll, kqueue, /dev/poll a select. Pro multiplexování spojení se používá knihovna libuv, která je nadstavbou nad libev v systémech Unix a nad IOCP ve Windows. Pro vytvoření vlákna (thread pool) se využívá knihovna libeio a pro provádění DNS dotazů v nezablokovaném režimu je integrován c-ares. Všechny systémové výzvy, které způsobují blokaci, jsou prováděny uvnitř vlákna a následně, stejně jako zpracovatelé signálů, předávají výsledek své práce zpět prostřednictvím anonymního kanálu (pipe). Provádění JavaScriptového kódu je zajišťováno prostřednictvím využití motoru V8 vyvinutého společností Google (navíc Microsoft vyvíjí variantu Node.js s motorem Chakra-Core).
Node.js je v podstatě podobný frameworkům Perl AnyEvent, Ruby Event Machine, Python Twisted a událostem implementovaným v Tcl, avšak event loop v Node.js je skrytý před vývojářem a připomíná zpracování událostí ve webové aplikaci běžící v prohlížeči. Při psaní aplikací pro Node.js je třeba vzít v úvahu specifika událostmi orientovaného programování, například místo provádění 'var result = db.query("select..")' s čekáním na dokončení a následným zpracováním výsledků, Node.js používá princip asynchronního provádění, tj. kód se transformuje na 'db.query("select..", function(result) {zpracování výsledku});', kdy se řízení okamžitě přesune na další kód a výsledek dotazu bude zpracován, jakmile budou data k dispozici.
Zdroj: opennet.ru
