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

Адбыўся рэліз Node.js 18.0, платформы для выканання сеткавых дадаткаў на мове JavaScript. Node.js 18.0 аднесены да галін з працяглым тэрмінам падтрымкі, але гэты статус будзе нададзены толькі ў кастрычніку, пасля правядзення стабілізацыі. Падтрымка Node.js 18.x будзе ажыццяўляцца да красавіка 2025 гады. Суправаджэнне мінулай LTS-галінкі Node.js 16.x працягнецца да красавіка 2024 года, а пазамінулай LTS-галінкі 14.x да красавіка 2023 года. Суправаджэнне LTS-галінкі 12.x будзе спынена 30 красавіка, а прамежкавай галінкі Node.js 17.x – 1 чэрвеня.

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

  • Рухавічок V8 абноўлены да версіі 10.1, ужывальнай у Chromium 101. У параўнанні з выпускам Node.js 17.9.0 з'явілася падтрымка такіх магчымасцяў, як метады findLast і findLastIndex для пошуку элементаў адносна канца масіва і функцыі Intl.supportedValuesOf. Палепшаны API Intl.Locale. Паскорана ініцыялізацыя палёў класаў і прыватных метадаў.
  • Уключаны па змаўчанні эксперыментальны API fetch(), прызначаны для загрузкі рэсурсаў па сетцы. Рэалізацыя заснавана на кодзе з HTTP/1.1 кліента undici і максімальна набліжана да аналагічнага API, які прадстаўляецца ў браўзэрах. У тым ліку забяспечана падтрымка інтэрфейсаў FormData, Headers, Request і Response для маніпуляцыі HTTP-загалоўкамі запытаў і адказаў. const res = await fetch('https://nodejs.org/api/documentation.json'); if (res.ok) { const data = await res.json(); console.log(data); }
  • Дададзена эксперыментальная рэалізацыя API Web Streams, які прадстаўляе доступ да струменяў дадзеных, атрыманым па сетцы. API дае магчымасць дадаць свае апрацоўшчыкі для працы з дадзенымі па меры паступлення інфармацыі па сетцы, не чакаючы загрузкі ўсяго файла. У Node.js зараз даступныя такія аб'екты, як ReadableStream*, TransformStream*, WritableStream*, TextEncoderStream, TextDecoderStream, CompressionStream і DecompressionStream.
  • У лік стабільных пераведзены API Blob, які дазваляе інкапсуляваць нязменныя волкія дадзеныя для іх бяспечнага выкарыстання ў розных працоўных струменях.
  • У лік стабільных пераведзены API BroadcastChannel, які дазваляе арганізаваць абмен паведамленнямі ў асінхронным рэжыме ў фармаце "адзін адпраўнік - шмат атрымальнікаў".
  • Дададзены эксперыментальны модуль node:test для стварэння і запуску тэстаў на мове JavaScript, якія вяртаюць вынік у фармаце TAP (Test Anything Protocol).
  • Забяспечана фармаванне гатовых зборак для Red Hat Enterprise Linux (RHEL) 8 і іншых дыстрыбутываў на базе Glibc 2.28+, уключаючы Debian 10 і Ubuntu 20.04, а таксама для macOS 10.15+. З-за праблем са зборкай рухавічка V8 часова спынена фармаванне 32-разрадных зборак для Windows.
  • Дадзеная эксперыментальная магчымасць зборкі выкананага файла Node.js з абранымі карыстачом кампанентамі, якія ініцыялізуюцца пры запуску. Для вызначэння стартавых кампанентаў у зборачны скрыпт configure дададзена опцыя "-node-snapshot-main", напрыклад, "./configure -node-snapshot-main=marked.js; name node»

Платформа 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

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