Dostupná serverová JavaScript platforma Node.js 20.0

Bylo vydáno Node.js 20.0, platforma pro spuštění síťových aplikací v jazyce JavaScript. Node.js 20.0 je zařazen mezi verze s dlouhodobou podporou, avšak tento status bude přidělen až v říjnu po stabilizačních pracích. Podpora Node.js 20.x bude zajištěna do 30. dubna 2026. Podpora předchozí LTS větve Node.js 18.x potrvá do dubna 2025, zatímco podpora ještě předchozí LTS větve 16.x skončí v září 2023. Podpora LTS větve 14.x bude ukončena k 30. dubnu, a pro mezivětve Node.js 19.x k 1. červnu.

Hlavní vylepšení:

  • Motor V8 byl aktualizován na verzi 11.3, používanou v Chromiu 113. Mezi změnami oproti větvi Node.js 19, kde byl použit motor Chromia 107, jsou zmíněny funkce String.prototype.isWellFormed a toWellFormed, metody Array.prototype a TypedArray.prototype pracující s kopií při změně objektů Array a TypedArray, flag „v“ v RegExp, podpora změny velikosti ArrayBuffer a zvětšení SharedArrayBuffer, a tail-call rekurze ve WebAssembly.
  • Предложен экспериментальный механизм Permission Model, позволяющий ограничить доступ к определённым ресурсам в процессе исполнения. Поддержка Permission Model включается через указание при запуске флага «—experimental-permission». В начальной реализации предложены опции для ограничения доступа на запись (—allow-fs-write) и чтение (—allow-fs-read) к определённым частям ФС, дочерним процессам (—allow-child-process), дополнениям (—no-addons) и потокам (—allow-worker). Например, чтобы разрешить запись в каталог /tmp и чтение файла /home/index.js можно указать: node —experimental-permission —allow-fs-write=/tmp/ —allow-fs-read=/home/index.js index.js

    Pro kontrolu přístupu se navrhuje použít metodu process.permission.has(), například „process.permission.has(‘fs.write’, '/tmp/test').

  • Zpracovatelé externích modulů ECMAScript (ESM), načítaných pomocí volby „—experimental-loader“, se nyní provádějí v samostatném vlákně, izolovaném od hlavního vlákna, což vylučuje překrývání kódu aplikací a načítaných ESM modulů. Podobně jako v prohlížečích se nyní metoda import.meta.resolve() při volání z aplikace provádí synchronně. V jedné z následujících větví Node.js plánují převést podporu načítání ESM na stabilní funkce.
  • Modul node:test (test_runner), určený k vytváření a spouštění testů v jazyce JavaScript, které vracejí výsledek ve formátu TAP (Test Anything Protocol), byl převeden do stabilní verze.
  • Byl utvořen samostatný tým vývojářů, který se zaměřil na optimalizaci výkonu. Při přípravě nové větve byly provedeny úpravy pro zrychlení různých komponent runtime, včetně analýzy URL, fetch() a EventTarget. Například náklady při inicializaci EventTarget byly sníženy na polovinu, výrazně se zvýšila výkonnost metody URL.canParse() a efektivita časovačů. Kromě toho byl zařazen výkonný parser URL — Ada 2.0, napsaný v C++.
  • Pokračovalo se ve vývoji experimentální funkce pro dodávku aplikací ve formě jednoho spustitelného souboru (SEA, Single Executable Applications). Vytvoření spustitelného souboru nyní vyžaduje vložení blobu vytvořeného na základě konfiguračního souboru ve formátu JSON (namísto vkládání JavaScriptového souboru).
  • Byla zlepšena kompatibilita API Web Crypto s implementacemi od jiných projektů.
  • Byla přidána oficiální podpora Windows na systémech ARM64.
  • Pokračuje se v implementaci podpory rozšíření WASI (WebAssembly System Interface) pro vytváření izolovaných WebAssembly aplikací. Byla odstraněna potřeba specifikovat zvláštní příznak příkazového řádku pro povolení podpory WASI.

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

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster