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

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

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

  • Рухавічок V8 абноўлены да версіі 11.3, ужывальнай у Chromium 113. З змен у параўнанні з галінкай Node.js 19, у якой выкарыстоўваўся рухавічок Chromium 107, адзначаюцца функцыі String.prototype.isWellFormed і toWellFormed, метады Array.prototype і Typ з копіяй пры змене аб'ектаў Array і TypedArray, сцяг "v" у RegExp, падтрымка змены памеру ArrayBuffer і павелічэнні памеру SharedArrayBuffer, хваставая рэкурсія (tail-call) у 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

    Для праверкі доступу прапануецца выкарыстоўваць метад process.permission.has(), напрыклад, "process.permission.has('fs.write',"/tmp/test)).

  • Апрацоўшчыкі вонкавых модуляў ECMAScript (ESM), загружаных праз опцыю «-experimental-loader», зараз выконваюцца ў асобным струмені, ізаляваным ад асноўнага струменя, што выключае скрыжаванне кода прыкладанняў і загружаных ESM-модуляў. Па аналогіі з браўзэрамі метад import.meta.resolve() пры выкліку з прыкладання зараз выконваецца ў сінхронным рэжыме. У адной з наступных галінак Node.js падтрымку загрузкі ESM плануюць перавесці ў разрад стабільных магчымасцяў.
  • У лік стабільны пераведзены модуль node:test (test_runner), прызначаны для стварэння і запуску тэстаў на мове JavaScript, якія вяртаюць вынік у фармаце TAP (Test Anything Protocol).
  • Сфарміравана асобная каманда распрацоўшчыкаў, якая адказвае за аптымізацыю прадукцыйнасці, якая пры падрыхтоўцы новага адгалінавання правяла працу па паскарэнні розных runtime-кампанентаў, уключаючы разбор URL, fetch() і EventTarget. Напрыклад, накладныя выдаткі пры ініцыялізацыі EventTarget паніжаныя ў два разы, значна падвышаная прадукцыйнасць метаду URL.canParse() і падвышаная эфектыўнасць працы таймераў. Акрамя таго, у склад уключаны выпуск высокапрадукцыйнага парсера URL - Ada 2.0, напісанага на мове C++.
  • Працягнута развіццё эксперыментальнай магчымасці для пастаўкі прыкладанняў у форме аднаго выкананага файла (SEA, Single Executable Applications). Стварэнне выкананага файла зараз патрабуе падстаноўкі блоба, які фармуецца на аснове файла канфігурацыі ў фармаце JSON (замест падстаноўкі JavaScript-файла).
  • Палепшана сумяшчальнасць API Web Crypto з рэалізацыямі ад іншых праектаў.
  • Дададзена афіцыйная падтрымка Windows на сістэмах ARM64.
  • Прадоўжана рэалізацыя падтрымкі пашырэнняў WASI (WebAssembly System Interface) для стварэння адасобленых WebAssembly-прыкладанняў. Прыбрана неабходнасць указання спецыяльнага флага каманднага радка для ўключэння падтрымкі WASI.

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

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