JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

【Node.js】script.createCachedData()メソッドの使い方と実行例を解説

script.createCachedData()メソッドは、ScriptコンストラクタcachedDataオプションと組み合わせて使用されるコードキャッシュ(V8コードキャッシュ)を作成するための組み込みAPIです。生成されたキャッシュデータは、遅延(レイテンシ)なく何度でも再利用でき、同じスクリプトを繰り返しコンパイル・実行する際のパフォーマンス向上に役立ちます。なお、このメソッドはNode.jsの「vm」モジュールに含まれるvm.Scriptクラスが提供しています。

構文

script.createCachedData()

パラメータ

このメソッドは単純にデータをキャッシュして返すだけのため、引数は不要です。戻り値として、キャッシュされた内容を格納したBuffer(バッファ)オブジェクトが返されます。

使用例①:スクリプト実行前にキャッシュを作成する

まず、「createCachedData.js」という名前のファイルを作成し、以下のコードをコピーしてください。その後、次のコマンドでコードを実行します。

node createCachedData.js

createCachedData.js

// script.createCachedData()メソッドの動作を確認するNode.jsプログラム

// vmモジュールを読み込む
const vm = require("vm");

// スクリプトを定義し、2つの数値の差を求める関数を含めた
// コードキャッシュを作成する
const script = new vm.Script(`
    function add(a, b) {
        return a - b;
    }
    const x = add(2, 1);
`);

// スクリプトを実行せずにキャッシュデータを作成
const cacheWithoutx = script.createCachedData();
console.log(cacheWithoutx);

出力結果

C:\home\node>> node createCachedData.js
<Buffer b5 03 de c0 8a f4 d4 f4 3d 00 00 00 ff 03 00 00 d5 a2 f5 b7 06 00 00
00 00 00 00 00 28 02 00 00 8f 87 4d e3 59 55 98 f9 00 00 00 80 20 00 00 80 00
03 ... >

このように、スクリプトを実行する前にcreateCachedData()を呼び出すと、コード本体のコンパイル済みデータだけがキャッシュされ、変数xの評価結果などは含まれないBufferが出力されます。

使用例②:スクリプト実行後にキャッシュを作成する

続いて、runInThisContext()でスクリプトを実行した後にキャッシュを作成する例を見てみましょう。

// script.createCachedData()メソッドの動作を確認するNode.jsプログラム

// vmモジュールを読み込む
const vm = require("vm");

// スクリプトを定義し、2つの数値の差を求める関数を含めた
// コードキャッシュを作成する
const script = new vm.Script(`
    function add(a, b) {
        return a - b;
    }
    const x = add(2, 1);
`);

// runInThisContext()でスクリプトを実行
script.runInThisContext();

// 実行後の状態を含めてキャッシュデータを作成
const cacheWithx = script.createCachedData();
console.log(cacheWithx);

出力結果

C:\home\node>> node createCachedData.js
<Buffer b5 03 de c0 8a f4 d4 f4 3d 00 00 00 ff 03 00 00 d5 a2 f5 b7 06 00 00
00 00 00 00 00 00 03 00 00 15 80 fd 5d 69 21 3a a9 00 00 00 80 20 00 00 80 38
04 ... >

実行後にキャッシュを作成した場合は、出力されるBufferの内容が例①と異なっていることが確認できます。これは、変数xの評価など実行時の情報もキャッシュに反映されているためです。

まとめ

  • createCachedData()は引数を受け取らず、キャッシュデータをBuffer形式で返します。
  • 返されたキャッシュは、新しいScriptオブジェクト生成時にcachedDataオプションへ渡すことで利用できます。
  • キャッシュを活用すると、同一スクリプトの再コンパイル時間を削減でき、起動や実行の高速化が期待できます。
  • キャッシュ作成のタイミング(実行前か実行後か)によって、Bufferの中身が変わる点に注意しましょう。
  1. Node.jsのprocess.argv0プロパティとは?使い方とprocess.argv[0]との違いを解説

    Node.jsでは、アプリケーション起動時に渡された元のargv[0]の値を、読み取り専用のコピーとして保持するための仕組みとしてprocess.argv0が用意されています。このプロパティを参照することで、Node.jsプロセスが起動された際の実行ファイル名を簡単に取得できます。 構文 process.argv0 パラメータ process.argv0は、保存されているargv[0]の読み取り専用コピーを返すだけのため、ユーザーからの入力(引数)は一切不要です。なお、これは関数ではなくプロパティである点に注意してください。括弧を付けて呼び出すのではなく、単純に参照するだけで値が取得できます。

  2. 【Node.js入門】process.argvでコマンドライン引数を取得する方法

    process.argv は、Node.js プロセスの起動時にコマンドラインから渡されたすべての引数を配列として返すプロパティです。配列の最初の要素には必ず process.execPath と同じ値(Node.js 実行バイナリへの絶対パス)が含まれ、2番目の要素には実行中のJavaScriptファイルのパスが格納されます。それ以降の要素には、ユーザーが指定した追加の引数が順番に並びます。 構文 process.argv パラメータ process.argv は、Node.js プロセス起動時に渡されたコマンドライン引数をすべて取得するためのものであり、ユーザーが何かを入力する必要はありま