Node.js — программная платформа, основанная на движке V8 (транслирующем JavaScript в машинный код), превращающая JavaScript из узкоспециализированного языка в язык общего назначения. Node.js добавляет возможность JavaScript взаимодействовать с устройствами ввода-вывода через свой API (написанный на C++), подключать другие внешние библиотеки, написанные на разных языках, обеспечивая вызовы к ним из JavaScript-кода. Node.js применяется преимущественно на сервере, выполняя роль веб-сервера, но есть возможность разрабатывать на Node.js и десктопные оконные приложения (при помощи NW.js, AppJS или Electron для Linux, Windows и Mac OS).
Улучшения в Node.js 12:
- Обновление движка 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.