我在我的应用程序中使用的ScriptEngine来评价我的应用程序的一些客户端代码。 问题是,它没有足够的高性能和我需要采取措施提高执行的时间。 目前,它可能需要长达1463ms(平均大约是300毫秒),以EVAL一个非常简单的脚本,这基本上是在网址参数替代。
我在寻找简单的策略,而不会失去脚本能力提高这一性能。
我首先想到它汇集的ScriptEngine对象和重用。 我在规范看到它的意思被重用,但我还没有发现任何人的任何例子实际上做它。
有任何想法吗? 这里是我的代码:
ScriptEngineManager factory = new ScriptEngineManager();
GroovyScriptEngineImpl engine = (GroovyScriptEngineImpl)factory.getEngineByName("groovy");
engine.put("state", state;
engine.put("zipcode", zip);
engine.put("url", locationAwareAd.getLocationData().getGeneratedUrl());
url = (String) engine.eval(urlGeneratorScript);
对于任何反馈,我们都表示感谢!
最有可能的问题是,发动机实际评估脚本每一次的eval()被调用。 相反,你可以通过重新使用预编译脚本可编译接口。
// move this into initialization part so that you do not call this every time.
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("groovy");
CompiledScript script = ((Compilable) engine).compile(urlGeneratorScript);
//the code below will use the precompiled script code
Bindings bindings = new Bindings();
bindings.put("state", state;
bindings.put("zipcode", zip);
bindings.put("url", locationAwareAd.getLocationData().getGeneratedUrl());
url = script.eval(bindings);
FWIW,你还可以实现文件的时间戳检查,如果脚本改变调用编译(..)一次。