gpt4 book ai didi

java - 使用 Java ScriptEngine (Groovy),如何提高性能?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:55:05 25 4
gpt4 key购买 nike

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

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

我首先想到的是池化 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(..)。

关于java - 使用 Java ScriptEngine (Groovy),如何提高性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12220267/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com