Byl vydán Node.js 16.0, platforma pro běh síťových aplikací v jazyce JavaScript. Node.js 16.0 je zařazen do větve s dlouhodobou podporou, avšak tento status bude přiřazen až v říjnu po stabilizaci. Podpora Node.js 16.0 bude zajišťována do dubna 2023. Údržba předchozí LTS větve Node.js 14.0 potrvá do dubna 2023 a předchozí LTS větve 12.0 do dubna 2022. Údržba LTS větve 10.0 bude ukončena za 10 dní.
Hlavní vylepšení:
- Motory V8 byl aktualizován na verzi 9.0 (v Node.js 15 byla použita verze 8.6), což umožnilo implementaci funkcí jako vlastnost "indices" pro regulární výrazy (obsahuje pole s počátečními a koncovými pozicemi skupin shod). Dále byl přidán asynchronní způsob čekání pomocí metody Atomics.waitAsync (asynchronní verze Atomics.wait) a podpora používání klíčového slova await na nejvyšší úrovni modulů. Zrychlil se také výkon funkcí v případech, kdy počet předaných argumentů neodpovídá definovaným parametrům funkce.
- Stabilizováno API Timers Promises, které poskytuje alternativní sadu funkcí pro práci s časovačem, vracející objekty Promise, což umožňuje obejít používání util.promisify(). import { setTimeout } from 'timers/promises'; async function run() { await setTimeout(5000); console.log('Ahoj, světe!'); } run();
- Přidána experimentální implementace API Web Crypto, určeného k provádění základních kryptografických operací na straně webových aplikací, jako je manipulace s kryptografickými hashi, generování a ověřování digitálních podpisů, kódování a dekódování dat pomocí různých šifrovacích metod a generování kryptograficky spolehlivých náhodných čísel. API také obsahuje funkce pro generaci a správu klíčů.
- N-API (API pro vývoj doplňků) byl aktualizován na verzi 8.
- Došlo k přechodu na novou verzi správce balíčků NPM 7.10.
- Stabilizována implementace třídy AbortController, založené na Web API AbortController, která umožňuje zrušení signálů v vybraných API na základě Promise.
- Stabilizována podpora třetí verze formátu Source Map, používaného pro mapování generovaných, zpracovaných nebo zabalených modulů s původním zdrojovým kódem.
- Pro kompatibilitu se zastaralými Web API byly přidány metody buffer.atob(data) a buffer.btoa(data).
- Začalo se s vytvářením sestav pro nová zařízení Apple vybavená čipem ARM M1.
- Na platformě Linux byly požadavky na verzi překladače zvýšeny na GCC 8.3.
Připomínáme, že platforma Node.js může být použita jak pro serverové zajištění běhu webových aplikací, tak pro vytváření běžných klientských a serverových síťových programů. Pro rozšíření funkcionality aplikací pro Node.js byla připravena rozsáhlá kolekce modulů, ve které lze najít moduly s implementací 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.
Dále je zajímavé poznamenat, že společnost Deno, založená tvůrcem Node.js na rozvoj platformy nové generace Deno, získala 4,9 milionu dolarů investic. Deno má na svém účelu podobný charakter jako Node.js, ale snaží se odstranit konceptuální chyby, které byly v architektuře Node.js. A nabídnout uživatelům bezpečnější prostředí. Je zmíněno, že obchodní řešení společnosti Deno budou postavena na plně otevřených produktech a model Open Core, který vyčleňuje jednotlivé placené funkce, je vnímán jako nepřijatelný pro platformu Deno.
Zdroj: opennet.ru
