2

目前我在我的应用程序中使用 Rhino。我需要评估一些 JavaScript ant 从中获取值(我不需要通过 JavaScript 使用 Java 类)。但它太慢了。也许有任何方法可以将 V8 与 Java 应用程序一起使用?

更新:

我有大量不同类型的对象。我需要一种灵活的机制来验证这些对象并将其转换为所需的形式(用户应该能够更改验证和转换的规则(在运行时),即用 Java 硬编码这些规则不合适)。现在一切都在 Rhino 上运行,但性能很差。我曾想过使用 NodeJS,但似乎与它的通信、通过进程的对象序列化等 - 这些都会花费很多。

4

2 回答 2

4
  1. 确定你真的需要eval吗?eval真正需要的地方非常非常少。

  2. 您可以使用ProcessBuilder外壳处理底层系统可用的任何进程。我想说它比犀牛更快的几率eval很低。

  3. 您可能会NodeJS在您的应用程序旁边运行一个进程,您可以通过套接字与之通信。这可能会eval在 Rhino 中赢得一场速度竞赛。

如果你举一个你实际想要达到的目标的例子,那么人们可能会为你想出更好的方法。

于 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 回答