10

我已经将 Rhino 用于图形内部的脚本组件。在该项目中有大约 200 个独立运行的小脚本。启动应用程序时,脚本应立即全速运行。Rhino 的表现已经足够了,但是由于 Oracle 建议迁移到 Nashorn,我面临着两难境地。

下面的图片显示了 Rhino 和 Nashorn 在大约 15,000 次脚本调用时的负载差异。Nashorn 的启动缓慢是我最大的问题。

请注意,这又回到了 JDK 1.8.0。JDK 1.8u5 类似

发动机性能比较

我希望图片清楚。

这是我如何使用 ScriptEngine 的概述:

  • 我正在使用一个脚本引擎实例,
  • 我为每个脚本创建一个 CompiledScript 对象,
  • Swingworker 执行 CompiledScript.eval() 一次。
  • SwingWorkers 每半秒启动一次。
  • 每个 CompiledScript 都有自己的 SimpleScriptContext 实例,每次执行都会重用该实例。

下面我包含了一个运行时配置文件,说明引擎随着时间的推移有多忙; 在此处输入图像描述

有谁知道如何克服 Nashorn 的启动缓慢?


2015年 4 月 15 日更新
在 Java8u45 上使用 200 个单独的脚本运行相同的测试。
性能要好很多!在 Java7 上运行速度与 Rhino 一样快。

4

1 回答 1

3

在 Java 1.8 上,您可以通过javax.scriptAPI 使用此 Maven 依赖项并请求引擎来使用 Rhino rhino

    <dependency>
        <groupId>de.christophkraemer</groupId>
        <artifactId>rhino-script-engine</artifactId>
        <version>1.1.1</version>
    </dependency>

主页在这里:https ://github.com/cevou/rhino-script-engine

二进制文件:这里

如果您想要最新版本的 Rhino,您可以通过添加以下内容来覆盖它:

    <dependency>
        <groupId>org.mozilla</groupId>
        <artifactId>rhino</artifactId>
        <version>${rhinoVersion}</version>
    </dependency>

二进制文件:这里

顺便说一句,如果您想使用 get the latest Rhino on Java 1.7 via javax.script,您应该请求引擎名称rhino17R5,否则您可能会随机获得旧 Rhino 的实例,它是 JRE 的一部分。所需的确切引擎名称取决于rhino-script-engine. 对于 1.1.1,它是rhino17R5.

于 2015-03-05T08:09:17.550 回答