到目前为止,我们已经使用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/