Оценка JavaScript в Java с помощью GraalVM - PullRequest
0 голосов
/ 28 октября 2018

До сих пор мы использовали Nashorn для оценки кода JS в нашем проекте Java.У Nashorn есть несколько известных недостатков, и мы хотели бы перейти на GraalVM.

Итак, мы сделали небольшую POC и столкнулись с несколькими проблемами, я надеюсь, что вы можете помочь нам:)

Наш бизнессценарий использования: мы предоставляем нашим пользователям платформу для написания пользовательского js-кода в соответствии со следующим интерфейсом:

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

запись представляет нашу внутреннюю модель, которая является картой Java.

И мы хотели бычтобы вызвать функцию 'process' из нашего Java-кода и предоставить параметры.

Несколько вопросов к вам:

  1. Каков наилучший способ сделать это в соответствии с лучшими практиками?Параметр 'record' - это объект Java Map, который представляет нашу внутреннюю модель.когда мы отправляем его в функцию процесса, мы хотим, чтобы он обрабатывался как стандартный объект js, чтобы наши пользователи могли писать стандартный код js в соответствии с ECMA.Как правильно это сделать?
  2. Мы заметили, что производительность Nashorn лучше, чем у Graalvm, когда мы запускаем пару тестов, это имеет смысл, или мы, вероятно, делаем что-то не так?

Мы очень ценим вашу помощь и хотели бы очень скоро переехать в Graalvm.

1 Ответ

0 голосов
/ 06 ноября 2018
  1. Если вы используете API Polyglot GraalVM Посмотрите на ProxyObjects (https://www.graalvm.org/truffle/javadoc/org/graalvm/polyglot/proxy/ProxyObject.html). Я думаю, это может быть вашей лучшей ставкой.

  2. Реализация GraalVM JS должна окончательно превзойти Nashorn, но для этого может потребоваться несколько итераций разминки. Вы допустили разогрев в своих измерениях?

...