Сервер тараптагы JavaScript платформасы Node.js 21.0 жеткиликтүү

Состоялся релиз Node.js 21.0, платформы для выполнения сетевых приложений на языке JavaScript. Поддержка ветки Node.js 21.0 будет осуществляться в течение 6 месяцев. В ближайшие дни будет завершена стабилизация ветки Node.js 20, которая получит статус LTS и будет поддерживаться до апреля 2026 года. Сопровождение прошлой LTS-ветки Node.js 18.0 продлится до сентября 2025 года, а позапрошлой LTS-ветки 16.0 до апреля 2024 года.

Негизги жакшыртуулар:

  • Объявлен стабильным API Fetch, предназначенный для загрузки ресурсов по сети и упрощающий написание универсального JavaScript-кода, пригодного для работы на стороне сервера и клиента. Реализация основана на коде из HTTP/1.1 клиента undici и максимально приближена к аналогичному API, предоставляемому в браузерах. API включает в себя метод fetch() и объекты Headers. Request и Response, представляющие HTTP-заголовки, запрос и ответ. const res = await fetch(‘https://nodejs.org/api/documentation.json’); if (res.ok) { const data = await res.json(); console.log(data); }
  • Стабилизирована поддержка API WebStreams, предоставляющего доступ к потокам данных, полученным по сети. API даёт возможность добавить свои обработчики, работающие с данными по мере поступления информации по сети, не дожидаясь загрузки всего файла. В Node.js доступны такие объекты, как ReadableStream*, TransformStream*, WritableStream*, TextEncoderStream, TextDecoderStream, CompressionStream и DecompressionStream.
  • Добавлена экспериментальная реализация клиента WebSocket, совместимая с браузерами. Для включения поддержки WebSocket предусмотрен флаг «—experimental-websocket».
  • Добавлен экспериментальный режим использования по умолчанию реализации JavaScript-модулей ESM (ECMAScript Modules, применяется в модулях для браузеров) вместо CommonJS (специфичен для Node.js). Изменение не затрагивает модули, формат которых явно определён через поле «type» в package.json, задан через флаг «—input-type» или очевиден в силу расширения файла (.mjs для ESM, .cjs для CommonJS). При этом модули, которые явно не определены как CommonJS (например, имеют расширение «.js»), при включении нового режима будут восприниматься как модули ESM. Для активации новых настроек модулей предложен флаг «—experimental-default-type».
  • Движок V8 обновлён до версии 11.8, применяемой в Chromium 118, в котором появилась поддержка метода ArrayBuffer.prototype.transfer, возможности группировки массивов (метод groupBy) и WebAssembly-инструкций обработки констант (i32.add, i32.sub, i32.mul, i64.add, i64.sub и i64.mul).
  • Прекращена поддержка обработчика globalPreload, вместо которого для настройки модулей следует использовать вызовы register и initialize.
  • В функцию fs.writeFile добавлена опция «flush» для принудительного сброса данных на накопитель после каждой операции записи.
  • Повышена производительность кода, связанного с разбором URL, API fetch, streams, node:fs и HTTP.
  • Добавлен глобальный объект navigator. Например, для получения данных о числе ядер CPU можно использовать свойство navigator.hardwareConcurrency.
  • В параметре «—test» добавлена поддержка glob-масок для выбора запускаемых тестов (например, можно указать «—test **/*.test.js.»).
  • Обновлены входящие в комплект пакетный менеджер npm 10.2.0 и парсер llhttp 9.1.2.
  • Прекращена поддержка Visual Studio 2019 и версий macOS старее 11.0.

Node.js платформасын веб-тиркемелерди сервердик колдоо үчүн, ошондой эле кадимки кардар жана сервердик тармак программаларын түзүү үчүн колдонсо болот. Node.js үчүн тиркемелердин функционалдуулугун кеңейтүү үчүн модулдардын чоң коллекциясы даярдалды, анда HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3 серверлерин жана кардарларын ишке ашыруу менен модулдарды, интеграциялоо үчүн модулдарды таба аласыз. ар кандай веб алкактары, WebSocket жана Ajax иштеткичтери, DBMS туташтыргычтары (MySQL, PostgreSQL, SQLite, MongoDB), шаблон кыймылдаткычтары, CSS кыймылдаткычтары, криптографиялык алгоритмдердин жана авторизация системаларынын (OAuth) ишке ашырылышы, XML талдоочулары.

Көп сандаган параллелдүү суроо-талаптарды иштетүү үчүн Node.js бөгөттөлбөгөн окуяны иштетүүгө жана кайра чалууларды иштетүүчүлөрдү аныктоого негизделген асинхрондук кодду аткаруу моделин колдонот. Мультиплексирлөө үчүн колдоого алынган ыкмалар epoll, kqueue, /dev/poll жана тандоону камтыйт. Туташуу мультиплекси үчүн libuv китепканасы колдонулат, ал Unix системаларында libev жана Windows IOCP үчүн кошумча болуп саналат. Libeio китепканасы жип бассейнин түзүү үчүн колдонулат, ал эми c-ares бөгөттөлбөгөн режимде DNS сурамдарын аткаруу үчүн интеграцияланган. Бөгөттөөгө алып келген бардык системалык чалуулар жип бассейнинин ичинде аткарылат жана андан кийин сигнал иштеткичтер сыяктуу, өз ишинин натыйжасын аты жок түтүк аркылуу кайра өткөрүп беришет. JavaScript кодунун аткарылышы Google тарабынан иштелип чыккан V8 кыймылдаткычын колдонуу аркылуу камсыздалат (мындан тышкары, Microsoft Chakra-Core кыймылдаткычы менен Node.js версиясын иштеп чыгууда).

Негизинен, Node.js Perl AnyEvent, Ruby Event Machine, Python Twisted алкактары жана Tcl ичиндеги окуяларды ишке ашырууга окшош, бирок Node.js ичиндеги окуя цикли иштеп чыгуучудан жашырылган жана веб-тиркемедеги окуяны иштетүүгө окшош. браузерде иштеп жатат. node.js үчүн тиркемелерди жазууда, мисалы, "var result = db.query("select..");" кылуунун ордуна, окуяга негизделген программалоонун өзгөчөлүктөрүн эске алуу керек. иштин бүтүшүн күтүү жана натыйжаларды андан ары иштетүү менен, Node.js асинхрондук аткаруу принцибин колдонот, б.а. код "db.query("тандоо..", функция (натыйжа) {натыйжаларды иштетүү});" түрүнө айландырылат, мында башкаруу дароо кийинки кодго өтөт жана сурамдын натыйжасы маалыматтар келгенде иштетилет.

Source: opennet.ru

Комментарий кошуу