10

私は、Javascriptファイルstartup.jsを評価することから始まるnode.js(v0.6.12)アプリケーションを持っています。startup.jsの評価には長い時間がかかります。可能であれば、Nodeのカスタムビルドに「焼き付け」たいと思います。

Nodeとともに配布されるv8ソースディレクトリnode/deps / v8 / srcには、これを行うためにほぼ使用できるSconScriptが含まれています。302行目には

LIBRARY_FILES = '''
runtime.js
v8natives.js
array.js
string.js
uri.js
math.js
messages.js
apinatives.js
date.js
regexp.js
json.js
liveedit-debugger.js
mirror-debugger.js
debug-debugger.js
'''.split()

これらのjavascriptファイルは同じディレクトリにあります。ビルドプロセスの何かが明らかにそれらを評価し、状態のスナップショットを取り、それをバイト文字列としてnode / out / Release / obj / release / snapshot.cc(Mac OSの場合)に保存します。このファイルはノードにベイクされているようです。

SconScriptを変更することで、起動スナップショットをある程度カスタマイズできます。たとえば、date.jsを変更することで、組み込みのDate.toStringの定義を変更できます。内容を含むライブラリファイルのリストにstartup.jsを追加することで、新しいグローバル変数を追加することもできますglobal.test = 1

ただし、JavaScriptコードだけをに入れることはできませんstartup.js。が含まれている場合Date.toString = 1;、コードがノードreplで有効であっても、エラーが発生します。

Build failed:  -> task failed (err #2): 
    {task: libv8.a SConstruct -> libv8.a}
make: *** [program] Error 1

そして明らかに、Nodeがv8に追加するライブラリに依存するコードを利用することはできません。global.underscore = require('underscore');同じエラーが発生します。

customSnapshot startup.js理想的には、Nodeでstartup.jsを評価し、スナップショットをファイルsnapshot.ccにダンプするツールcustomSnapshotが必要です。このファイルは、Nodeのソースディレクトリに配置できます。次に、ノードを構築して、スナップショットを再構築しないように指示できます。

4

1 に答える 1

7

mksnapshotコマンド(V8のビルド中に実行される)にオプションを追加しました。新しい--extra-file=filename.jsフラグを使用すると、プロセスでロードおよび実行してからスナップショットに配置するファイルを指定できます。これは、ノード0.8で使用されている3.11ブランチではなく、トランクバージョンのV8にあるため、ノード0.8をV8バージョン3.11で実行する必要があります。私が知る限り、それはうまくいきますが、あなたはある程度自分でやっていくでしょう。

これを試してみてもうまくいかない場合は、バグを報告してください。

于 2012-06-20T20:49:28.550 に答える