Состоялся релиз 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 дней.
Zaimplementowano wywołania systemowe waitid (oczekiwanie na zmianę stanu procesu), pinsyscall (do przekazywania informacji o punkcie wejścia execve w celu ochrony przed exploitami ROP), getthrname i setthrname (uzyskiwanie i ustalanie nazwy wątku).
- Движок 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.
Przypomnijmy, że platforma Node.js może być wykorzystywana zarówno do serwerowego wsparcia Web aplikacji, jak i do tworzenia zwykłych klientów oraz programów sieciowych. Aby rozszerzyć funkcjonalność aplikacji dla Node.js, przygotowano dużą kolekcję modułów, w której można znaleźć moduły z realizacją serwerów klientów HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, moduły do integracji z różnymi frameworkami webowymi, obsługiwacze WebSocket i Ajax, konektory do baz danych (MySQL, PostgreSQL, SQLite, MongoDB), silniki szablonów, silniki CSS, realizacje algorytmów kryptograficznych oraz systemów autoryzacji (OAuth), parsery XML.
Aby obsłużyć dużą liczbę równoległych zapytań, Node.js wykorzystuje asynchroniczny model uruchamiania kodu oparty na przetwarzaniu zdarzeń w trybie non-blocking oraz definiowaniu callbacków. Wsparcie dla multiplexing połączeń obejmuje takie metody jak epoll, kqueue, /dev/poll i select. Do multiplexing połączeń używana jest biblioteka libuv, która jest dodatkową warstwą nad libev w systemach Unix oraz nad IOCP w Windows. Do tworzenia puli wątków (thread pool) wykorzystana jest biblioteka libeio, a do wykonywania zapytań DNS w trybie non-blocking zintegrowano c-ares. Wszystkie wywołania systemowe, które powodują blokowanie, są realizowane w obrębie puli wątków, a następnie, podobnie jak obsługa sygnałów, przekazują wyniki swojej pracy z powrotem przez niestrunną rynnę (pipe). Wykonanie kodu JavaScript zapewnia stworzony przez firmę Google silnik V8 (dodatkowo Microsoft rozwija wersję Node.js z silnikiem Chakra-Core).
Zasadniczo Node.js przypomina frameworki Perl AnyEvent, Ruby Event Machine, Python Twisted oraz implementację zdarzeń w Tcl, ale pętla zdarzeń (event loop) w Node.js jest ukryta przed deweloperem i przypomina przetwarzanie zdarzeń w aplikacji webowej działającej w przeglądarce. Przy pisaniu aplikacji dla Node.js należy uwzględnić specyfikę programowania opartego na zdarzeniach, na przykład zamiast wykonywać „var result = db.query(„select..”);” z oczekiwaniem na zakończenie pracy i dalszą obróbką wyników, w Node.js stosuje się zasadę asynchronicznego wykonania, tj. kod przekształca się w „db.query(„select..”, function (result) {obróbka wyniku});”, przy czym kontrola natychmiast przechodzi do dalszego kodu, a wynik zapytania jest przetwarzany na bieżąco.
Дополнительно можно отметить, что компания Deno, основанная создателем Node.js для развития платформы нового поколения Deno, получила 4.9 млн долларов инвестиций. По своему назначению Deno напоминает Node.js, но пытается устранить концептуальные ошибки, допущенные в архитектуре Node.js, и предоставить пользователям более защищённое окружение. Отмечается, что бизнес-решения компании Deno будут строится на полностью открытых продуктах, а модель Open Core с выделением отдельной платной функциональности воспринимается как неприемлемая для платформы Deno.
Źródło: opennet.ru
