java - 模板引擎应该渲染到输出流还是返回字符串

标签 java template-engine templating

我正在创建一个 template engine benchmark程序。最初,该程序旨在通过返回渲染结果(作为字符串)来测试模板引擎。然而,一些模板作者提出了一个问题,即模板引擎不应返回字符串作为结果,而应接受输出流或编写器实例作为参数并将渲染结果合并到其中。他们声称案例代表了模板引擎正在使用的真实环境。

ASAIK,这种说法并不百分百正确。 Play!Framework(至少 1.x)要求模板引擎返回一个字符串,然后将它们放入输出流中。而且我觉得这样安排也是合理的。想想什么时候如果任何逻辑错误导致你的模板渲染过程失败,如果你的模板引擎直接输出到响应中,那么错误将变得不可恢复。在 Play 中,您有一个很好的机会将响应定向到优雅的系统错误页面,而不是让浏览器运行一半困惑的数据。

另一方面,直接渲染为输出对性能和资源消耗有明显的好处。我很好奇对于模板引擎设计者来说哪一种应该是更好的方法。

最佳答案

写入Writer,因为这是最低的共同点。为了方便起见,您的算法可能更愿意将其包装在 PrintWriter 中,这样您就可以接受 FileWriterOutputStreamWriterStringWriter .

写入字符串似乎是一个坏主意,因为在实际使用中,您不太可能需要保留整个字符串以进行后期处理,而是让您能够以小的逻辑片段写入或发送文档 - 因此您的内存消耗模式将更加现实。

请记住,如果您接受 Writer,则可以使用 StringWriter 来获取字符串。如果您使用 String,即使 Writer(和流 API)就足够了,您也将被迫永远分配该内存。

关于java - 模板引擎应该渲染到输出流还是返回字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14518389/

相关文章:

java - sleep 线程被中断导致与数据库的连接丢失

Java:执行器与队列的关系

ruby-on-rails - 在 Controller 中渲染液体模板

javascript - 循环遍历带有 mustache 的对象数组

python - 处理模板引擎中的n个菜单项

syntax - 如何连接 Twig 中的字符串

javascript - 用Electron.js加载一个Nunjucks模板

java - android studio 媒体播放器 null 对象引用

java - 如何在正则表达式中使用加号字符

php - 为什么自定义指令不立即反射(reflect)其代码中的更改