Доступна је ЈаваСцрипт платформа Ноде.јс 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 июня.

Главна побољшања:

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

Ноде.јс платформа се може користити како за серверско одржавање веб апликација, тако и за креирање редовних клијентских и серверских мрежних програма. За проширење функционалности апликација за Ноде.јс, припремљена је велика колекција модула у којој се могу пронаћи модули са имплементацијом ХТТП, СМТП, КСМПП, ДНС, ФТП, ИМАП, ПОП3 сервера и клијената, модули за интеграцију са различитим веб оквирима, ВебСоцкет и Ајак руковаоцима, ДБМС конекторима (МиСКЛ, ПостгреСКЛ, СКЛите, МонгоДБ), шаблонским машинама, ЦСС машинама, имплементацијама крипто алгоритама и система ауторизације (ОАутх), КСМЛ парсерима.

Да би обезбедио обраду великог броја паралелних захтева, Ноде.јс користи модел извршавања асинхроног кода заснован на руковању неблокирајућим догађајима и дефиницији руковалаца повратним позивима. Подржане методе за мултиплексирање веза су еполл, ккуеуе, /дев/полл и селецт. За мултиплексирање везе користи се библиотека либув, која је додатак за либев на Уник системима и ИОЦП на Виндовс-у. Библиотека либеио се користи за креирање скупа нити, а ц-арес је интегрисан за обављање ДНС упита у режиму без блокирања. Сви системски позиви који узрокују блокирање се извршавају унутар скупа нити, а затим, као руковаоци сигнала, преносе резултат свог рада назад кроз неименовану цев (цев). Извршење ЈаваСцрипт кода је обезбеђено коришћењем В8 мотора који је развио Гоогле (поред тога, Мицрософт развија верзију Ноде.јс са Цхакра-Цоре мотором).

У својој сржи, Ноде.јс је сличан Перл АниЕвент, Руби Евент Мацхине, Питхон Твистед оквирима и имплементацији догађаја Тцл, али је петља догађаја у Ноде.јс скривена од програмера и подсећа на руковање догађајима у веб апликацији која ради у претраживачу. Када пишете апликације за ноде.јс, потребно је да узмете у обзир специфичности програмирања заснованог на догађајима, на пример, уместо да радите „вар ресулт = дб.куери("селецт..");" са чекањем завршетка рада и накнадном обрадом резултата, Ноде.јс користи принцип асинхроног извршавања, тј. код се трансформише у "дб.куери("селецт..", фунцтион (ресулт) {ресулт процессинг});", у коме ће контрола тренутно прећи на даљи код, а резултат упита ће бити обрађен како подаци стигну.

Извор: опеннет.ру

Додај коментар