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

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

Основні поліпшення:

  • Стабілізовано можливість генерації на льоту або при настанні певних подій діагностичних звітів, в яких відображаються події, що допомагають діагностиці таких проблем як крахи, падіння продуктивності, витоку пам'яті, велике навантаження на CPU, непередбачуване виведення помилок і т.п.
  • Додана експериментальна підтримка API Async Local Storage з реалізацією класу AsyncLocalStorage, який може застосовуватися для створення асинхронного стану з обробниками на базі callback-викликів та promise. AsyncLocalStorage дозволяє зберігати дані протягом обробки web-запиту, нагадуючи локальні для окремих потоків сховища (Thread-Local Storage) іншими мовами.
  • Прибрано виведення попередження про експерментальну можливість при завантаженні модулів ECMAScript 6 що підключаються та експортуються за допомогою виразів import і export. При цьому сама реалізація модулів ESM поки що залишається експериментальною.
  • Двигун V8 оновлено до версії 8.1 (1, 2, 3), до якої внесено нові оптимізації продуктивності та додано такі нововведення, як новий логічний оператор об'єднання «??» (повертає правий операнд, якщо лівий операнд має значення NULL або undefined, і навпаки) оператор «?.» для одноразової перевірки всього ланцюжка властивостей або викликів (наприклад «db?.user?.name?.length» без попередніх перевірок), метод Intl.DisplayName для отримання локалізованих назв тощо.
  • Проведено ревізію API Streams, націлену на поліпшення узгодженості API-інтерфейсів Streams та усунення відмінностей у поведінці базових елементів Node.js. Наприклад, поведінка http.OutgoingMessage наближена до stream.Writable, а net.Socket до stream.Duplex. Опція autoDestroy за умовчанням виставлена ​​у значення "true", що передбачає виклик "_destroy" після завершення.
  • Додана експериментальна підтримка API ВАСИ (WebAssembly System Interface), що надає програмні інтерфейси для прямої взаємодії з операційною системою (POSIX API для роботи з файлами, сокетами тощо).
  • Підвищено вимоги до мінімальним версіям компіляторів та платформ: macOS 10.13 (High Sierra), GCC 6, Windows новіший 7/2008R2.

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

Для забезпечення обробки великої кількості паралельних запитів Node.js задіює асинхронну модель запуску коду, що базується на обробці подій у неблокувальному режимі та визначенні callback-обробників. Як способи мультиплексування з'єднань підтримуються такі методи, як epoll, kqueue, /dev/poll і select. Для мультиплексування з'єднань використовується бібліотека libuv, яка є надбудовою над лібів у системах Unix та над IOCP у Windows. Для створення пулу потоків (thread pool) задіяно бібліотеку libeio, для виконання DNS-запитів у неблокувальному режимі інтегровано c-аре. Всі системні виклики, що викликають блокування, виконуються всередині пулу потоків і потім, як і обробники сигналів, передають результат своєї роботи назад через канал неназваний (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

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