Достъпна е сървърна JavaScript платформа 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 юни.

Основни подобрения:

  • Двигателят 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 може да се използва както за сървърно поддържане на уеб приложения, така и за създаване на обикновени клиентски и сървърни мрежови програми. За разширяване на функционалността на приложенията за Node.js е подготвена голяма колекция от модули, в която може да се намерят модули с реализация на сървъри и клиенти за HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, модули за интеграция с различни уеб фреймворкове, обработчици на WebSocket и Ajax, свързващи модули за СУБД (MySQL, PostgreSQL, SQLite, MongoDB), шаблонизатори, CSS движки, реализации на криптоалгоритми и системи за удостоверяване (OAuth), XML парсери.

За да се осигури обработката на голям брой паралелни заявки, Node.js използва асинхронен модел на изпълнение на кода, основан на обработка на събития в неблокиращ режим и определяне на колбек обработчици. Поддържат се методи за мултиплексиране на съединения като epoll, kqueue, /dev/poll и select. За мултиплексиране на съединения се използва библиотеката libuv, която е надстройка над libev в Unix-системи и над IOCP в Windows. За създаване на пул от нишки (thread pool) се използва библиотеката libeio, а за извършване на DNS запитвания в неблокиращ режим е интегриран c-ares. Всички системни повиквания, които предизвикват блокиране, се изпълняват в пул от нишки и след това, подобно на обработчиците на сигнали, предават резултата от своята работа обратно чрез неназован канал (pipe). Изпълнението на JavaScript код се осигурява чрез използване на разработения от Google двигател V8 (допълнително, Microsoft развива вариант на Node.js с двигателя Chakra-Core).

По същество, Node.js е подобен на фреймворците Perl AnyEvent, Ruby Event Machine, Python Twisted и реализацията на събития в Tcl, но цикълът на обработка на събития (event loop) в Node.js е скрит от разработчика и наподобява обработката на събития в уеб приложение, работещо в браузър. При написването на приложения за Node.js е необходимо да се вземе предвид спецификата на събитийно-ориентираното програмиране. Например, вместо да извършите „var result = db.query(„select..“);“ с изчакване за завършване и последваща обработка на резултатите, в Node.js се използва принципът на асинхронно изпълнение, т.е. кодът се трансформира в „db.query(„select..“, function (result) {обработка на резултата});“, при който управлението бързо преминава към следващия код, а резултатът от запитването се обработва по мярка на постъпването на данните.

Източник: opennet.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster