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

Відбувся реліз Node.js 18.0, платформи для виконання мережевих програм мовою JavaScript. Node.js 18.0 віднесений до гілок з тривалим терміном підтримки, але цей статус буде надано тільки в жовтні, після проведення стабілізації. Підтримка Node.js 18.x здійснюватиметься до квітня 2025 року. Супровід минулої LTS-гілки Node.js 16.x триватиме до квітня 2024 року, а позаминулої LTS-гілки 14.x до квітня 2023 року. Супровід LTS-гілки 12.x буде припинено 30 квітня, а проміжної гілки Node.js 17.x - 1 червня.

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

  • Двигун V8 оновлено до версії 10.1, застосовуваної у Chromium 101. У порівнянні з випуском Node.js 17.9.0 з'явилася підтримка таких можливостей, як методи findLast та findLastIndex для пошуку елементів щодо кінця масиву та функції Intl.supportedValuesOf. Покращено API Intl.Locale. Прискорено ініціалізацію полів класів та приватних методів.
  • За замовчуванням включений експериментальний API fetch(), призначений для завантаження ресурсів по мережі. Реалізація заснована на коді з HTTP/1.1 клієнта undici та максимально наближена до аналогічного API, що надається у браузерах. У тому числі забезпечена підтримка інтерфейсів FormData, 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 Web Streams, що надає доступ до потоків даних, отриманих по мережі. API дає можливість додати свої обробники до роботи з даними у міру надходження інформації в мережі, не чекаючи завантаження всього файла. У Node.js тепер доступні такі об'єкти, як ReadableStream*, TransformStream*, WritableStream*, TextEncoderStream, TextDecoderStream, CompressionStream та DecompressionStream.
  • До стабільних переведений API Blob, який дозволяє інкапсулювати незмінні сирі дані для їх безпечного використання в різних робочих потоках.
  • До стабільних переведений API BroadcastChannel, що дозволяє організувати обмін повідомленнями в асинхронному режимі у форматі «один відправник — багато одержувачів».
  • Доданий експериментальний модуль node:test для створення та запуску тестів мовою JavaScript, що повертають результат у форматі TAP (Test Anything Protocol).
  • Забезпечено формування готових збірок для Red Hat Enterprise Linux (RHEL) 8 та інших дистрибутивів на базі Glibc 2.28+, включаючи Debian 10 та Ubuntu 20.04, а також macOS 10.15+. Через проблеми зі складання двигуна V8 тимчасово припинено формування 32-розрядних збірок для Windows.
  • Надано експериментальну можливість складання виконуваного файлу Node.js з обраними користувачем компонентами, які ініціалізуються під час запуску. Для визначення стартових компонентів у складальний скрипт configure додано опцію «—node-snapshot-main», наприклад, «./configure —node-snapshot-main=marked.js; name node»

Платформа Node.js може бути використана як для серверного супроводу роботи Web-додатків, так і для створення звичайних клієнтських та серверних мережних програм. Для розширення функціональності додатків для Node.js підготовлено велику колекцію модулів, в якій можна знайти модулі з реалізацією серверів та клієнтів HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, модулі для інтеграції з різними web-фреймворками, обробники WebSocket та Aja , конектори до СУБД (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 прихований від розробника та нагадує обробку подій у web-додатку, що працює у браузер. При написанні програм для node.js необхідно враховувати специфіку подієво-орієнтованого програмування, наприклад, замість виконання «var result = db.query(«select..»);» з очікуванням завершення роботи та подальшої обробки результатів, в Node.js використовує принцип асинхронного виконання, тобто. код трансформується в "db.query("select..", function (result) {обробка результату});", при якому керування миттєво перейде до подальшого коду, а результат запиту буде оброблений у міру надходження даних.

Джерело: opennet.ru

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