Google の V8 エンジンを使用して JavaScript をネイティブ コードにコンパイルし、それをバイナリ ファイルとして保存し、任意のマシンでソフトウェア環境を介して必要なときに実行することは本当に可能ですか?
4 に答える
V8 スナップショット機能を使用して、コードをプリコンパイルできます。これは、スナップショットをロードするために V8 のフル バージョンを実行する必要があることを意味します (つまり、スタンドアロンのネイティブ コードを取得するのではなく、V8 VM 内で実行する必要があります)。したがって、節約できるのはコンパイル時間だけです。 . また、スナップショット コードの品質は、必ずしも JIT されたコードほど良いとは限りません。JIT コードは、たとえば、利用可能であれば SSE2/SSE3 を使用できますが、スナップショットでは想定できないからです。
代わりに、.NET JavaScript/JScript コンパイラを使用して .NET exe を作成し、 Mono 事前コンパイラを使用して .NET exe をネイティブ .exe に変換することもできます。
私の知る限り、V8 は純粋にジャスト イン タイムコンパイラであり、事前オプションはありません。
私がリンクした記事で説明したように、JIT はより優れた、より柔軟な最適化を可能にします。
目標を達成するための最も近い方法は、自己実行型の Javascript バイトコード ラッパーを作成することです。
これを行うプロジェクトは、pkg
モジュールの依存関係とアセット ファイルを含む自己完結型のバイナリ実行可能ファイルを Javascript から何らかの方法で作成し、自己完結型の実行可能ファイルを生成します。
インストールと使用は簡単です:
$ npm install -g pkg
$ pkg index.js -o my-program
$ ./my-program
私の理解では、このバイナリには nodejs バイトコードが含まれています。クロスコンパイルもできるようです。
注: 私も試してncc
みnexe
ましたが、あまり役に立ちませんでした。ncc
自己完結型の Javascript ファイルを作成するだけで、nexe
それを使用しようとしたときに Python エラーが発生しました。