Даступная серверная JavaScript-платформа Node.js 19.0

Адбыўся рэліз 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

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