Поиск по сайту:

Что нового в Node.js 16?


Node.js запустил свою последнюю основную версию. Выпущенная в апреле 2021 года версия 16 — это новая «текущая» версия. В октябре 2021 года он будет переведен на выпуск с долгосрочной поддержкой (LTS), а техническое обслуживание продолжится до 2024 года.

В процессе выпуска Node.js обновления из «текущей» ветки объединяются в следующий основной выпуск функций. Следовательно, v16 привносит несколько недавно добавленных функций v15 в то, что в конечном итоге станет веткой LTS. Хотя эти изменения уже доступны в версии 15, они являются новыми для пользователей LTS.

Обновления движка JavaScript

Node.js 16 поставляется с версией 9.0 движка JavaScript V8. Это заменяет V8 8.6 в Node.js 15. За несколько месяцев между двумя выпусками V8 получил несколько новых функций наряду со значительными улучшениями производительности.

Одним из таких улучшений являются более быстрые вызовы функций с несоответствующей длиной списка аргументов. JavaScript позволяет передавать различное количество аргументов в сигнатуру функции:

function demo(a, b, c) {
    // ...
}
 
// OK
demo(1);
 
// Also OK
demo(1, 2, 3, 4);

Первый вариант обычно используется, когда параметр является необязательным. Последний вариант иногда возникает при рефакторинге функции с удалением аргумента. Этот тип кода приводил к снижению производительности до V8 8.7. Переработка внутренних механизмов, используемых для обработки несоответствующих длин списков аргументов, практически устранила накладные расходы.

Еще одно улучшение производительности касается свойства super. Эта функция JavaScript позволяет вам получить доступ к родителю класса, который использует наследование. Раньше вызовы super были неоптимизированными, вызывая вызов во время выполнения при каждом использовании. V8 v9 содержит изменения, позволяющие доступ к свойствам super выполнять на несколько порядков быстрее. Эта оптимизация теперь доступна пользователям Node.js.

Наконец, V8 v9 содержит важную новую функцию для регулярных выражений. Теперь вы можете запросить массив, содержащий начальную и конечную позиции каждой совпадающей группы захвата. Это включается с помощью флага /d с RegExp. Затем вы можете получить доступ к массиву индексов через свойство indices объекта результата выполнения.

const regex = /(a)(b)/d;
const match = regex.exec("xy");
 
console.log(match.indices[0]);      // [0, 2]
console.log(match.indices[1]);      // [0, 1]
console.log(match.indices[2]);      // [1, 2]

Первый элемент массива представляет все совпадение. Последующие элементы дают вам позиции каждой совпадающей группы захвата во входной строке.

нпм v7

Node.js v16 представит npm v7 на канале LTS. npm подвергся существенному внутреннему рефакторингу для повышения производительности и пересмотра рабочего процесса одноранговых зависимостей.

Одноранговые зависимости теперь устанавливаются автоматически вместе с обычными зависимостями. Это может быть критическим изменением в некоторых рабочих процессах, хотя сбои «обычно минимальны».

Также существует новый формат для package-lock.json, который обеспечивает более надежные детерминированные сборки. Теперь он включает все, необходимое npm для перестройки вашего дерева пакетов с нуля. Если вы переходите с Yarn, npm также поддерживает файлы yarn.lock.

Другие заметные изменения

v16 переводит API Timers Promises в стабильный статус. Этот API предоставляет функции таймера JavaScript, которые возвращают собственные промисы. Такие функции, как setTimeout(), обычно принимают обратный вызов. Это может быть громоздко при использовании с современным асинхронным кодом.

// Old
function demoOld() {
    setTimeout(() => {
        console.log("Timer expired.");
    }, 5000);
}
 
// New
import {setTimeout} from "timers/promises";
async function demoNew() {
    await setTimeout(5000);
    console.log("Timer expired.");
}

Использование промисов делает код более читаемым в сочетании с async/await. Ожидание таймера похоже на традиционный вызов sleep в синхронном языке.

В Node.js также добавлена экспериментальная поддержка Web Crypto API. Эта спецификация W3C предназначена для предоставления веб-приложениям доступа к элементарному набору криптографических функций. API предлагает генерацию хэшей и проверку подписи, а также утилиты шифрования и дешифрования.

Предложение поддержки Web Crypto в Node.js улучшает взаимодействие между JavaScript на серверах и JavaScript в веб-браузерах. Реализация Node расширяет различные аспекты спецификации W3C и включает собственные варианты некоторых объектов.

Яблочный кремний

Совершенно новым в v16 изменением является публикация сборок для процессоров Apple Silicon. Это должно повысить производительность на новом оборудовании Mac. Node.js будет изначально работать на Apple M1, вместо того, чтобы использовать слой эмуляции Rosetta.

Пользователям, выполняющим установку через механизм распространения tarball, необходимо будет выбрать между пакетами darwin-x64 (Intel) или darwin-arm64 (Apple Silicon). Если вы используете утилиту установки macOS, предоставляется одна загрузка с поддержкой обеих архитектур.

Устаревшие

Будучи основным выпуском, v16 содержит некоторые устаревшие версии и удаления. Вы можете найти полный список в полном журнале изменений.

Заметным прекращением поддержки является намерение удалить доступ к нескольким основным модулям через process.binding(). Этот вызов обеспечивает механизм доступа к базовым объектам C++, лежащим в основе реализации модулей Javacript. Привязки для модулей, включая crypto, v8, async_wrap и url, устарели и могут быть удалены в будущем.

В другом месте параметр recursive для функции удаления каталога fs.rmdir() устарел. Вместо этого новый код должен использовать альтернативную функцию fs.rm(path, {recursive: true}). Это изменение было сделано для лучшего согласования Node.js с командой Unix rmdir и эквивалентными функциями rmdir() в других языках программирования.

Краткое содержание

Node.js v16 — это крупный новый выпуск, который добавит несколько новых функций в канал LTS, а также новейшие функции JavaScript V8. Это происходит вместе с npm v7 и запуском собственных сборок Apple Silicon.

Вы можете получить новую версию по текущему каналу, следуя инструкциям по установке на веб-сайте Node.js. v16 заменит v14 в качестве выпуска LTS 26 октября 2021 г.

Текущий выпуск Node.js v15 будет поддерживаться до 1 июня 2021 года. Пользователям следует как можно скорее обновиться до v16. Текущая активная ветвь LTS, v14, будет поддерживаться до конца апреля 2023 года.




Все права защищены. © Linux-Console.net • 2019-2024