Випуск серверної JavaScript-платформи Node.js 16.0

Відбувся реліз Node.js 16.0, платформи для виконання мережевих програм мовою JavaScript. Node.js 16.0 віднесений до гілок з тривалим терміном підтримки, але цей статус буде надано лише у жовтні, після проведення стабілізації. Підтримка Node.js 16.0 буде здійснюватись до квітня 2023 року. Супровід минулої LTS-гілки Node.js 14.0 триватиме до квітня 2023 року, а позаминулої LTS-гілки 12.0 до квітня 2022 року. Супровід LTS-гілки 10.0 буде припинено через 10 днів.

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

  • Двигун V8 оновлений до версії 9.0 (у Node.js 15 використовувався випуск 8.6), що дозволило реалізувати в Node.js 16 такі можливості, як властивість «indices» для регулярних виразів (включає масив з початковими та кінцевими позиціями груп збігів), метод Atomics .waitAsync (асинхронна версія Atomics.wait), підтримка використання ключового слова await у модулях на верхньому рівні. Прискорено виклик функцій у ситуації, коли кількість переданих аргументів не відповідає визначеним у функції параметрам.
  • Стабілізовано API Timers Promises, що надає альтернативний набір функцій для роботи з таймером, що повертають об'єкти Promise на виході, що дозволяє обійтися без використання util.promisify(). import { setTimeout } from 'timers/promises'; async function run() { await setTimeout(5000); console.log('Hello, World!'); } run();
  • Додано експериментальну реалізацію API Web Crypto, призначену для виконання базових криптографічних операцій на стороні web-додатків, таких як маніпуляції з криптографічними хешами, генерація та перевірка цифрових підписів, кодування та декодування даних з використанням різних методів шифрування, формування криптографічно надійних випадкових чисел. В API також передбачені функції для генерації ключів та управління ними.
  • N-API (API для розробки додатків) оновлено до версії 8.
  • Здійснено перехід на новий випуск пакетного менеджера NPM 7.10.
  • Стабілізовано реалізацію класу AbortController, заснованого на Web API AbortController і що дозволяє скасовувати сигнали у вибраних API на основі Promise.
  • Стабілізовано підтримку третьої версії формату Source Map, що використовується для зіставлення згенерованих, оброблених або упакованих модулів з оригінальним вихідним кодом.
  • Для сумісності із застарілими Web API додані методи buffer.atob(data) та buffer.btoa(data).
  • Почалося формування збірок нових пристроїв Apple, оснащених ARM-чіпом M1.
  • На платформі Linux вимоги до версії компілятора піднято до GCC 8.3.

Нагадаємо, що платформа 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) {обробка результату});", при якому керування миттєво перейде до подальшого коду, а результат запиту буде оброблений у міру надходження даних.

Додатково можна відзначити, що компанія Deno, заснована творцем Node.js для розвитку платформи нового покоління Deno, отримала 4.9 млн. доларів інвестицій. За своїм призначенням Deno нагадує Node.js, але намагається усунути концептуальні помилки, допущені в архітектурі Node.js, та надати користувачам більш захищене оточення. Зазначається, що бізнес-рішення компанії Deno будуть будуватися на повністю відкритих продуктах, а модель Open Core з виділенням платної функціональності сприймається як неприйнятна для платформи Deno.

Джерело: opennet.ru

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