Pjattaforma JavaScript fuq in-naħa tas-server Node.js 20.0 disponibbli

Состоялся релиз 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 июня.

Titjib ewlieni:

  • Движок V8 обновлён до версии 11.3, применяемой в Chromium 113. Из изменений по сравнению с веткой Node.js 19, в которой использовался движок Chromium 107, отмечаются функции String.prototype.isWellFormed и toWellFormed, методы Array.prototype и TypedArray.prototype для работы с копией при изменении объектов 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.

Il-pjattaforma Node.js tista 'tintuża kemm għall-manutenzjoni tas-server tal-applikazzjonijiet tal-Web kif ukoll għall-ħolqien ta' programmi regolari tan-netwerk tal-klijenti u tas-server. Biex tespandi l-funzjonalità tal-applikazzjonijiet għal Node.js, ġiet ippreparata ġabra kbira ta 'moduli, li fiha tista' ssib moduli bl-implimentazzjoni ta 'HTTP, SMTP, XMPP, DNS, FTP, IMAP, servers u klijenti POP3, moduli għall-integrazzjoni b'diversi oqfsa tal-web, WebSocket u Ajax handlers, konnetturi DBMS (MySQL, PostgreSQL, SQLite, MongoDB), magni tat-templating, magni CSS, implimentazzjonijiet ta 'algoritmi kripto u sistemi ta' awtorizzazzjoni (OAuth), parsers XML.

Biex jiġi żgurat l-ipproċessar ta 'numru kbir ta' talbiet paralleli, Node.js juża mudell ta 'eżekuzzjoni ta' kodiċi asinkronu bbażat fuq l-immaniġġjar ta 'avvenimenti li ma jimblukkawx u d-definizzjoni ta' handlers ta 'callback. Metodi appoġġjati għall-konnessjonijiet multiplexing huma epoll, kqueue, /dev/poll, u select. Għall-multiplexing tal-konnessjoni, tintuża l-librerija libuv, li hija add-on għal libev fuq sistemi Unix u IOCP fuq Windows. Il-librerija libeio tintuża biex tinħoloq pool ta 'ħajt, u c-ares huwa integrat biex iwettaq mistoqsijiet DNS f'modalità mhux imblukkata. Is-sejħiet kollha tas-sistema li jikkawżaw l-imblukkar huma eżegwiti ġewwa l-pool tal-ħajt u mbagħad, bħal dawk li jimmaniġġjaw is-sinjali, jittrasferixxu r-riżultat tax-xogħol tagħhom lura permezz ta 'pajp (pajp) bla isem. L-eżekuzzjoni tal-kodiċi JavaScript hija pprovduta permezz tal-użu tal-magna V8 żviluppata minn Google (barra minn hekk, Microsoft qed tiżviluppa verżjoni ta 'Node.js bil-magna Chakra-Core).

Fil-qalba tiegħu, Node.js huwa simili għall-Perl AnyEvent, Ruby Event Machine, Python Twisted oqfsa, u l-implimentazzjoni tal-avvenimenti Tcl, iżda l-linja tal-avvenimenti f'Node.js hija moħbija mill-iżviluppatur u tixbaħ l-immaniġġjar tal-avvenimenti f'applikazzjoni tal-web li taħdem. fil-browser. Meta tikteb applikazzjonijiet għal node.js, trid tikkunsidra l-ispeċifiċitajiet tal-ipprogrammar mmexxi mill-avvenimenti, pereżempju, minflok ma tagħmel "var result = db.query ("select..");" bl-istennija għat-tlestija tax-xogħol u l-ipproċessar sussegwenti tar-riżultati, Node.js juża l-prinċipju ta 'eżekuzzjoni asinkronika, i.e. il-kodiċi jinbidel f'"db.query ("select..", funzjoni (riżultat) {proċessar tar-riżultat});", li fih il-kontroll jgħaddi istantanjament għal aktar kodiċi, u r-riżultat tal-mistoqsija jiġi pproċessat hekk kif tasal id-data.

Sors: opennet.ru

Żid kumment