Grails中的运行时脚本评估-最佳实践

Grails中的运行时脚本评估-最佳实践,grails,groovy,groovyshell,Grails,Groovy,Groovyshell,在我们的应用程序中,系统会发送大量电子邮件。对于所有用户,这些电子邮件的格式相同,动态数据中填充了不同的上下文变量 我们现在正在计划一项功能,允许管理员编辑和自定义这些模板。因此,计划使用GroovyShell在运行时评估模板,例如 Binding binding = new Binding(); binding.setVariable("model", [var1: "First Name", var2: "Last Name"]) GroovyShell shell = new Groovy

在我们的应用程序中,系统会发送大量电子邮件。对于所有用户,这些电子邮件的格式相同,动态数据中填充了不同的上下文变量

我们现在正在计划一项功能,允许管理员编辑和自定义这些模板。因此,计划使用GroovyShell在运行时评估模板,例如

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>";');
Binding Binding=新绑定();
binding.setVariable(“model”,[var1:“First Name”,var2:“Last Name”])
GroovyShell外壳=新的GroovyShell(绑定);
objectemail=shell.evaluate('return“testshell${model.var1}${model.var2}”);
这似乎对我们很有效。我的问题是:

  • GroovyShell是首选引擎还是Rhino或其他更好的引擎
  • 是否有任何性能问题或内存问题需要注意?我们可以优化任何低垂的果实,即外壳或装订是否可以重复使用
  • 上面代码中最大的瓶颈是什么?建筑?评估

  • 谢谢

    我建议使用GroovyPagesTemplateEngine之类的东西,因为它不仅仅是Groovy eval,您也可以使用所有grails taglib。我使用GroovyPagesTemplateEngine和SimpleTemplateEngine来实现您的具体场景


    SimpleTemplateEngine稍微快一点,所以如果我不需要比简单绑定更多的东西,我就使用它。当我需要处理逻辑和控制结构时,我使用GroovyPagesTemplateEngine。

    对于grails,使用页面呈现api

    谢谢。有相关文件吗?我在用户指南中找不到。不,真的没有。但这很简单。与使用GroovyShell几乎相同。只要看看API,如果你在谷歌上搜索,就会有很多例子流传开来。再次感谢。我最终使用了SimpleTemplateEngine,因为它拥有我所需要的一切。。。牛仔