2008-12-12 73 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