Выпуск серверной JavaScript-платформы Node.js 12.0

23 апреля 2019 года

Доступен релиз Node.js 12.0.0, платформы для выполнения сетевых приложений на языке JavaScript. Node.js 12.0 относится к веткам с длительным сроком поддержки, но данный статус будет присвоен только в октябре, после проведения стабилизации. Обновления для LTS-веток выпускаются в течение 3 лет. Поддержка прошлой LTS-ветки Node.js 10.0 продлится до апреля 2021 года, а позапрошлой LTS-ветки 8.0 до января 2020 года. Поддержка промежуточной ветки Node.js 11.0 будет прекращена в июне 2019 года. Время жизни LTS-ветки 6.0 завершится 30 апреля.

Из улучшений в Node.js 12.0 отмечается (дополнено после публикации разработчиками развёрнутого обзора):

  • Обновление движка V8 до версии 7.4 с поддержкой асинхронных трассировок стека, увеличением производительности await, парсинга JavaScript и вызовов при несоответствии фактического и заявленного числа аргументов;
  • Поддержка TLS 1.3 в модуле tls и отключение по умолчанию TLS 1.0/1.1;
  • Усиление защиты и проверок размера выделяемой памяти в классе Buffer;
  • Усиление проверок аргументов в модулях child_process, fs и assert;
  • Удаление устаревших обработчиков в модуле crypto;
  • Перевод модуля http по умолчанию на парсер llhttp;
  • Перевод lib на использование стиля ECMAScript 6 при наследовании классов;
  • Экспериментальная поддержка модулей ECMAScript 6;
  • Изменение ограничений на размер кучи в JavaScript, которые теперь выбираются в зависимости от размера ОЗУ, а не задаются фиксировано;
  • Улучшение поддержки нативных модулей (на C/C++) в комбинации с Worker-потоками и N-API v4 для упрощения использования собственных потоков с асинхронными функциями на C/C++;
  • Упрощение использования API Worker Threads, для которого теперь не нужно выставлять флаг включения экспериментальной функции;
  • Добавление экспериментальной возможности генерации на лету диагностических отчётов, в которых отражаются события, помогающие диагностике таких проблем как крахи, падение производительности, утечки памяти, большая нагрузка на CPU, непредвиденный вывод ошибок и т.п.
  • Реализация команды для сохранения дампа с состоянием кучи для последующего анализа проблем с распределением памяти;
  • Ускорение запуска за счёт задействования встроенного кэша со скомпилированным кодом JavaScript-библиотек. Если раньше кэш заполнялся по мере работы, то теперь его содержимое для встроенных в Node.js библиотек генерируется на этапе сборки и привязывается к исполняемому файлу. Новая модель заполнения кэша позволила приблизительно на 30% сократить время запуска основного потока;
  • Повышены требования к платформе и версиям компилятора: для сборки теперь требуется как минимум GCC 6 и glibc 2.17 на платформах, отличных от macOS и Windows. Из совместимых дистрибутивов заявлены

Enterprise Linux 7, Debian 8 и Ubuntu 14.04. При работе в Windows требуется как минимум Windows 7, 2008 R2 или 2012 R2 и Visual Studio 2017, а в macOS - macOS 10.10 "Yosemite" и Xcode 8.

Напомним, что платформа 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) {обработка результата});", при котором управление мгновенно перейдёт к дальнейшему коду, а результат запроса будет обработан по мере поступления данных. Ни одна функция в Node.js не должна напрямую выполнять операции ввода/вывода - для получения данных с диска, от другого процесса или из сети требуется установка callback-обработчика.

Источники править


 
 
Creative Commons
Эта статья содержит материалы из статьи «Выпуск серверной JavaScript-платформы Node.js 12.0», опубликованной OpenNET и распространяющейся на условиях лицензии Creative Commons Attribution (CC BY) — указание автора, источник и лицензию.
 
Эта статья загружена автоматически ботом NewsBots в архив и ещё не проверялась редакторами Викиновостей.
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.

Комментарии

Викиновости и Wikimedia Foundation не несут ответственности за любые материалы и точки зрения, находящиеся на странице и в разделе комментариев.