2008-12-12 176 views
1

我正在实现一个利用Groovy作为脚本引擎的程序,为用户提供了自动执行任务的可能性。因此脚本有需求,这是我用下面的代码实现要加载:Groovy:加载动态脚本的最佳/性能方式

// short version, try/catch and error handling skipped 
String[] roots = new String[] { "data" }; 
Binding binding = new Binding(); 
GroovyScriptEngine gse = new GroovyScriptEngine(roots); 

binding.setVariable("control", this.getControl()); 
// .. several others 

gse.run(scriptName, binding); // where scriptName is provided through user selection 

我注意到执行需要400毫秒和800之间对拳头运行整个街区,但下降到稍后在我的笔记本上运行200到400。

开始时为每个事件初始化一个新的GroovyScriptEngine并结束后缀。在此期间,我为整个程序使用了一个GSE实例,但最初的问题尚未解决:

是否有预编译groovy脚本的方法,即在GSE启动时? groovyc不是一个选项,因为那需要一个“外部”程序调用。

非常感谢!

回答

2

我在看同样的问题,有以下几点:

  • 创建一个单一的GSE是(在你的榜样“数据”)着眼于共享目录
  • 单GSE监测和预编译目录中的项目,以便加速(不知道,但GSE似乎有一些staitc东西挂起之间创建实例

如果你的脚本没有太大的改变,然后预编译它们是最好的方式去和当一个变化登记重新合作在那个时候。

希望有所帮助。

+0

我找不到预编译groovy脚本的方式,除了使用groovyc,但GroovyScriptEngine如果仅以* .class的形式提供,则不会选择正确的脚本(至少不会使用初始问题中描述的代码) 。是否有另一种方法来实现相同? – MrG 2008-12-12 14:24:27