Server-ẹgbẹ JavaScript Syeed Node.js 20.0 wa

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

Awọn ilọsiwaju akọkọ:

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

Syeed Node.js le ṣee lo mejeeji fun itọju olupin ti awọn ohun elo wẹẹbu ati fun ṣiṣẹda alabara deede ati awọn eto nẹtiwọọki olupin. Lati faagun iṣẹ ṣiṣe ti awọn ohun elo fun Node.js, akojọpọ nla ti awọn modulu ti pese, ninu eyiti o le wa awọn modulu pẹlu imuse HTTP, SMTP, XMPP, DNS, FTP, IMAP, awọn olupin POP3 ati awọn alabara, awọn modulu fun iṣọpọ pẹlu orisirisi awọn ilana wẹẹbu, WebSocket ati Ajax handlers , DBMS asopo (MySQL, PostgreSQL, SQLite, MongoDB), templating enjini, CSS enjini, awọn imuse ti crypto algoridimu ati ašẹ awọn ọna šiše (OAuth), XML parsers.

Lati rii daju sisẹ ti nọmba nla ti awọn ibeere ti o jọra, Node.js nlo awoṣe ipaniyan koodu asynchronous ti o da lori mimu iṣẹlẹ ti kii ṣe idilọwọ ati asọye ti awọn olutọju ipe. Awọn ọna ti a ṣe atilẹyin fun awọn asopọ pọpọ jẹ epoll, kqueue, /dev/poll, ati yan. Fun multixing asopọ, ile-ikawe libuv ti lo, eyiti o jẹ afikun fun libev lori awọn eto Unix ati IOCP lori Windows. Ile-ikawe libeio ni a lo lati ṣẹda adagun okun, ati c-ares ti ṣepọ lati ṣe awọn ibeere DNS ni ipo ti kii ṣe idinamọ. Gbogbo awọn ipe eto ti o fa idinamọ ni a ṣe ninu adagun okun ati lẹhinna, bii awọn oluṣakoso ifihan agbara, gbe abajade iṣẹ wọn pada nipasẹ paipu ti a ko darukọ (paipu). Awọn ipaniyan ti koodu JavaScript ti pese nipasẹ lilo ẹrọ V8 ti o dagbasoke nipasẹ Google (ni afikun, Microsoft n ṣe agbekalẹ ẹya Node.js pẹlu ẹrọ Chakra-Core).

Ni ipilẹ rẹ, Node.js jẹ iru si Perl AnyEvent, Ruby Event Machine, Python Twisted frameworks, ati imuse iṣẹlẹ iṣẹlẹ Tcl, ṣugbọn iṣẹlẹ iṣẹlẹ ni Node.js ti wa ni pamọ lati ọdọ olupilẹṣẹ ati ki o jọmọ mimu iṣẹlẹ ni ohun elo wẹẹbu nṣiṣẹ ni browser. Nigbati o ba kọ awọn ohun elo fun node.js, o nilo lati ṣe akiyesi awọn pato ti siseto-iṣẹlẹ, fun apẹẹrẹ, dipo ṣiṣe "var esi = db.query ("yan ...");" pẹlu idaduro fun ipari iṣẹ ati ṣiṣe atẹle ti awọn abajade, Node.js lo ilana ti ipaniyan asynchronous, ie. koodu naa ti yipada si "db.query ("yan ...", iṣẹ (abajade) {sisẹ abajade});", ninu eyiti iṣakoso yoo kọja lẹsẹkẹsẹ si koodu siwaju sii, ati pe abajade ibeere yoo ṣe ilana bi data ti de.

orisun: opennet.ru

Fi ọrọìwòye kun