Состоялся релиз 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 дней.
Peamised parandused:
- Движок 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.
Tuletame meelde, et Node.js platvormi saab kasutada nii veebirakenduste serveripoolseks toetamiseks kui ka tavaliste kliendi- ja serveri võrguprogrammide loomiseks. Node.js rakenduste funktsionaalsuse laiendamiseks on ette valmistatud suur moodulite kogu, milles leidub erinevaid teostuse mooduleid. serverite Lisaks on saadaval moodulid erinevate veebiraamistikest integreerimiseks, WebSocketi ja Ajax töötlejate, andmebaasi ühenduse moodulite (MySQL, PostgreSQL, SQLite, MongoDB), templaatide, CSS-mootorite, krüptoalgoritmide ja autoriseerimissüsteemide (OAuth), XML-parside rakendusteks.
Node.js kasutab paljude paralleelsete päringute töötlemiseks asünkroonset koodikäitlusmudelit, mille aluseks on sündmuste mittesüvendav töötlemine ja tagasikutsumiste määramine. Ühenduste multiplexerimiseks toetatakse selliseid meetodeid nagu epoll, kqueue, /dev/poll ja select. Ühenduste multiplexerimiseks kasutatakse libuv raamatukogu, mis on Unix-süsteemides libev ja Windowsis IOCP. Töötajate basaari (thread pool) loomiseks kasutatakse libeio raamatukogu ning mittesüvendav DNS-päringute töötlemine on integreeritud c-ares'iga. Kõik süsteemi kutsed, mis võivad blokeeruda, täidetakse töötajate basaari sees ja seejärel, nagu ka signaalide töötlejad, edastavad oma töö tulemuse tagasi anonüümsesse torusse (pipe). JavaScripti koodi täitmine tagatakse Google'i loodud V8 mootori kaasamise kaudu (täpsemalt arendab Microsoft Node.js varianti Chakra-Core mootoriga).
Node.js on teatud mõttes sarnane Perl AnyEvent, Ruby Event Machine, Python Twisted ja Tcl-i sündmustepõhiste rakendustega, kuid Node.js-i sündmuste töötlemise tsükkel (event loop) on arendaja eest varjatud ning sarnaneb veebirakenduse sündmuste töötlemisega, mis töötab brauseris. Node.js-i rakenduste kirjutamisel tuleb arvestada sündmustepõhise programmeerimise eripäradega. Näiteks, selle asemel et teostada "var result = db.query('select..');" ja oodata tulemuste töötlemise lõpetamist, kasutatakse Node.js-is asünkroonse täitmise põhimõtet, st kood muutub "db.query('select..', function (result) {töötle tulemus});", kus juhtimine läheb kohe edasi järgmisele koodile ja päringu tulemus töödeldakse andmete saabumise ajal.
Дополнительно можно отметить, что компания Deno, основанная создателем Node.js для развития платформы нового поколения Deno, получила 4.9 млн долларов инвестиций. По своему назначению Deno напоминает Node.js, но пытается устранить концептуальные ошибки, допущенные в архитектуре Node.js, и предоставить пользователям более защищённое окружение. Отмечается, что бизнес-решения компании Deno будут строится на полностью открытых продуктах, а модель Open Core с выделением отдельной платной функциональности воспринимается как неприемлемая для платформы Deno.
Allikas: opennet.ru
