Адбыўся рэліз Node.js 19.0, платформы для выканання сеткавых дадаткаў на мове JavaScript. Node.js 19 аднесены да галіны са звычайным тэрмінам падтрымкі, абнаўленні для якой будуць выпускацца да чэрвеня 2023 года. У бліжэйшыя дні будзе завершана стабілізацыя веткі Node.js 18, якая атрымае статус LTS і будзе падтрымлівацца да красавіка 2025 года. Суправаджэнне мінулай LTS-галінкі Node.js 16.0 працягнецца да верасня 2023 года, а пазамінулай LTS-галінкі 14.0 да красавіка 2023 года.
Асноўныя паляпшэнні:
- Рухавічок V8 абноўлены да версіі 10.7, якая ўжываецца ў Chromium 107. Са змен у рухавічку ў параўнанні з галінкай Node.js 18 адзначаецца рэалізацыя трэцяй версіі API Intl.NumberFormat, у якой дададзены новыя функцыі formatRange(), formatRangeToParts() і selectRang групоўка мностваў, новыя опцыі акруглення і заданні дакладнасці, магчымасць інтэрпрэтацыі радкоў як дзесятковых лікаў. Таксама абноўлены ўваходныя ў камплект залежнасці llhttp 8.1.0 і npm 8.19.2.
- Прапанавана эксперыментальная каманда «node-watch» з рэалізацыяй рэжыму назірання, які забяспечвае перазапуск працэсу пры змене імпартаванага файла (напрыклад, у выпадку выканання «node-watch index.js» працэс будзе аўтаматычна перазапушчаны пры змене index.js).
- Для ўсіх выходных HTTP/HTTPS-злучэнняў уключаная падтрымка механізму HTTP 1.1 Keep-Alive, які пакідае злучэнне пэўны час адкрытым для апрацоўкі ў рамках аднаго злучэння некалькіх HTTP-запытаў. Мяркуецца, што ўжыванне Keep-Alive дасць магчымасць павысіць прапускную здольнасць і прадукцыйнасць. Па змаўчанні таймаўт ўтрымання злучэння адкрытым выстаўлены ў 5 секунд. У рэалізацыю HTTP-кліента дададзена падтрымка разбору HTTP-загалоўка Keep-Alive у адказах сервера, а ў рэалізацыю HTTP-сервера Node.js дададзена аўтаматычнае адлучэнне неактыўных кліентаў, якія выкарыстоўваюць Keep-Alive.
- У разрад стабільных пераведзены API WebCrypto, за выключэннем функцый, якія выкарыстоўваюць алгарытмы Ed25519, Ed448, X25519 і X448. Для доступу да модуля WebCrypto зараз можна выкарыстоўваць globalThis.crypto ці require('node:crypto').webcrypto.
- Выдалена падтрымка інструментарыяў трасіроўкі DTrace, SystemTap і ETW (Event Tracing for Windows), падтрыманне якіх прызнана немэтазгодным з-за складанасці суправаджэння ў актуальным выглядзе пры адсутнасці належнага плана іх падтрымкі.
Платформа Node.js можа быць скарыстана як для сервернага суправаджэння працы Web-прыкладанняў, так і для стварэння звычайных кліенцкіх і серверных сеткавых праграм. Для пашырэння функцыянальнасці прыкладанняў для Node.js падрыхтавана вялікая калекцыя модуляў, у якой можна знайсці модулі з рэалізацыяй сервераў і кліентаў HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, модулі для інтэграцыі з рознымі web-фрэймворкамі, апрацоўшчыкі WebSocket і Aja , канектары да СКБД (MySQL, PostgreSQL, SQLite, MongoDB), шаблонізатары, CSS-рухавічкі, рэалізацыі крыптаалгарытмаў і сістэм аўтарызацыі (OAuth), 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-дадатку, які працуе ў браўзэры. Пры напісанні прыкладанняў для node.js неабходна ўлічваць спецыфіку падзейна-арыентаванага праграмавання, напрыклад, замест выканання "var result = db.query("select..");" з чаканнем завяршэння працы і наступнай апрацоўкай вынікаў, у Node.js выкарыстоўвае прынцып асінхроннага выканання, г.зн. код трансфармуецца ў "db.query("select..", function (result) {апрацоўка выніку});", пры якім кіраванне імгненна пяройдзе да наступнага кода, а вынік запыту будзе апрацаваны па меры паступлення дадзеных.
Крыніца: opennet.ru