Выпуск серверной 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-обработчика.
Источники
править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.