Javascript Nashorn js eval比rhino js慢得多

Javascript Nashorn js eval比rhino js慢得多,javascript,java,rhino,nashorn,Javascript,Java,Rhino,Nashorn,示例程序 ScriptEngineManager mgr = new ScriptEngineManager(); ScriptEngine jsEngine = mgr.getEngineByName("JavaScript"); System.out.println(jsEngine.eval("a>10 || b<10 || c=10")); ScriptEngineManager mgr=new-ScriptEngineManager(); ScriptEngine jsE

示例程序

ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine jsEngine = mgr.getEngineByName("JavaScript");
System.out.println(jsEngine.eval("a>10 || b<10 || c=10"));
ScriptEngineManager mgr=new-ScriptEngineManager();
ScriptEngine jsEngine=mgr.getEngineByName(“JavaScript”);

System.out.println(jsEngine.eval(“a>10 | | bRhino有一个解释器,Nashorn将每个表达式编译成JVM字节码,然后在内部加载并运行生成的JVM类。因此,每个eval除了解析之外,还会产生字节码生成和JVM类加载成本

您可以做的一件事是将脚本引擎强制转换为,并使用它生成一个
CompiledScript
,以便重复调用


如果你有很多经过一次计算的表达式,这对你没有帮助,但对经常计算的表达式会有帮助。

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

您可以做的一件事是将脚本引擎强制转换为,并使用它生成一个
CompiledScript
,以便重复调用


如果您有许多经过一次计算的表达式,这将不会有帮助,但对经常计算的表达式会有帮助。

您如何测量速度?您是否有一些实际比较执行时间的示例代码?解决方法:实现您自己的解析器?它们似乎是简单的逻辑表达式。@markspace我刚刚给出了简单表达式的示例但是我们使用了很多javascript函数,比如indexof()、replace、date等等……我将更新question@pvg我只是制作了一组表达式,并在java7(rhino)和java8(nashorn)上运行它们并比较了时间difference@AttilaSzegedi给出了答案,结果奏效了……最好解释一下为什么人们否决了这个问题,以及你是如何衡量速度的?你有没有一些实际比较执行时间的示例代码?解决方法:实现你自己的解析器?它们似乎是简单的逻辑表达式。@markspace我刚才给出了一个简单表达式的例子,但是我们使用了很多javascript函数,比如indexof()、replace、date和许多……我将更新question@pvg我只是制作了一组表达式,并在java7(rhino)和java8(nashorn)上运行它们并比较了时间difference@AttilaSzegedi给出了答案,它起了作用……最好解释一下为什么人们否决了这个问题谢谢你的答案这一变化后,它起到了非常好的作用,表现也有了很大的改善谢谢你的答案这一变化后,它起到了非常好的作用,表现也有了很大的改善