K dispozici je JavaScriptová platforma na straně serveru Node.js 20.0

Proběhlo vydání Node.js 20.0, platformy pro spouštění síťových aplikací v JavaScriptu. Node.js 20.0 byl přiřazen k větvi long support, ale tento status bude přidělen až v říjnu, po stabilizaci. Node.js 20.x bude podporován do 30. dubna 2026. Údržba předchozí větve Node.js 18.x LTS potrvá do dubna 2025 a předchozí větve 16.x LTS do září 2023. Větev 14.x LTS bude udržována 30. dubna a prozatímní větev Node.js 19.x 1. června.

Hlavní vylepšení:

  • Engine V8 byl aktualizován na verzi 11.3, která se používá v Chromiu 113. Ze změn oproti větvi Node.js 19, která používala engine Chromium 107, byly funkce String.prototype.isWellFormed a toWellFormed, Array.prototype a TypedArray.prototype metody pro práci s kopírováním při změně objektů Array a TypedArray, příznak "v" v RegExp, podpora pro změnu velikosti ArrayBuffer a zvětšení velikosti SharedArrayBuffer, tail-call ve WebAssembly.
  • Je navržen experimentální mechanismus modelu oprávnění, který umožňuje omezit přístup k určitým zdrojům během provádění. Podpora modelu oprávnění je povolena zadáním příznaku "--experimental-permission" při spuštění. V počáteční implementaci byly navrženy možnosti pro omezení přístupu pro zápis (--allow-fs-write) a čtení (--allow-fs-read) do určitých částí FS, podřízených procesů (--allow-child-process) , doplňky (--no-addons ) a vlákna (--allow-worker). Chcete-li například povolit zápis do adresáře /tmp a čtení souboru /home/index.js, můžete zadat: node --experimental-permission --allow-fs-write=/tmp/ --allow-fs-read =/home/index.js index .js

    Ke kontrole přístupu se doporučuje použít metodu process.permission.has(), například "process.permission.has('fs.write',"/tmp/test").

  • Obslužné rutiny pro externí moduly ECMAScript (ESM) načtené pomocí možnosti „--experimental-loader“ se nyní spouštějí v samostatném vlákně izolovaném od hlavního vlákna, což eliminuje průnik kódu aplikace a načtených modulů ESM. Podobně jako v prohlížečích se metoda import.meta.resolve() nyní provádí synchronně, když je volána z aplikace. V jedné z dalších větví Node.js se plánuje přesunutí podpory načítání ESM do kategorie stabilních funkcí.
  • Modul node:test (test_runner), určený k vytváření a spouštění testů JavaScriptu, které vracejí výsledky ve formátu TAP (Test Anything Protocol), byl přesunut do stabilní verze.
  • Byl vytvořen samostatný výkonnostní tým, který v rámci přípravy na novou větev pracoval na zrychlení různých runtime komponent, včetně URL parsování, fetch() a EventTarget. Například režie inicializace EventTarget byla snížena na polovinu, výkon metody URL.canParse() byl výrazně zlepšen a účinnost časovačů byla zlepšena. Kromě toho je ve složení zahrnuto vydání vysoce výkonného analyzátoru URL - Ada 2.0, napsaného v C ++.
  • Pokračoval vývoj experimentální funkce pro doručování aplikací ve formě jednoho spustitelného souboru (SEA, Single Executable Applications). Vytvoření spustitelného souboru nyní vyžaduje nahrazení objektu BLOB vygenerovaného z konfiguračního souboru JSON (místo nahrazení souboru JavaScriptu).
  • Vylepšená kompatibilita Web Crypto API s implementacemi z jiných projektů.
  • Přidána oficiální podpora pro Windows na systémech ARM64.
  • Pokračující podpora pro rozšíření WASI (WebAssembly System Interface) pro vytváření samostatných aplikací WebAssembly. Odstraněna potřeba zadat speciální příznak příkazového řádku pro povolení podpory WASI.

Platformu Node.js lze použít jak pro serverovou údržbu webových aplikací, tak pro tvorbu běžných klientských a serverových síťových programů. Pro rozšíření funkčnosti aplikací pro Node.js je připravena velká kolekce modulů, ve kterých naleznete moduly s implementací HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3 servery a klienty, moduly pro integraci s různými webovými frameworky, obslužnými nástroji WebSocket a Ajax, DBMS konektory (MySQL, PostgreSQL, SQLite, MongoDB), šablonovacími enginy, CSS motory, implementacemi kryptografických algoritmů a autorizačních systémů (OAuth), XML parsery.

Aby bylo zajištěno zpracování velkého počtu paralelních požadavků, používá Node.js asynchronní model spouštění kódu založený na neblokujícím zpracování událostí a definici obslužných rutin zpětného volání. Podporované metody pro multiplexní připojení jsou epoll, kqueue, /dev/poll a select. Pro multiplexování připojení se používá knihovna libuv, což je doplněk pro libev na systémech Unix a IOCP na Windows. Knihovna libeio se používá k vytvoření fondu vláken a c-ares je integrován pro provádění DNS dotazů v neblokujícím režimu. Všechna systémová volání, která způsobují blokování, jsou prováděna uvnitř fondu vláken a poté, jako obslužné rutiny signálů, přenášejí výsledek své práce zpět přes nepojmenovanou rouru (rouru). Spouštění kódu JavaScript je zajištěno pomocí enginu V8 vyvinutého společností Google (Microsoft navíc vyvíjí verzi Node.js s enginem Chakra-Core).

Ve svém jádru je Node.js podobný Perl AnyEvent, Ruby Event Machine, Python Twisted frameworkům a implementaci událostí Tcl, ale smyčka událostí v Node.js je před vývojářem skrytá a připomíná zpracování událostí ve spuštěné webové aplikaci. v prohlížeči. Při psaní aplikací pro node.js musíte vzít v úvahu specifika programování řízeného událostmi, například místo toho, abyste dělali "var result = db.query("select..");" s čekáním na dokončení práce a následným zpracováním výsledků využívá Node.js princip asynchronního provádění, tzn. kód se transformuje na "db.query("select..", funkce (výsledek) {zpracování výsledku});", ve kterém řízení okamžitě přejde na další kód a výsledek dotazu bude zpracován, jakmile data dorazí.

Zdroj: opennet.ru

Přidat komentář