Доступна JavaScript-платформа Node.js 22.0.0

Відбувся реліз Node.js 22.0, платформи для виконання мережевих програм мовою JavaScript. Node.js 22.0 віднесений до гілок з тривалим терміном підтримки, але цей статус буде надано лише у жовтні, після проведення стабілізації. Підтримка Node.js 22.x здійснюватиметься до 30 квітня 2027 року. Супровід минулої LTS-гілки Node.js 20.x триватиме до квітня 2026 року, а позаминулої LTS-гілки 18.x до квітня 2025 року. Супровід проміжної гілки Node.js 21.x буде припинено 1 червня 2024 року.

Основні покращення:

  • Двигун V8 оновлений до версії 12.4, яка застосовується в Chromium 124.
    • Підтримка розширення WasmGC, що спрощує портування в WebAssembly програм, написаних мовами програмування, які використовують збирач сміття (Kotlin, PHP, Java тощо). WasmGC додає нові типи структур та масивів, для яких може застосовуватись нелінійне виділення пам'яті.
    • Підтримка методу Array.fromAsync(), в асинхронному режимі повертає новий екземпляр об'єкта Array, скопійований з об'єктів, що нагадують масив, що перераховуються (iterable) або асинхронно перераховуються (async iterable).
    • Підтримка методів для роботи з ітераторами, таких як .map, .filter, .find, .take, .drop, .forEach та .reduce.
    • Підтримка об'єкта Set, що визначає колекцію значень та пропонує методи з реалізацією типових операцій роботи з множинами, таких як перетин, об'єднання, різниця та доповнення.
  • За замовчуванням включений оптимізуючий JIT-компілятор Maglev, націлений на швидку генерацію високопродуктивного машинного коду для коду, що активно використовується, на JavaScript. Включення Maglev дозволяє помітно прискорити роботу короткоживучих CLI-додатків, які не виконують тривалих операцій, наприклад, час проходження тесту Jetstrea скорочується на 7.5%, а тесту Speedometer на 5%.
  • Прискорено роботу з потоками за рахунок збільшення значення опції highWaterMark з 16 KB до 65 KB (визначає ліміт, до якого виконується буферизація запису). Зміна призводить до збільшення споживання пам'яті, тому програмам, розрахованим на роботу з обмеженим об'ємом ОЗП, можливо, потрібно повернути старе значення через виклик setDefaultHighWaterMark().
  • Підвищено продуктивність API fetch() та test runner за рахунок підвищення ефективності створення екземплярів AbortSignal. Підвищено продуктивність API, пов'язаних із синхронною роботою з файловими системами.
  • Надано експериментальну можливість використання виклику «require()» для завантаження JavaScript-модулів ESM (ECMAScript Modules) у синхронному режимі. ESM-модулі застосовуються в браузерах і змінюються модулям CommonJS, специфічним для Node.js. Для завантаження через "require()" ESM-модуль повинен виконуватися в синхронному режимі (без await на верхньому рівні). Підтримка включається через прапор «experimental-require-module».
  • Додано експериментальну можливість запуску скриптів, визначених у файлі package.json, використовуючи команду «-run ».
  • У категорію стабільних переведена команда node-watch з реалізацією режиму спостереження, що забезпечує перезапуск процесу при зміні імпортованого файлу (наприклад, у разі виконання node-watch index.js процес буде автоматично перезапущений при зміні index.js).
  • Стабілізовано вбудовану реалізацію API WebSocket, що дозволяє використовувати WebSocket у режимі клієнта без встановлення додаткових залежностей.
  • Додано часткову підтримку API Navigator.
  • В API Webstreams додано підтримку формату стиснення deflate-raw.
  • Модуль node:fsmodule додає функції glob і globSync для зіставлення файлових шляхів за зразком.
  • Поліпшено обробку некоректно налаштованих стеків IPv6. Реалізовано алгоритм Happy Eyeballs для швидкого відкату у разі проблем із роботою IPv6.
  • Оголошено застарілим API util.
  • Оновлені версії залежностей: npm 10.5.1, libuv 1.48.0, simdutf 5.2.3, c-ares 1.28.1, zlib 1.3.0.1-motley-24c07df, simdjson to 3.8.0, 2.7.7. .

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

Джерело: opennet.ru

Додати коментар або відгук