Galima serverio JavaScript platforma 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 июня.

Pagrindiniai patobulinimai:

  • Движок 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.

Node.js platforma gali būti naudojama tiek žiniatinklio programų serverių priežiūrai, tiek įprastų klientų ir serverių tinklo programoms kurti. Aplikacijų, skirtų Node.js, funkcionalumui praplėsti, parengta didelė modulių kolekcija, kurioje galima rasti modulių su HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3 serverių ir klientų diegimu, modulių integravimui su įvairiomis žiniatinklio sistemomis, „WebSocket“ ir „Ajax“ tvarkytuvais, DBMS jungtimis (MySQL, PostgreSQL, SQLite, MongoDB), šablonų varikliais, CSS varikliais, kriptovaliutų algoritmų diegimu ir autorizacijos sistemomis (OAuth), XML analizatoriais.

Siekdama užtikrinti daugelio lygiagrečių užklausų apdorojimą, Node.js naudoja asinchroninio kodo vykdymo modelį, pagrįstą neblokuojančiu įvykių tvarkymu ir atgalinio skambučio tvarkyklių apibrėžimu. Palaikomi jungčių tankinimo metodai yra epoll, kqueue, /dev/poll ir select. Ryšių tankinimui naudojama libuv biblioteka, kuri yra libev priedas Unix sistemose ir IOCP Windows sistemoje. Libeio biblioteka naudojama gijų telkiniui sukurti, o c-ares integruota DNS užklausoms atlikti neblokuojančiu režimu. Visi sistemos iškvietimai, sukeliantys blokavimą, yra vykdomi gijų telkinyje, o tada, kaip ir signalų tvarkytojai, perduoda savo darbo rezultatą atgal per neįvardytą vamzdį (vamzdį). „JavaScript“ kodo vykdymas užtikrinamas naudojant „Google“ sukurtą V8 variklį (be to, „Microsoft“ kuria „Node.js“ versiją su „Chakra-Core“ varikliu).

Iš esmės Node.js yra panašus į Perl AnyEvent, Ruby Event Machine, Python Twisted sistemas ir Tcl įvykių įgyvendinimą, tačiau Node.js įvykių ciklas yra paslėptas nuo kūrėjo ir primena įvykių tvarkymą veikiančioje žiniatinklio programoje. naršyklėje. Rašydami node.js programas, turite atsižvelgti į įvykiais pagrįsto programavimo specifiką, pavyzdžiui, užuot darę "var result = db.query("select..");" su laukimu, kol bus baigtas darbas ir vėliau apdorojami rezultatai, Node.js naudoja asinchroninio vykdymo principą, t.y. kodas paverčiamas į "db.query("select..", funkcija (rezultatas) {rezultato apdorojimas});", kurioje valdymas akimirksniu pereis prie tolimesnio kodo, o užklausos rezultatas bus apdorojamas gavus duomenis.

Šaltinis: opennet.ru

Добавить комментарий