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 для всей программы, хотя первоначальный вопрос еще не открыт:

Есть ли способ предварительно скомпилировать отличные скрипты, т.е. при запуске GSE? groovyc не вариант, так как это потребовало бы «внешнего» вызова программы.

Большое спасибо!

12.12.2008 08:07:34
1 ОТВЕТ

Я смотрю на ту же проблему и имею следующее:

  • Создайте один GSE, который просматривает общий каталог («данные» в вашем примере)
  • Одиночный GSE контролирует и предварительно компилирует элементы в директории, так что это ускоряет работу (не уверен, но GSE, похоже, имеет некоторый материал staitc, который зависает между созданием экземпляра.

Если ваши скрипты не сильно меняются, то лучше всего их предварительно компилировать, а когда изменение зарегистрировано, перекомпилируйте в это время.

Надеюсь, это поможет.

2
12.12.2008 08:31:47
Я не смог найти способ скомпилировать скрипты groovy, кроме как с помощью groovyc, но GroovyScriptEngine не выбрал подходящий скрипт, если он доступен только как * .class (по крайней мере, с кодом, описанным в первоначальном вопросе). Есть ли другой способ добиться того же?
MrG 12.12.2008 14:24:27