Byla vydána verze Node.js 18.0, platformy pro provozování síťových aplikací v jazyce JavaScript. Node.js 18.0 je zařazen do větve s dlouhodobou podporou, tento status však bude potvrzen až v říjnu po stabilizaci. Podpora Node.js 18.x bude poskytována do dubna 2025. Údržba předchozí LTS větve Node.js 16.x potrvá do dubna 2024 a předminulé LTS větve 14.x do dubna 2023. Údržba LTS větve 12.x bude ukončena 30. dubna a střední větve Node.js 17.x 1. června.
Hlavní vylepšení:
- Motor V8 byl aktualizován na verzi 10.1, používané v Chromu 101. Ve srovnání s vydáním Node.js 17.9.0 byla přidána podpora funkcí, jako jsou metody findLast a findLastIndex pro vyhledávání prvků od konce pole, a funkce Intl.supportedValuesOf. API Intl.Locale bylo vylepšeno. Byla zrychlena inicializace polí tříd a soukromých metod.
- Byl povolen experimentální API fetch(), určený pro načítání zdrojů po síti. Implementace je založena na kódu z HTTP/1.1 klienta undici a je maximálně blízká podobnému API poskytovanému v prohlížečích. Zajištěna je podpora rozhraní FormData, Headers, Request a Response pro manipulaci s HTTP hlavičkami požadavků a odpovědí. const res = await fetch('https://nodejs.org/api/documentation.json'); if (res.ok) { const data = await res.json(); console.log(data); }
- Byla přidána experimentální implementace API Web Streams, která poskytuje přístup k datovým tokům přijímaným po síti. API umožňuje přidat vlastní zpracovatele pro práci s daty, když jsou informace přijímány po síti, aniž by bylo třeba čekat na stažení celého souboru. V Node.js jsou nyní k dispozici objekty jako ReadableStream*, TransformStream*, WritableStream*, TextEncoderStream, TextDecoderStream, CompressionStream a DecompressionStream.
- Do stabilních verzí byl zařazen API Blob, který umožňuje enkapsulaci neměnných surových dat pro bezpečné použití v různých pracovních procesech.
- Do stabilních verzí byl zařazen API BroadcastChannel, který umožňuje organizaci výměny zpráv asynchronně formátem 'jeden odesílatel — mnoho příjemců'.
- Byl přidán experimentální modul node:test pro vytváření a spouštění testů v jazyce JavaScript, které vrací výsledky ve formátu TAP (Test Anything Protocol).
- Bylo zajištěno vytvoření hotových sestav pro Red Hat Enterprise Linux (RHEL) 8 a další distribuce založené na Glibc 2.28+, včetně Debianu 10 a Ubuntu 20.04, jakož i pro macOS 10.15+. Z důvodu problémů s kompilací enginu V8 bylo dočasně zastaveno vytváření 32bitových sestav pro Windows.
- Byla poskytnuta experimentální možnost sestavit spustitelný soubor Node.js s uživatelsky vybranými komponenty, které se inicializují při spuštění. Pro určení počátečních komponent byla do skriptu configure přidána možnost „—node-snapshot-main“, například „./configure —node-snapshot-main=marked.js; name node“
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
