到目前为止,我们已经使用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代码中调用“流程”功能并提供参数。

几个问题给您:


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


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

最佳答案

如果您使用的是GraalVM多语言API,请看一下ProxyObjects(https://www.graalvm.org/truffle/javadoc/org/graalvm/polyglot/proxy/ProxyObject.html)。我认为这可能是您最好的选择。
GraalVM JS实现应绝对胜过Nashorn,但可能需要进行几次预热才能达到目标。您是否允许测量中的预热?

关于javascript - 使用GraalVM评估Java中的JavaScript,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53030072/

10-09 04:57