ウェブサイト検索

Node.js 16の新機能は何ですか?


Node.jsは最新の主要バージョンを発表しました。2021年4月にリリースされたv16が新しい「現在の」リリースです。2021年10月には、2024年までメンテナンスが続くLong Term Support (LTS) リリースに昇格します。

Node.jsのリリースプロセスでは、「current」ブランチの更新が次の主要な機能リリースにマージされます。そのため、v16では最近追加されたv15の機能が、最終的にLTSブランチになるものに組み込まれています。v15では既に利用可能でしたが、これらの変更はLTSユーザーにとっては新しいものです。

JavaScriptエンジンの更新

Node.js 16は、V8 JavaScriptエンジンのバージョン9.0を搭載しています。これにより、Node.js 15のV8 8.6が置き換えられました。2つのリリースの間の数ヶ月で、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]

配列内の最初の項目は、全体の一致を表します。次の要素は、入力文字列内の各一致するキャプチャグループの位置を示します。

npm v7

Node.js v16はLTSチャネルにnpm v7を導入します。npmはパフォーマンスを向上させ、ピア依存関係のワークフローを刷新するために大規模な内部再構築を行いました。

ピア依存関係は、通常の依存関係と一緒に自動的にインストールされるようになりました。これは、一部のワークフローにおいては破壊的な変更になる可能性がありますが、混乱は「通常は最小限」です。

新しい形式もあります。

package-lock.json

より信頼性の高い決定論的ビルドを可能にします。これにより、npmがパッケージツリーをゼロから再構築するために必要なすべてが含まれています。Yarnから移行している場合、npmはサポートを得ました。

yarn.lock

ファイルも。

その他の注目すべき変更

v16はTimers Promises APIを安定した状態に昇格させます。この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 の仕様は、Web アプリケーションに基本的な暗号化機能のセットへのアクセスを提供することを目的としています。この API は、ハッシュ生成や署名検証に加えて、暗号化および復号化ユーティリティを提供します。

Node.jsでWeb Cryptoのサポートを提供することで、サーバー上のJavaScriptとウェブブラウザ内のJavaScriptとの相互運用性が向上します。Nodeの実装はW3C仕様のさまざまな側面を拡張し、一部のオブジェクトの独自のバリエーションを含んでいます。

Appleシリコン

v16の完全に新しい変更点は、Apple Siliconプロセッサ用のビルドの公開です。これにより、新しいMacハードウェアでのパフォーマンスが向上するはずです。Node.jsはRosettaエミュレーションレイヤーを使用せずに、Apple M1上でネイティブに実行されます。

tarball配布メカニズムを介してインストールするユーザーは、次の選択をする必要があります

darwin-x64

(インテル) または

darwin-arm64

(Apple Silicon) パッケージ。macOS インストールユーティリティを使用すると、両方のアーキテクチャに対応した単一のダウンロードが提供されます。

廃止

主要なリリースであるv16には、いくつかの非推奨機能と削除が含まれています。完全な変更ログに全リストがあります。

注目すべき廃止は、いくつかのコアモジュールへのアクセスを削除する意図です。

process.binding()

. この呼び出しは、モジュールのJavaScript実装の背後にあるC++オブジェクトにアクセスするためのメカニズムを提供します。モジュールのバインディングには、

crypto

,

v8

,

async_wrap

そして

url

廃止され、将来的に削除される可能性があります。

他の場所では、

recursive

オプションを

fs.rmdir()

ディレクトリ削除機能は非推奨になりました。新しいコードは代替手段を使用する必要があります。

fs.rm(path, {recursive: true})

代わりに関数。この変更はNode.jsをより良く整合させるために行われました。

rmdir

Unixコマンドと

rmdir()

他のプログラミング言語における同等の関数。

要約

Node.js v16は、新しい主要なリリースであり、LTSチャネルにいくつかの新機能をもたらしながら、最新のV8 JavaScript機能を導入します。これはnpm v7とApple Siliconネイティブビルドの開始とともに提供されます。

現在のチャネルを通じて、新しいリリースをNode.jsのウェブサイトにあるインストールドキュメントに従って入手できます。v16は2021年10月26日にv14のLTSリリースを置き換えます。

現在のNode.js v15リリースは2021年6月1日までサポートされます。ユーザーはできるだけ早くv16にアップグレードすることをお勧めします。現在のアクティブなLTSブランチであるv14は2023年4月末までメンテナンスされます。

関連記事: