Оценка сценариев во время выполнения в Grails - Best Practicse
В нашем приложении многочисленные электронные письма отправляются из системы. Эти электронные письма имели одинаковый формат для всех пользователей с различными контекстными переменными, заполняющими динамические данные.
Сейчас мы планируем функцию, которая позволит администраторам редактировать и настраивать эти шаблоны. Таким образом, план состоит в том, чтобы использовать оболочку 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>";');
Кажется, это работает для нас адекватно. У меня есть следующие вопросы:
- Является ли GroovyShell предпочтительным механизмом для использования или Rhino или другой лучше?
- Есть ли какие-либо проблемы производительности или памяти, о которых следует знать? Любой низко висящий фрукт, который мы можем оптимизировать, т.е. можно ли повторно использовать скорлупу или связку
- Какое самое узкое место в приведенном выше коде? Конструкция? Оценка?
Спасибо
2 ответа
Я бы порекомендовал использовать что-то вроде GroovyPagesTemplateEngine, потому что оно выходит за рамки только Groovy eval, и вы, и вы также можете использовать все достоинства grails taglib. Я использую оба GroovyPagesTemplateEngine и SimpleTemplateEngine для вашего точного сценария.
SimpleTemplateEngine немного быстрее, поэтому, если мне не нужно гораздо больше, чем просто связывание, я использую его. Когда мне нужно разобраться с логикой и структурами управления, я использую GroovyPagesTemplateEngine.
Для grails используйте API рендеринга страницы. http://grails.org/doc/2.0.x/guide/introduction.html