Выпуск серверной 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 WASI (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, 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) {обработка результата});», при котором управление мгновенно перейдёт к дальнейшему коду, а результат запроса будет обработан по мере поступления данных. .



Источник: http://www.opennet.ru/opennews/art.shtml? num=52786

© OpenNet