サーバーサイド JavaScript プラットフォーム Node.js 20.0 が利用可能

JavaScript でネットワーク アプリケーションを実行するためのプラットフォームである Node.js 20.0 がリリースされました。 Node.js 20.0 は長期サポート ブランチに割り当てられていますが、このステータスは安定化後の 20 月まで割り当てられません。 Node.js 30.x は 2026 年 18 月 2025 日までサポートされます。 以前の Node.js 16.x LTS ブランチのメンテナンスは 2023 年 14 月まで、以前の 30.x LTS ブランチは 19 年 1 月まで続きます。 XNUMX.x LTS ブランチは XNUMX 月 XNUMX 日に、Node.js XNUMX.x 暫定ブランチは XNUMX 月 XNUMX 日に削除されます。

主な改善点:

  • V8 エンジンは、Chromium 11.3 で使用されるバージョン 113 に更新されました。 Chromium 19 エンジンを使用した Node.js 107 ブランチと比較した変更点のうち、String.prototype.isWellFormed 関数と toWellFormed 関数、Array.prototype Array オブジェクトと TypedArray オブジェクトの変更時のコピーを操作する TypedArray.prototype メソッド、RegExp の「v」フラグ、ArrayBuffer のサイズ変更と SharedArrayBuffer のサイズ増加のサポート、WebAssembly の末尾呼び出し。
  • 実行中に特定のリソースへのアクセスを制限できる、実験的な許可モデル メカニズムが提案されています。 権限モデルのサポートは、実行時に「--experimental-permission」フラグを指定することで有効になります。 初期実装では、FS の特定の部分、子プロセス (--allow-child-process) への書き込み (--allow-fs-write) および読み取り (--allow-fs-read) アクセスを制限するオプションが提案されました。 、アドオン (--no-addons ) およびスレッド (--allow-worker)。 たとえば、/tmp ディレクトリへの書き込みと /home/index.js ファイルの読み取りを許可するには、次のように指定できます。node --experimental-permission --allow-fs-write=/tmp/ --allow-fs-read =/home/index.js インデックス .js

    アクセスを確認するには、「process.permission.has('fs.write',"/tmp/test」など) process.permission.has() メソッドを使用することをお勧めします。

  • 「--experimental-loader」オプションを介してロードされた ECMAScript 外部モジュール (ESM) のハンドラーは、メイン スレッドから分離された別のスレッドで実行されるようになり、アプリケーション コードとロードされた ESM モジュールの交差がなくなりました。 ブラウザと同様に、import.meta.resolve() メソッドはアプリケーション内から呼び出されたときに同期的に実行されるようになりました。 Node.js の次のブランチの XNUMX つでは、ESM 読み込みサポートが安定した機能のカテゴリに移動される予定です。
  • TAP (Test Anything Protocol) 形式で結果を返す JavaScript テストを作成および実行するように設計された、node:test (test_runner) モジュールが安定版に移行されました。
  • 別のパフォーマンス チームが結成され、新しいブランチの準備として、URL 解析、fetch()、EventTarget などのさまざまなランタイム コンポーネントの高速化に取り組んできました。 たとえば、EventTarget の初期化のオーバーヘッドが半分になり、URL.canParse() メソッドのパフォーマンスが大幅に向上し、タイマーの効率が向上しました。 さらに、C++ で書かれた高性能 URL パーサー Ada 2.0 のリリースもこの構成に含まれています。
  • 単一の実行可能ファイル (SEA、単一実行可能アプリケーション) の形式でアプリケーションを配信するための実験的機能の開発が続けられています。 実行可能ファイルを作成するには、(JavaScript ファイルを置き換える代わりに) JSON 構成ファイルから生成された BLOB を置き換える必要があります。
  • 他のプロジェクトの実装との Web Crypto API の互換性が向上しました。
  • ARM64 システム上の Windows の公式サポートが追加されました。
  • スタンドアロン WebAssembly アプリケーションを作成するための WASI (WebAssembly System Interface) 拡張機能の継続サポート。 WASI サポートを有効にするために特別なコマンド ライン フラグを指定する必要がなくなりました。

Node.js プラットフォームは、Web アプリケーションのサーバー メンテナンスと、通常のクライアントおよびサーバー ネットワーク プログラムの作成の両方に使用できます。 Node.js のアプリケーションの機能を拡張するために、モジュールの大規模なコレクションが用意されています。その中には、HTTP、SMTP、XMPP、DNS、FTP、IMAP、POP3 サーバーとクライアントの実装を備えたモジュール、統合用モジュールが含まれています。さまざまな Web フレームワーク、WebSocket および Ajax ハンドラー、DBMS コネクタ (MySQL、PostgreSQL、SQLite、MongoDB)、テンプレート エンジン、CSS エンジン、暗号化アルゴリズムと認証システム (OAuth) の実装、XML パーサーを使用します。

多数の並列リクエストを確実に処理するために、Node.js はノンブロッキング イベント処理とコールバック ハンドラーの定義に基づいた非同期コード実行モデルを使用します。 接続を多重化するためにサポートされているメソッドは、epoll、kqueue、/dev/poll、および select です。 接続の多重化には、Unix システム上の libev および Windows 上の IOCP のアドオンである libuv ライブラリが使用されます。 libeio ライブラリはスレッド プールの作成に使用され、c-ares はノンブロッキング モードで DNS クエリを実行するために統合されています。 ブロッキングを引き起こすすべてのシステム コールはスレッド プール内で実行され、シグナル ハンドラーと同様に、名前のないパイプ (パイプ) を介して作業の結果を転送します。 JavaScript コードの実行は、Google が開発した V8 エンジンを使用して提供されます (さらに、Microsoft は Chakra-Core エンジンを備えたバージョンの Node.js を開発しています)。

Node.js の核心は、Perl AnyEvent、Ruby Event Machine、Python Twisted フレームワーク、および Tcl イベント実装に似ていますが、Node.js のイベント ループは開発者から隠されており、実行中の Web アプリケーションでのイベント処理に似ています。ブラウザで。 Node.js のアプリケーションを作成するときは、たとえば、「var result = db.query("select..");」を実行する代わりに、イベント駆動型プログラミングの詳細を考慮する必要があります。 作業の完了を待機し、その後結果を処理することで、Node.js は非同期実行の原則を使用します。 コードは「db.query("select..", function (result) {結果処理});」に変換され、制御が即座に次のコードに渡され、データが到着するとクエリ結果が処理されます。

出所: オープンネット.ru

コメントを追加します