Апублікавана платформа Node.js 23.0 з пачатковай падтрымкай мовы TypeScript

Адбыўся рэліз Node.js 23.0.0, платформы для выканання сеткавых дадаткаў на мове JavaScript. Node.js 23.0 аднесены да прамежкавых галін, суправаджэнне якіх ажыццяўляецца на працягу 7 месяцаў (да чэрвеня 2025 года). У бліжэйшыя дні будзе завершана стабілізацыя веткі Node.js 22, якая 29 кастрычніка атрымае статус LTS і будзе падтрымлівацца да красавіка 2027 года. Падтрымка мінулых LTS-галінак Node.js 20.x і 18.x працягнецца да красавіка 2026 і 2025 гадоў адпаведна.

Асноўныя паляпшэнні:

  • Дададзена эксперыментальная падтрымка мовы TypeScript, які дапускае відавочнае вызначэнне тыпаў. Падтрымка ўключаецца пры дапамозе опцый "-experimental-strip-types" і "-experimental-transform-types". У выпадку першай опцыі праца з TypeScript зводзіцца да ачысткі спецыфічных для дадзенай мовы азначэнняў тыпаў (праверка тыпаў не выконваецца, код проста прыводзіцца да выгляду JavaScript без тыпаў). Другая опцыя ажыццяўляе пераўтварэнне ў код на JavaScript некаторых элементаў сінтаксісу TypeScript, напрыклад, пералічэнняў (enum) і прастор імёнаў (namespace).
  • Уключана па змаўчанні магчымасць выкарыстання выкліку "require()" для загрузкі JavaScript-модуляў ESM (ECMAScript Modules) у сінхронным рэжыме. ESM-модулі прымяняюцца ў браўзэрах і ідуць на змену модулям CommonJS, спецыфічным для Node.js. Для загрузкі праз "require()" у Node.js ESM-модуль павінен выконвацца ў сінхронным рэжыме (без await на верхнім узроўні).
  • Забяспечана аўтаматычнае выяўленне ESM-модуляў у файлах без пашырэння або з пашырэннем ".js". Раней падобныя файлы тлумачыліся як модулі CommonJS, калі ў размешчаным у тым жа каталогу файле package.json відавочна не паказваўся іх тып ("type": "module"). У новай версіі для файлаў, тып якіх не пазначаны ў package.json, спачатку ажыццяўляецца спроба загрузкі як модуля CommonJS, а калі гэта не атрымалася, то як модуля ESM.
  • Дададзена эксперыментальная рэалізацыя сумяшчальнага з браўзэрамі API Web Storage, прызначанага для сталага (клас localStorage) або часавага (клас sessionStorage) захоўванні дадзеных у фармаце ключ/значэнне. Для ўключэння падтрымкі Web Storage патрабуецца запуск са сцягам "-experimental-webstorage" і ўказанне шляху да файла са сховішчам праз сцяг "-localstorage-file".
  • Дададзены эксперыментальны API SQLite для працы з базамі дадзеных, выкарыстоўваючы мову запытаў SQL і сховішча на базе бібліятэкі SQLite. Апроч захоўвання базы дадзеных у файле на дыску, яе таксама можна размяшчаць у памяці, паказаўшы замест імя файла ":memory:". Вышэйадзначанай API Web Storage таксама рэалізаваны па-над SQLite, што прывяло да дадання SQLite у лік залежнасцяў для Node.js.
  • Абвешчана стабільнай каманда «node-run», прызначаная для запуску скрыптоў, вызначаных у файле package.json.
  • Рэалізавана апцыянальная падтрымка кэшавання скампіляванага кода на дыску для істотнага паскарэння запуску модуляў. Уключэнне кэшавання ажыццяўляецца праз зменную асяроддзі NODE_COMPILE_CACHE. Па сваім прызначэнні магчымасць нагадвае пакет v8-compile-cache, але адрозніваецца больш высокай прадукцыйнасцю і падтрымкай модуляў ESM.
  • Праведзена аптымізацыя аб'екта Buffer, якая дазволіла значна павялічыць прадукцыйнасць метадаў Buffer.copy() і Buffer.write().
  • Падвышаная прадукцыйнасць модуля node:fs, у якім таксама скарочана лік выклікаў кода на C++ падчас прац.
  • Рухавічок V8 абноўлены да версіі 12.9, ужывальнай у Chromium 129.
  • Выдалена падтрымка 32-разрадных сістэм з АС Windows.
  • З-за ўкараненні ў Node.js і рухавічку V8 магчымасцяў, вызначаных у стандарце C++20, падвышаны патрабаванні да версіі кампілятара GCC. Для зборкі Node.js зараз патрабуецца прынамсі версія GCC 12.

Платформа Node.js можа быць скарыстана як для сервернага суправаджэння працы Web-прыкладанняў, так і для стварэння звычайных кліенцкіх і серверных сеткавых праграм. Для пашырэння функцыянальнасці прыкладанняў для Node.js падрыхтавана вялікая калекцыя модуляў, у якой можна знайсці модулі з рэалізацыяй сервераў і кліентаў HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, модулі для інтэграцыі з рознымі web-фрэймворкамі, апрацоўшчыкі WebSocket і Ajax, канектары да СКБД (MySQL, PostgreSQL, SQLite, MongoDB), шаблонізатары, CSS-рухавічкі, рэалізацыі XML-парсеры.

Для забеспячэння апрацоўкі вялікай колькасці паралельных запытаў Node.js задзейнічае асінхронную мадэль запуску кода, заснаваную на апрацоўцы падзей у неблакіруючым рэжыме і вызначэнні callback-апрацоўшчыкаў. У якасці спосабаў мультыплексавання злучэнняў падтрымліваюцца такія метады, як epoll, kqueue, /dev/poll і select. Для мультыплексавання злучэнняў выкарыстоўваецца бібліятэка libuv, якая з'яўляецца надбудовай над libev у сістэмах Unix і над IOCP у Windows. Для стварэння пула патокаў (thread pool) задзейнічана бібліятэка libeio, для выканання DNS-запытаў у неблакіруючым рэжыме інтэграваны c-ares. Усе сістэмныя выклікі, якія выклікаюць блакаванне, выконваюцца ўсярэдзіне пула струменяў і затым, як і апрацоўшчыкі сігналаў, перадаюць вынік сваёй працы зваротна праз неназваны канал (pipe).

Выкананне JavaScript-кода забяспечваецца праз задзейнічанне распрацаванага кампаніяй Google рухавічка V8 (дадаткова Microsoft развівае варыянт Node.js з рухавіком Chakra-Core). Па сваёй сутнасці Node.js падобны на фрэймворкі Perl AnyEvent, Ruby Event Machine, Python Twisted і рэалізацыю падзей у Tcl, але цыкл апрацоўкі падзей (event loop) у Node.js скрыты ад распрацоўніка і нагадвае апрацоўку падзей у web-дадатку, які працуе ў браўзэры.

Крыніца: opennet.ru

Дадаць каментар