У меня довольно большой файл, который нужно часто оценивать,
с помощью nashorn. Я делал что-то подобное:
CompiledScript compiledScript = ((Compilable) engine).compile(text);
и позже я мог звонить много разследующее:
Context context = new SimpleScriptContext();
compiledScript.eval(context);
это было довольно быстро.
Используя новый API Polyglot, я делаю:
Source source = Source.newBuilder("js", myFile).build();
затем:
Context context = Context.newBuilder("js").option("js.nashorn-compat", "true").build();
context.eval(source)
Используя jmh, у меня большая разница в производительности между двумя
Benchmark Mode Cnt Score Error Units
JmhBenchmark.testEvalGraal avgt 5 42,855 ± 11,118 ms/op
JmhBenchmark.testEvalNashorn avgt 5 2,739 ± 1,101 ms/op
Если я выполняю eval
в одном и том же контексте, он работает правильно, но я не хочу иметь общий доступконтекст между двумя последовательными eval
(если концепция контекста Грааля не совпадает с концепцией Нэшорна).