Състоянието на Node.js 24.0.0, платформа за изпълнение на мрежови приложения на езика JavaScript, е официално обявено. Node.js 24.0 е класифициран в групата с дългосрочна поддръжка, но този статус ще бъде присъден само през октомври, след приключване на стабилизацията. Поддръжката на Node.js 24.x ще продължи до 30 април 2028 година. Поддръжката на предишната LTS версия Node.js 22.x ще продължи до април 2027 година, а на по-старата LTS версия 20.x до април 2026 година. Поддръжката на LTS версия 18.x е прекратена на 30 април 2025 година, а временното поддържане на Node.js 23.x ще приключи на 1 юни 2025 година.
Основни подобрения:
- В API AsyncLocalStorage по подразбиране е внедрен класът AsyncContextFrame, който е обозначен като стабилен. AsyncContextFrame реализира по-ефективен механизъм за проследяване на асинхронния контекст, което позволява значително повишаване на производителността.
- API URLPattern сега е достъпен като глобален обект, който може да се използва без явно импортиране. URLPattern предоставя възможности за проверка на съвпадението на URL с определен шаблон, което, например, може да се използва за анализиране на линкове.
- Механизмът Permission Model е подобрен и стабилизиран, позволяващ ограничаване на достъпа до определени ресурси по време на изпълнение (например, можете да забраните създаването на дъщерни процеси, да ограничите достъпа за четене или запис до определени части на файловата система, да деактивирате разширения). Вместо експерименталния флаг "—experimental-permission" за активиране на Permission Model, сега можете да използвате флага "—permission".
- Възможностите на модула node:test (test_runner), предназначен за създаване и стартиране на тестове на JavaScript, които връщат резултати в TAP формат (Test Anything Protocol), са разширени. Модулът вече автоматично изчаква завършването на вложени тестове без необходимост от използване на await.
- HTTP клиентът undici е обновен до версия 7.x, в която производителността е подобрена и е добавена поддръжка за нови възможности на HTTP.
- Двигателят V8 е обновен до версия 13.6, използвана в Chromium 136. От новите възможности в сравнение с предишното издание на Node.js се отбелязва поддръжката на типизирани масиви Float16Array, ръчно управление на ресурсите, метод на RegExp.escape (екраниране на низове за RegExp), 64-битови указатели (Memory64) в WebAssembly, методът Error.isError.
- Пакетният мениджър NPM е обновен до версия 11.
- Поддръжката на компилатора MSVC е прекратена. За компилация на платформата Windows е необходимо да се използва ClangCL.
Платформата Node.js може да се използва както за сървърно поддържане на уеб приложения, така и за създаване на обикновени клиентски и сървърни мрежови програми. За разширяване на функционалността на приложенията за Node.js е подготвена голяма колекция от модули, в която може да се намерят модули с реализация на сървъри и клиенти за HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, модули за интеграция с различни уеб фреймворкове, обработчици на WebSocket и Ajax, свързващи модули за СУБД (MySQL, PostgreSQL, SQLite, MongoDB), шаблонизатори, CSS движки, реализации на криптоалгоритми и системи за удостоверяване (OAuth), XML парсери.
За обработка на голям брой паралелни заявки, Node.js използва асинхронен модел на изпълнение на кода, основан на обработка на събития в ненарушаващ режим и определяне на callback обработчици. Поддържат се методи за мультиплексиране на съединения, като 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 е скрит от разработчика и наподобява обработката на събития в уеб приложение, работещо в браузър.
Източник: opennet.ru
