Релиз Node.js 16: обзор лучшего

Kate

Administrator
Команда форума
20 апреля состоялся релиз новой 16 версии Node.js. Среди основных изменений обновление движка JavaScript V8 до версии 9.0, встроенные бинарники (двоичные файлы) для Apple Silicon и несколько API, но обо всем по порядку.

С полным списком изменений можно ознакомиться здесь.

Node.js 16 заменит Node.js 15 в качестве «текущего» (current) релиза. Этот статус будет сохраняться за ним на протяжении следующих 6 месяцев. Затем, в октябре 2021 года, Node.js 16 перейдет в статус «долгосрочной поддержки» (long-term support, LTS). После перехода в статус LTS он получит кодовое имя 'Gallium'.

Подробности о релизах можно найти в репозитории «Node.js Release Working Group». А пока давайте пройдемся по лучшим новостям.


Обновление V8 до версии 9.0​


Обновление движка JavaScript V8 — это улучшение производительности, а также обеспечение поддержки Node.js последних возможностей JavaScript. К слову, в Node.js 15 использовался V8 версии 8.6.

Из основных изменений движка можно назвать поддержку индексов соответствия в регулярных выражениях (regexp match indices), а также улучшение (повышение скорости) доступа к свойству «super».

С полным списком изменений можно ознакомиться здесь.

Индексы соответствия​


Идексы соответствия позволяют разработчикам получать массив подмассивов, содержащих начальные и конечные позиции (индексы) групп захвата (capture groups) в регулярном выражении при наличии совпадения (или нескольких совпадений). Данный массив доступен через свойство «indices» объекта с совпадениями. Обратите внимание, что регулярное выражение, используемое для поиска совпадений, должно иметь флаг «/d».

const re = /(a)(b)/d // Регулярное выражение. Обратите внимание на наличие флага /d

const m = re.exec('ab') // Объект с совпадениями

console.log(m.indices[0]) // Первый подмассив — это полное совпадение

// [0, 2]

console.log(m.indices[1]) // Второй подмассив — первая группа захвата

// [0, 1]

console.log(m.indices[2]) // Третий подмассив — вторая группа захвата

// [1, 2]




Доступ к свойству «super»​


Доступ к свойству «super» был улучшен за счет использования системы встроенного кэша и оптимизации генерации кода в «TurboFan» (TurboFan — это компилятор, за интепретацию кода в V8 отвечает Ignition). Как утверждают разработчики V8, скорость доступа к super стала почти такой же, как скорость доступа к обычному свойству.

d1fe4c2f6f0fe049c55d27095bdaa64d.png


Ось «Y» — количество операций. Ось «X» — доступ к обычному свойству, доступ к свойству «super» (до обновления), доступ к свойству «super» (после обновления).

Стабильный Timers Promises API​


Timers Promises API предоставляет альтернативный набор таймеров, возвращающих объект «Promise», что избавляет от необходимости использования util.promisify().

import { setTimeout } from 'timers/promises'

async function run() {

const greet = await setTimeout(3000, 'Hi!')

console.log(greet) // Hi!

}

run()




Timers Promises API был представлен в Node.js 15 в качестве экспериментальной возможности. Теперь он приобрел статус стабильного интерфейса.

Другие новые возможности​


Природа процесса релизов такова, что новые возможности появляются в «текущем» релизе примерно каждые 2 недели. По этой причине многие возможности были доступны в Node.js 15, но все же являются относительно новыми для среды выполнения.

Среди таких возможностей можно назвать следующее:

  • Экспериментальная реализация стандарта Web Crypto API
  • npm 7 (v7.10.0)
  • Node-API версии 8
  • Стабильная реализация AbortController, основанная на AbortController Web API
  • Стабильная реализация Source Maps v3 (NODE_OPTIONS=--enable-source-maps в терминале или { «enable-source-maps»: true } в .mocharc.json)
  • Реализации atob (buffer.atob(data)) и btoa (buffer.btoa(data)), обеспечивающие совместимость с устаревшими API (кодирование/декодирование данных в формат «Base64»)

Новые минимальные наборы компилятора и платформы​


Node.js предоставляет встроенные бинарники для нескольких различных платформ. Для каждого мажорного релиза минимальный набор инструментов оценивается и по-возможности расширяется.

Node.js 16 будет первым релизом с встроенными двоичными файлами для Apple Silicon. В то время как для архитектур Intel (darwin-x64) и ARM (darwin-arm64) предоставляются отдельные архивы (tarball), «установщик» (.pkg) для macOS представляет собой мультиархитектурный бинарник.

Для платформ, основанных на Linux, минимальный уровень GCC для генерации Node.js 16 составляет GCC 8.3.

Подробности о поддерживаемых инструментах и компиляторах можно найти здесь.

Прекращение поддержки​


Разработчики Node.js стараются минимизировать количество изменений, которые могут привести к нарушениям в экосистеме (имеется ввиду работа Node.js-библиотек). Для обнаружения таких изменений используется GITGM (Canary in the Gold Mine).

Тем не менее, некоторые возможности были признаны устаревшими. Среди наиболее существенных можно назвать доступ к process.bindings() для некоторых модулей ядра, таких как process.binding('http_parser') или process.binding('url').

Следует отметить, что новый мажорный релиз — это результат усилий большого количества людей, заинтересованных в улучшении и дальнейшем развитии Node.js (контрибьюторов и коллабораторов). Также с целью подготовки нового релиза к продакшну большую работу проделывает Node.js Build Working Group.


Источник статьи: https://habr.com/ru/company/macloud/blog/554098/
 
Сверху