使用Java ScriptEngine(Groovy),如何使其性能更高?
我在应用程序中使用ScriptEngine来评估应用程序中的一些客户端代码。 问题是执行不够,我需要采取措施来缩短执行时间。 目前,评估一个极其简单的脚本(基本上是URL中的参数替换)可能需要1463ms(平均约300ms)
我正在寻找一些简单的策略来提高性能,同时又不丧失脚本编写能力
我的第一个想法是将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);
任何反馈都将不胜感激
# 1 楼答案
最有可能的问题是,每次调用eval()时,引擎实际上都会对脚本求值。相反,您可以通过Compilable接口重新使用预编译脚本
FWIW,如果脚本发生更改,还可以实现文件时间戳检查调用compile(..)再说一遍