Движок JavaScript для Java - PullRequest
       25

Движок JavaScript для Java

2 голосов
/ 18 января 2011

В настоящее время я использую Rhino в своем приложении. Мне нужно проверить некоторые JavaScript и получить значения из него (мне не нужно использовать классы Java через JavaScript). Но это слишком медленно. Может быть, есть какие-либо способы использования V8 с Java-приложением?

Обновление:

У меня большая коллекция предметов разных типов. Мне нужен гибкий механизм для проверки и преобразования этих объектов в требуемую форму (пользователь должен иметь возможность изменять правила проверки и преобразования (во время выполнения), то есть жесткое кодирование этих правил в Java не подходит). Сейчас все работает на Rhino, но производительность плохая. Я думал об использовании NodeJS, но кажется, что связь с ним, сериализация объектов через процессы и т. Д. - все это будет стоить очень дорого.

Ответы [ 2 ]

4 голосов
/ 18 января 2011
  1. Вы абсолютно уверены, вам действительно нужно eval?Есть очень и очень мало мест, где на самом деле необходимо eval.

  2. Вы можете использовать ProcessBuilder для распространения на любой процесс, доступный для базовой системы.,Я бы сказал, что вероятность того, что он быстрее, чем у Rhino eval, низка.

  3. Вы могли бы поддерживать процесс NodeJS рядом с вашим приложением, котороеВы общаетесь с помощью сокета.Это может выиграть скоростную гонку с eval в Rhino.

Если вы приведете пример того, чего вы на самом деле пытаетесь достичь, возможно, этолюди могут предложить вам лучший подход.

1 голос
/ 18 января 2011

Посмотрите на javax.script.ScriptEngine. Это стандартный пакет Java, позволяющий использовать пробные версии и привязку данных:

ScriptEngineManager engineMgr = new ScriptEngineManager();
ScriptEngine engine = engineMgr.getEngineByName("JavaScript");
Bindings bindings = engine.createBindings();

String script = "javascript to eval goes here.....";
bindings.put(varName1, value1);
bindings.put(varName2, value2);

Object obj = engine.eval(script, bindings)
...