2

現在、アプリケーションで Rhino を使用しています。いくつかの JavaScript を評価して値を取得する必要があります (JavaScript を介して Java クラスを使用する必要はありません)。しかし、遅すぎます。JavaアプリケーションでV8を使用する方法はありますか?

アップデート:

さまざまな種類のオブジェクトの大規模なコレクションがあります。これらのオブジェクトを必要な形式に検証および変換するための柔軟なメカニズムが必要です (ユーザーは検証および変換のルールを (実行時に) 変更できる必要があります。つまり、Java でこれらのルールをハードコーディングすることは適切ではありません)。現在はすべて Rhino で動作しますが、パフォーマンスが低下しています。NodeJS を使おうと思ったのですが、NodeJS との通信、プロセスによるオブジェクトのシリアル化など、非常にコストがかかるようです。

4

2 に答える 2

4
  1. 本当に必要ですevalか?eval実際に必要な場所はごくわずかです。

  2. ProcessBuilder基盤となるシステムで利用可能な任意のプロセスにシェルアウトするために使用できます。Rhinoよりも速い確率は低いと思いますeval

  3. NodeJSソケットを介して通信するアプリと一緒にプロセスを実行し続けることができます。それはRhinoでのスピードレースに勝つかもしれません。eval

あなたが実際に達成しようとしていることの例を挙げれば、人々があなたのためにより良いアプローチを思い付くことができるかもしれません。

于 2011-01-17T23:38:39.507 に答える
1

をご覧くださいjavax.script.ScriptEngine。これは標準の Java パッケージであり、評価とデータ バインディングが可能です。

ScriptEngineManager engineMgr = new ScriptEngineManager();
ScriptEngine engine = engineMgr.getEngineByName("JavaScript");
Bindings bindings = engine.createBindings();

String script = "javascript to eval goes here.....";
bindings.put(varName1, value1);
bindings.put(varName2, value2);

Object obj = engine.eval(script, bindings)
于 2011-01-17T23:56:52.317 に答える