- PVSM.RU - https://www.pvsm.ru -
20 апреля состоялся релиз новой 16 версии Node.js. Среди основных изменений обновление движка JavaScript V8 до версии 9.0, встроенные бинарники (двоичные файлы) для Apple Silicon и несколько API, но обо всем по порядку.
С полным списком изменений можно ознакомиться здесь [1].
Node.js 16 заменит Node.js 15 в качестве «текущего» (current) релиза. Этот статус будет сохраняться за ним на протяжении следующих 6 месяцев. Затем, в октябре 2021 года, Node.js 16 перейдет в статус «долгосрочной поддержки» (long-term support, LTS). После перехода в статус LTS он получит кодовое имя 'Gallium'.
Подробности о релизах можно найти в репозитории «Node.js Release Working Group» [2]. А пока давайте пройдемся по лучшим новостям.
Обновление движка JavaScript V8 — это улучшение производительности, а также обеспечение поддержки Node.js последних возможностей JavaScript. К слову, в Node.js 15 использовался V8 версии 8.6.
Из основных изменений движка можно назвать поддержку индексов соответствия в регулярных выражениях (regexp match indices), а также улучшение (повышение скорости) доступа к свойству «super».
С полным списком изменений можно ознакомиться здесь [3].
Идексы соответствия позволяют разработчикам получать массив подмассивов, содержащих начальные и конечные позиции (индексы) групп захвата (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» был улучшен за счет использования системы встроенного кэша и оптимизации генерации кода в «TurboFan» (TurboFan — это компилятор, за интепретацию кода в V8 отвечает Ignition). Как утверждают разработчики V8, скорость доступа к super стала почти такой же, как скорость доступа к обычному свойству.
Ось «Y» — количество операций. Ось «X» — доступ к обычному свойству, доступ к свойству «super» (до обновления), доступ к свойству «super» (после обновления).
Timers Promises API [4] предоставляет альтернативный набор таймеров, возвращающих объект «Promise», что избавляет от необходимости использования util.promisify() [5].
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, но все же являются относительно новыми для среды выполнения.
Среди таких возможностей можно назвать следующее:
Node.js предоставляет встроенные бинарники для нескольких различных платформ. Для каждого мажорного релиза минимальный набор инструментов оценивается и по-возможности расширяется.
Node.js 16 будет первым релизом с встроенными двоичными файлами для Apple Silicon [9]. В то время как для архитектур Intel (darwin-x64) и ARM (darwin-arm64) предоставляются отдельные архивы (tarball), «установщик» (.pkg) для macOS представляет собой мультиархитектурный бинарник.
Для платформ, основанных на Linux, минимальный уровень GCC [10] для генерации Node.js 16 составляет GCC 8.3.
Подробности о поддерживаемых инструментах и компиляторах можно найти здесь [11].
Разработчики Node.js стараются минимизировать количество изменений, которые могут привести к нарушениям в экосистеме (имеется ввиду работа Node.js-библиотек). Для обнаружения таких изменений используется GITGM (Canary in the Gold Mine) [12].
Тем не менее, некоторые возможности были признаны устаревшими. Среди наиболее существенных можно назвать доступ к process.bindings() для некоторых модулей ядра, таких как process.binding('http_parser') или process.binding('url').
Следует отметить, что новый мажорный релиз — это результат усилий большого количества людей, заинтересованных в улучшении и дальнейшем развитии Node.js (контрибьюторов и коллабораторов). Также с целью подготовки нового релиза к продакшну большую работу проделывает Node.js Build Working Group [13].
Зарегистрируйтесь по ссылке выше или кликнув на баннер и получите 10% скидку на первый месяц аренды сервера любой конфигурации!
Автор: owlofmacloud
Источник [15]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/programmirovanie/363607
Ссылки в тексте:
[1] здесь: https://nodejs.org/en/blog/release/v16.0.0/
[2] «Node.js Release Working Group»: https://github.com/nodejs/release
[3] здесь: https://v8.dev/blog/v8-release-90
[4] Timers Promises API: https://nodejs.org/api/timers.html#timers_timers_promises_api
[5] util.promisify(): https://nodejs.org/dist/latest-v8.x/docs/api/util.html#util_util_promisify_original
[6] Web Crypto API: https://www.w3.org/TR/WebCryptoAPI/
[7] AbortController Web API: https://developer.mozilla.org/ru/docs/Web/API/AbortController
[8] Source Maps v3: https://sourcemaps.info/spec.html
[9] Apple Silicon: https://ru.wikipedia.org/wiki/%D0%9F%D0%B5%D1%80%D0%B5%D1%85%D0%BE%D0%B4_Mac_%D0%BD%D0%B0_Apple_Silicon#%D0%9F%D0%B5%D1%80%D0%B5%D1%85%D0%BE%D0%B4_%D0%BD%D0%B0_Apple_Silicon
[10] GCC: https://developers.google.com/closure/compiler
[11] здесь: https://github.com/nodejs/node/blob/v12.x/BUILDING.md#platform-list
[12] GITGM (Canary in the Gold Mine): https://github.com/nodejs/citgm
[13] Node.js Build Working Group: https://github.com/nodejs/build
[14] серверы: https://macloud.ru/?partner=4189mjxpzx
[15] Источник: https://habr.com/ru/post/554098/?utm_source=habrahabr&utm_medium=rss&utm_campaign=554098
Нажмите здесь для печати.