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

Відбувся реліз Node.js 19.0, платформи для виконання мережевих програм мовою JavaScript. Node.js 19 віднесено до гілки зі звичайним терміном підтримки, оновлення для якої будуть випускатися до червня 2023 року. Найближчими днями буде завершено стабілізацію гілки Node.js 18, яка отримає статус LTS і підтримуватиметься до квітня 2025 року. Супровід минулої LTS-гілки Node.js 16.0 триватиме до вересня 2023 року, а позаминулої LTS-гілки 14.0 до квітня 2023 року.

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

  • Двигун V8 оновлений до версії 10.7, що застосовується в Chromium 107. Зі змін у движку в порівнянні з гілкою Node.js 18 відзначається реалізація третьої версії API Intl.NumberFormat, в якій додані нові функції formatRange(), formatRangeToParts() і selectRang угруповання множин, нові опції округлення та завдання точності, можливість інтерпретації рядків як десяткових чисел. Також оновлено входять до комплекту залежності llhttp 8.1.0 та npm 8.19.2.
  • Запропоновано експериментальну команду "node-watch" з реалізацією режиму спостереження, що забезпечує перезапуск процесу при зміні імпортованого файлу (наприклад, у разі виконання "node-watch index.js" процес буде автоматично перезапущено при зміні index.js).
  • Для всіх вихідних HTTP/HTTPS-з'єднань включена підтримка механізму HTTP 1.1 Keep-Alive, який залишає з'єднання певний час відкритим для обробки в рамках одного з'єднання декількох HTTP-запитів. Передбачається, що застосування Keep-Alive дозволить підвищити пропускну здатність та продуктивність. За умовчанням тайм-аут утримання з'єднання відкритим виставлений в 5 секунд. У реалізацію HTTP-клієнта додано підтримку аналізу HTTP-заголовка Keep-Alive у відповідях сервера, а в реалізацію HTTP-сервера Node.js додано автоматичне від'єднання неактивних клієнтів, що використовують Keep-Alive.
  • У розряд стабільних переведений API WebCrypto, за винятком функцій, що використовують алгоритми Ed25519, Ed448, X25519 та X448. Для доступу до модуля WebCrypto тепер можна використовувати globalThis.crypto або require('node:crypto').webcrypto.
  • Видалено підтримку інструментаріїв трасування DTrace, SystemTap та ETW (Event Tracing for Windows), підтримка яких визнана недоцільною через складність супроводу в актуальному вигляді за відсутності належного плану їх підтримки.

Платформа 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

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