使用GraalVM评估Java中的JavaScript

时间:2018-10-28 09:28:17

标签: javascript java graalvm

直到现在,我们已经使用Nashorn在Java项目中评估JS代码。 Nashorn有几个已知的缺点,我们希望迁移到GraalVM。

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

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

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

记录代表我们的内部模型,它是Java Map。

我们想从Java代码中调用'process'函数并提供参数。

对您的几个问题

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

我们非常感谢您的协助,并希望尽快迁移到Graalvm。

1 个答案:

答案 0 :(得分:0)

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

  2. GraalVM JS实现应绝对胜过Nashorn,但可能需要进行几次热身迭代才能达到目标。您是否允许测量中的预热?