微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用Java ScriptEngine(Groovy),如何使其更高效?

我在我的应用程序中使用ScriptEngine来评估我的应用程序中的一些客户端代码.
问题是它不够高效,我需要采取措施来改善执行时间.
目前,最多可能需要1463毫秒(平均约300毫秒)来评估一个极其简单的脚本,这个脚本基本上是URL中的参数替换.

我正在寻找简单的策略来提高性能,而不会失去脚本编写能力.

我首先想到它集合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()时引擎都会实际评估脚本.相反,您可以通过Compilable接口重新使用预编译的脚本.

    // 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,你也可以实现文件时间戳检查,如果脚本被更改,再次调用compile(..).

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐