Оценка сценариев выполнения в Grails — передовой опыт

В нашем приложении из системы отправляются многочисленные электронные письма. Эти электронные письма были одного формата для всех пользователей с разными контекстными переменными, заполняющими динамические данные.

Сейчас мы планируем функцию, позволяющую администраторам редактировать и настраивать эти шаблоны. Таким образом, планируется использовать оболочку groovy для оценки шаблонов во время выполнения, например.

Binding binding = new Binding();
binding.setVariable("model", [var1: "First Name", var2: "Last Name"])
GroovyShell shell = new GroovyShell(binding);

Object email = shell.evaluate('return "<html><title>Test Shell</title><body>${model.var1} ${model.var2}</body></html>";');

Это, кажется, работает адекватно для нас. У меня есть вопросы:

  1. Является ли GroovyShell предпочтительным движком или Rhino или другой лучше?
  2. Есть ли какие-либо проблемы с производительностью или проблемами с памятью, о которых следует знать? Любой низко висящий фрукт, который мы можем оптимизировать, т. е. можно ли повторно использовать скорлупу или переплет
  3. Какое самое большое узкое место в приведенном выше коде? Постройка? Оценка?

Благодарность


person Conor Power    schedule 30.07.2012    source источник


Ответы (2)


Я бы порекомендовал использовать что-то вроде GroovyPagesTemplateEngine, потому что это выходит за рамки простого Groovy eval, и вы и вы также можете использовать все преимущества taglib Grails. Я использую как GroovyPagesTemplateEngine, так и SimpleTemplateEngine для вашего конкретного сценария.

SimpleTemplateEngine немного быстрее, поэтому, если мне не нужно что-то большее, чем простая привязка, я использую его. Когда мне нужно иметь дело с логикой и структурами управления, я использую GroovyPagesTemplateEngine.

person Gregg    schedule 30.07.2012
comment
Спасибо за это. есть ли документация на него? В руководстве пользователя не нашел. - person Conor Power; 31.07.2012
comment
Нет, действительно нет. Но это довольно просто. Почти идентично использованию GroovyShell. Просто посмотрите на API, и если вы выполните поиск в Google, там будут примеры. - person Gregg; 31.07.2012
comment
еще раз спасибо. В итоге я использовал SimpleTemplateEngine, так как в нем было все, что мне было нужно... cowper - person Conor Power; 01.08.2012

Для Grails вместо этого используйте API рендеринга страницы. http://grails.org/doc/2.0.x/guide/introduction.html#whatsNew

person Tomas Lin    schedule 31.07.2012