Java 11的Nashorn替代方案

16

我正在使用 Java 11 中的 Nashorn JavaScript 引擎,它很好用,但不久将被弃用。我已经尝试了 GraalVM,但发现执行简单表达式(例如2 + 3)需要13-14秒的时间。是否有其他替代方案可供使用?或者我应该尝试使用其他方法来使用 GraalVM(如果有的话)?

ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine engine = mgr.getEngineByName("javascript");
engine.eval("2+3");

1
你能详细说明一下你是如何运行代码使其需要13秒的吗?使用GraalVM,这段代码在我的机器上只需要不到一秒钟。 - BoriS
元注释。回答这个问题变得过时所花费的时间清楚地说明了“推荐”问答的问题! - Stephen C
2个回答

5

更新(2022年6月):

从2022年开始,J2V8也得不到良好的维护。

更好的选择是Javet


如果有人认为这个问题仍然存在,那么一个可行的、仍在积极维护的Nashorn/Rhino脚本引擎替代方案是基于JVM的J2V8绑定。

可以在此处找到构件(请务必使用此链接以获取更新的版本)

通过JNI内置多平台支持。

虽然其机制与ScriptEngine API略有不同,但性能比预期更好,并且不必处理由API误用引起的意外类加载等奇怪的副作用。

我以前自己也成功使用过它。


3
你可以使用 Rhino替代

Rhino仍然作为一个开源项目得到维护,因此具有社区参与的历史。对于某些用途来说,它显然更优秀,因为它启动速度更快。


这篇文章(来自2018年7月)引用作为相关的内容有些过时了。GraalVM 19.0.0(没有提到发布候选版本)于2019年5月发布。 - BoriS
https://mvnrepository.com/artifact/org.openjdk.nashorn/nashorn-core 2022年4月23日 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接