犀牛JS的eval比犀牛JS
问题描述:
示例程序犀牛JS的eval比犀牛JS
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine jsEngine = mgr.getEngineByName("JavaScript");
System.out.println(jsEngine.eval("a>10 || b<10 || c=10"));
在我的节目我用上面的代码来计算表达式的1000年,它使用JavaScript函数一样的indexOf(),更换日期函数和许多慢得多more.This类型的表达式曾被评估在犀牛(当平台Java版本是Java 7)比nashorn速度更快....我应该说至少15〜20倍更快....
使用rhino与Java 8似乎是一个乏味的工作...可以有人建议的解决方法,使其更快...
答
Rhino有一个解释器,Nashorn将每个表达式编译成JVM字节码,然后在内部加载并运行如此生成的JVM类。因此除了解析之外,每个eval都会产生字节码生成和JVM类加载成本。
你可以做的一件事是将脚本引擎强制转换为Compilable,并用它来创建CompiledScript
以进行重复调用。
如果您有很多经过一次评估的表达式,这将无济于事,但它对经常评估的表达式有帮助。
+0
感谢您的答案,它的工作非常出色在这种变化之后,性能有了很大提高 – Hadooplearner
你如何测量速度?你有一些实际比较执行时间的示例代码吗? – pvg
解决方法:实现您自己的解析器?他们似乎是简单的逻辑表达。 – markspace
@markspace我刚刚给了简单表达式的例子,但我们正在使用如此多的javascript函数,如indexof(),替换,日期和很多...我将更新问题 – Hadooplearner