Bol spustený Node.js 20.0, platforma pre spúšťanie sieťových aplikácií v jazyku JavaScript. Node.js 20.0 je zaradený medzi verzovanie s dlhodobou podporou, ale tento status bude pridelený až v októbri po stabilizácii. Podpora Node.js 20.x bude prebiehať do 30. apríla 2026. Podpora predchádzajúcej LTS vetvy Node.js 18.x potrvá do apríla 2025 a predpredchádzajúcej LTS vetvy 16.x do septembra 2023. Podpora LTS vetvy 14.x sa ukončí 30. apríla, zatiaľ čo podpora pre prechodnú vetvu Node.js 19.x sa ukončí 1. júna.
Hlavné vylepšenia:
- Motor V8 bol aktualizovaný na verziu 11.3, používanú v Chromium 113. Zmien oproti vetve Node.js 19, kde sa používal motor Chromium 107, sú funkcie String.prototype.isWellFormed a toWellFormed, metódy Array.prototype a TypedArray.prototype pre prácu s kópiou pri zmene objektov Array a TypedArray, flag „v“ v RegExp, podpora zmeny veľkosti ArrayBuffer a zvýšenia veľkosti SharedArrayBuffer, ako aj koncová rekurzia (tail-call) v 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
Na overenie prístupu sa odporúča použiť metódu process.permission.has(), napríklad "process.permission.has('fs.write', '/tmp/test')".
- Správca vonkajších modulov ECMAScript (ESM), načítavaných cez možnosť "—experimental-loader", teraz beží v samostatnom vlákne, izolovanom od hlavného vlákna, čo vylučuje prekrývanie kódu aplikácií a načítaných ESM modulov. Podobne ako v prehliadačoch sa metóda import.meta.resolve() pri volaní z aplikácie teraz vykonáva synchronne. V jednej z nasledujúcich vetiev Node.js plánujú podporu načítania ESM presunúť do kategórie stabilných funkcií.
- Do stabilných funkcií bol zaradený modul node:test (test_runner), určený na vytváranie a spúšťanie testov v jazyku JavaScript, ktoré vracajú výsledky vo formáte TAP (Test Anything Protocol).
- Bola vytvorená samostatná skupina vývojárov, ktorá zodpovedá za optimalizáciu výkonu, a ktorá pri príprave novej vetvy vykonala prácu na urýchlení rôznych runtime komponentov, vrátane analýzy URL, fetch() a EventTarget. Napríklad náklady pri inicializácii EventTarget sa znížili na polovicu, výkon metódy URL.canParse() sa výrazne zlepšil a efektivita prácích časovačov sa zvýšila. Okrem toho bol zaradený vydanie vysoko výkonného parsera URL – Ada 2.0, napísaného v jazyku C++.
- Pokračovalo sa vo vývoji experimentálnej funkcie pre dodávanie aplikácií vo forme jedného spustiteľného súboru (SEA, Single Executable Applications). Vytvorenie spustiteľného súboru teraz vyžaduje substitúciu blobu, ktorý sa vytvára na základe konfiguračného súboru vo formáte JSON (namiesto substitúcie JavaScriptového súboru).
- Zlepšená kompatibilita API Web Crypto s implementáciami z iných projektov.
- Pridala sa oficiálna podpora Windows na systémoch ARM64.
- Pokračovalo sa v implementácii podpory rozšírení WASI (WebAssembly System Interface) na vytváranie samostatných WebAssembly aplikácií. Odstránila sa potreba uvádzať špeciálnu príkazovú vlajku na aktiváciu podpory WASI.
Platforma Node.js môže byť použitá na serverovú podporu webových aplikácií, ako aj na vytváranie klasických klientských a serverových sieťových programov. Pre rozšírenie funkčnosti aplikácií pre Node.js bola pripravená veľká kolekcia modulov, v ktorej nájdete moduly s realizáciou. serverov a klientov HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, moduly na integráciu s rôznymi webovými rámcami, spracovateľov WebSocket a Ajax, konektorov k DBMS (MySQL, PostgreSQL, SQLite, MongoDB), šablónovačov, CSS enginov, implementácií kryptografických algoritmov a systémov autorizácie (OAuth), XML parserov.
Na zabezpečenie spracovania veľkého počtu paralelných dopytov využíva Node.js asynchrónny model spúšťania kódu, založený na spracovaní udalostí v neblokujúcom režime a určovaní callback spracovateľov. Ako metódy multiplexovania pripojení podporujú také metódy, ako sú epoll, kqueue, /dev/poll a select. Na multiplexovanie pripojení sa používa knižnica libuv, ktorá je nadstavbou nad libev na systémoch Unix a nad IOCP na Windows. Na vytvorenie poolu vlákien (thread pool) je zapojená knižnica libeio, na vykonávanie DNS dopytov v neblokujúcom režime je integrovaný c-ares. Všetky systémové volania, ktoré spôsobujú blokovanie, sa vykonávajú vnútri poolu vlákien a potom, rovnako ako spracovatelia signálov, prenášajú výsledok svojej práce späť cez anonymný kanál (pipe). Vykonávanie JavaScript kódu je zabezpečené zapojením vyvinutého engine V8 spoločnosťou Google (ďalej Microsoft vyvíja variant Node.js s engine Chakra-Core).
V podstate je Node.js podobný rámcom Perl AnyEvent, Ruby Event Machine, Python Twisted a realizácii udalostí v Tcl, ale cyklus spracovania udalostí (event loop) v Node.js je skrytý pred vývojárom a pripomína spracovanie udalostí vo webovej aplikácii, ktorá beží v prehliadači. Pri písaní aplikácií pre Node.js je potrebné zohľadniť špecifiku udalostne orientovaného programovania, napríklad, namiesto vykonávania „var result = db.query(„select..“);“ s očakávaním dokončenia práce a následným spracovaním výsledkov, v Node.js sa používa princíp asynchrónneho vykonávania, t.j. kód sa transformuje na „db.query(„select..“, function (result) {spracovanie výsledku});“, pri ktorom sa riadenie okamžite presunie na ďalší kód a výsledok dopytu bude spracovaný, akonáhle sa údaje dostanú.
Zdroj: opennet.ru
