Nashorn js eval 比 rhino js 慢很多

Had*_*ner 0 javascript java rhino nashorn

示例程序

ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine jsEngine = mgr.getEngineByName("JavaScript");
System.out.println(jsEngine.eval("a>10 || b<10 || c=10"));
Run Code Online (Sandbox Code Playgroud)

在我的程序中,我使用上面的代码来评估 1000 个使用 javascript 函数的表达式,例如 indexof()、replace、date 函数等等。这种表达式曾经在 rhino 中进行评估(当平台 java 版本是 java 7 时)比 nashorn 快得多……我应该说至少快 15~20 倍……

在 Java 8 中使用 rhino 似乎是一项乏味的工作......有人可以提出解决方法以使其更快......

Att*_*edi 5

Rhino 有一个解释器,Nashorn 将每个表达式编译为 JVM 字节码,然后在内部加载并运行如此生成的 JVM 类。因此,除了解析之外,每个 eval 都会产生字节码生成和 JVM 类加载成本。

您可以做的一件事是将脚本引擎强制转换为Compilable,并使用它CompiledScript进行重复调用。

如果您有许多曾经评估过的表达式,那将无济于事,但它会对经常评估的表达式有所帮助。