2

到目前为止,我们已经使用 Nashorn 来评估 Java 项目中的 JS 代码。Nashorn 有几个已知的缺点,我们想迁移到 GraalVM。

所以我们做了一个小的 POC 并遇到了几个问题,我希望你能帮助我们:)

我们的业务用例:我们为用户提供了一个平台,可以根据以下接口编写自定义js代码:

function process(record, ctx, logger, next) {
   if (record && record.data){
        record.data.firstName = "Joe";
    }
    return record;
}

record 代表我们的内部模型,它是一个 Java Map。

我们想从我们的 Java 代码中调用“进程”函数并提供参数。

几个问题问你:

  1. 根据最佳实践,最好的方法是什么?'record' 参数是一个 Java Map 对象,代表我们的内部模型。当我们将它发送到 process 函数时,我们希望它作为标准 js 对象处理,以便我们的用户可以根据 ECMA 编写标准 js 代码。正确的方法是什么?
  2. 当我们运行几个测试时,我们注意到 Nashorn 的性能优于 Graalvm,这是有道理的还是我们可能做错了什么?

我们非常感谢您的帮助,并希望很快搬到 Graalvm。

4

1 回答 1

0
  1. 如果您使用的是 GraalVM 多语言 API,请查看 ProxyObjects ( https://www.graalvm.org/truffle/javadoc/org/graalvm/polyglot/proxy/ProxyObject.html )。我认为这可能是你最好的选择。

  2. GraalVM JS 实现应该绝对优于 Nashorn,但可能需要几次热身迭代才能到达那里。你在测量中允许预热吗?

于 2018-11-06T13:35:14.863 回答