Platforma JavaScript-a server-side Node.js 20.0 heye

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

Pêşveçûnên sereke:

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

Platforma Node.js hem ji bo domandina servera serîlêdanên Webê hem jî ji bo afirandina bernameyên torê yên xerîdar û serverê yên birêkûpêk dikare were bikar anîn. Ji bo berfirehkirina fonksiyona sepanan ji bo Node.js, berhevokek mezin a modulan hatiye amadekirin, ku tê de hûn dikarin modulên bi pêkanîna HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3 pêşkêşker û xerîdar, modulên ji bo yekbûnê bibînin. bi çarçoveyên cûrbecûr yên malperê, hilgirên WebSocket û Ajax, girêdanên DBMS (MySQL, PostgreSQL, SQLite, MongoDB), motorên şablonê, motorên CSS, pêkanînên algorîtmayên krîpto û pergalên destûrnameyê (OAuth), parserên XML.

Ji bo ku pêvajokirina hejmareke mezin ji daxwazên paralel pêk were, Node.js modelek darvekirina kodê ya asynchronous li ser bingeha destwerdana bûyera ne-astengker û pênase rêvekerên vegerandina bangê bikar tîne. Rêbazên piştgirî ji bo girêdanên piralî epoll, kqueue, / dev/poll, û hilbijartî ne. Ji bo piralîkirina girêdanê, pirtûkxaneya libuv tê bikar anîn, ku ji bo libev li ser pergalên Unix û IOCP li ser Windows-ê pêvekek e. Pirtûkxaneya libeio ji bo afirandina hewzek tîrêjê tê bikar anîn, û c-ares ji bo pêkanîna pirsên DNS-ê di moda ne-astengkirinê de tête yek kirin. Hemî bangên pergalê yên ku dibin sedema astengkirinê di hundurê hewza tîrêjê de têne darve kirin û dûv re, mîna hilgirên sînyalê, encama xebata xwe bi boriyek (boriyek) nenavkirî veguhezînin. Bicîhkirina koda JavaScriptê bi karanîna motora V8 ya ku ji hêla Google ve hatî pêşve xistin ve tê peyda kirin (ji bilî vê, Microsoft guhertoyek Node.js bi motora Chakra-Core ve pêşve dike).

Di bingeha xwe de, Node.js dişibihe Perl AnyEvent, Ruby Event Machine, çarçoveyên Python Twisted, û pêkanîna bûyera Tcl-ê, lê lûleya bûyerê li Node.js ji pêşdebiran veşartî ye û dişibe birêvebirina bûyerê di serîlêdana tevnerê de ku dixebite. di gerokê de. Dema ku serîlêdanan ji bo node.js dinivîsin, hûn hewce ne ku hûn taybetmendiyên bernamesaziya bûyer-rêveberê binirxînin, mînakî, li şûna ku hûn "var result = db.query("hilbijêre..");" digel li benda qedandina kar û dûv re hilberandina encaman, Node.js prensîba darvekirina asynchronous bikar tîne, ango. kod tê guheztin "db.query("hilbijêre..", fonksiyona (encam) {pêvajoya encam});", ku tê de kontrol dê tavilê derbasî koda din bibe, û encama pirsê dê wekî daneyan were hilberandin.

Source: opennet.ru

Add a comment